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;
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.