![]() |
Auf Desktop zeichnen
Hallo,
ich habe vor ein Programm zu programmieren was ermöglicht direkt auf dem Desktop zu zeichnen. "zu zeichnen" bedeutet ich möchte einfache Zeichenfunktionen wie Linien, Freihandzeichnungen, Ellipsen und Rechtecke zeichnen. Wie man dies auf einem TBitmap macht (Canvas) weiß ich auch schon und habe ich auf schon mehrfach angewendet. In meinem konkreten Fall geht es jetzt aber darum nicht auf eine vorbereitete Zeichenfläche zu zeichnen sondern direkt auf dem Desktop. Damit meine ich, dass ich wenn ein z.b.: Firefox-Fenster geöffnet habe ich direkt auf das Fenster zeichnen können möchte (Die Toolleiste bleibt im Vordergrund und Zeichenfunktion ist an-/ausschaltbar, damit auch noch die normale Bedienung des Programms möglich ist). Hat jemand eine Idee wie man das "Globales" Zeichnen realisieren könnte? Schon mal vielen Dank im Voraus mfg KahPee |
AW: Auf Desktop zeichnen
Kannst du bitte für deine zweite Frage ein neues Thema eröffnen und diese aus dem ersten Beitrag entfernen? (Bei uns gilt: Pro Thema nur eine Frage) Danke :)
|
AW: Auf Desktop zeichnen
Delphi-Quellcode:
var
DC : HDC; Canvas : TCanvas; begin DC := GetWindowDC(GetDesktopWindow()); try Canvas := TCanvas.Create(); try Canvas.Handle := DC; Canvas.Pen.Color := clLime; Canvas.Rectangle(1,1,100,100); finally Canvas.Free; end; finally ReleaseDC(0, DC); end; end |
AW: Auf Desktop zeichnen
Hey vielen Dank, das war ja gar nicht so schwer. Allerdings habe ich festgestellt, das das erzeugte rechteck sehr "flüchtig" ist. Wenn man die Maus über die Taskleiste oder aber über Minimieren/Maximieren und andere flächen bewegt verschwindet das rechteck gleich wieder. Kann man irgendwie erzwingen, dass das Rechteck nicht bei solchen Ereignissen verschwindet (denke mal es handelt sich um Prozeduren à la Repaint oder so)
|
AW: Auf Desktop zeichnen
Wernn das Fremd-Fenster sich neuzeichnet, sind deine schönen Rechtecke natürlich wieder weg.
Als Ausweg gibts dann nur, die Neuzeichnungs-Message des Fremd-Fensters zu hooken und deinen Zeichen-Code direkt danach auszuführen, immer dann, wenn sich das Fremd-Fensteer neu zeichnen will. |
AW: Auf Desktop zeichnen
Oder man legt ein transparentes Fenster über alles und zeichnet darin "nichttransparent" das Gewünschte ein.
|
AW: Auf Desktop zeichnen
Dann muss man aber irgendwie noch das "Durchklicken" emulieren, oder nicht?
Und nicht nur das...Eingabefelder, Scrollleisten usw... Naja, kommt drauf an, wofür das eigentlich gedacht ist. Wenns ein Bildschirmschoner sein soll, dann dürfte das ja keine Probleme machen, aber sonst sind die Fenster unter dem transparenten ja gesperrt. |
AW: Auf Desktop zeichnen
IIRC ist das aber mit WS_EX_LAYERED in den Griff zu bekommen.
|
AW: Auf Desktop zeichnen
Huh?...*googlegoogle*....wusste ich gar nicht, dass es sowas gibt :oops:
Wieder was gelernt :thumb: Aber ist die Eigenschaft fürs Durchklicken dann nicht eher WS_EX_TRANSPARENT? |
AW: Auf Desktop zeichnen
Die Kombination von beiden macht' s ;) Hab da einen alten Thread wiedergefunden:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz