Painten außerhalb des eigenen Fensters

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
joe
Beiträge: 37
Registriert: Fr 28. Mai 2010, 15:47

Painten außerhalb des eigenen Fensters

Beitrag von joe »

Hallo!

Ich möchte außerhalb meines eigenen TForm auf den Bildschirm painten.
Also z.B. auf den Desktop oder an eine Stelle, wo eigentlich ein anderes Fenster liegt.
Die Ausgabe von ein paar Rechtecken würde für den Anfang erst mal genügen.

1. Ansatz: Kleines Fenster mit BorderStyle=bsNone.
Damit könnte ich zumindest erst mal ein rechteckigen Bereich farbig darstellen.
Jedoch:
(a) Leider funktioniert TForm.FormStyle:=fsStayOnTop offenbar nicht unter Linux.
(getestet mit Lazarus 0.9.28.2-8ubuntu unter Kubuntu 10.04).
(b) Mausklicks werden dann von meinem TForm abgeschirmt, was für meinen Anwendungsfall ungünstig ist.
(c) Der Fenstermanager verändert mitunter auch die Pixel neben meinem TForm (Schatten-Effekt et cetera).

2. Ansatz: Painten via GetDC(0)

Code: Alles auswählen

procedure TForm1.Test;
  var c      : TCanvas;
      hScreen: HDC;
  begin
  c:=TCanvas.Create;
  hScreen:=GetDC(0);
  c.Handle:=hScreen;
  with c do
    begin
    Brush.Style:=bsSolid;
    Brush.Color:=clRed;
    FillRect(0,0,100,100);
    end;
  ReleaseDC(0,hScreen);
  end;

Funktioniert aber leider nicht.

Corpsman stand vor einigen Monden offenbar vor einem ähnlichen Problem (http://www.lazarusforum.de/viewtopic.php?f=25&t=3131).
@Corpsman: Hast du dafür mittlerweile eine Lösung gefunden?

Nachteil wäre wohl auch, dass meine Ausgaben beim nächsten Repaint des ggf. an dieser Stelle befindlichen Fensters verschwinden.
Damit könnte ich aber evtl. leben.


Aktuell benötige ich das für Linux. Eine portable Lösung wäre mir aber lieber.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Painten außerhalb des eigenen Fensters

Beitrag von MAC »

uhh , frage für mich :)

Code: Alles auswählen

var
Canv: TCanvas; 
 
Canv := TCanvas.Create;
Canv.Handle := GetWindowDC(0);    // eigentliche Zeile
 
// paint paint paint.
 
// am ende des programms
Canv.Free;


ja, ähnelt deinem eben sehr, aber wenn du einmal drüberwischts (unter windows) ist es weg.

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Painten außerhalb des eigenen Fensters

Beitrag von carli »

ich glaub, für solche exotischen Wünsche solltest du mir der libx arbeiten

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Painten außerhalb des eigenen Fensters

Beitrag von mschnell »

joe hat geschrieben:Ich möchte .. painten ..
Zehn Qualen ? Du bist im falschen Formum.... :twisted:
-Michael

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Painten außerhalb des eigenen Fensters

Beitrag von corpsman »

sry, leider bin ich auch noch nicht weitergekommen,..
--
Just try it

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: Painten außerhalb des eigenen Fensters

Beitrag von _X_ »

Dafür hab ich ein paar Code Schnippsel, aber das fertige Projekt finde Ich gerade nicht.
Die Schnippsel sind im Anhang. Ich verwende zum Erzeugen der Maske beim Zeichnen opbitmap.
Schau sie einfach mal an.

mfg _X_
Dateianhänge
fullscreen-painting.zip
Schnippsel
(1.41 KiB) 125-mal heruntergeladen

Antworten