![]() |
Text auf Desktop Zeichnen
Moin Moin,
habe folgende Funktionen gefunden
Delphi-Quellcode:
oder
procedure Tmnb_form.WriteText(TransText: string);
var MyHand: HWND; MyDc: HDC; MyCanvas: TCanvas; begin MyHand := GetDesktopWindow; MyDc := GetWindowDC(MyHand); MyCanvas := TCanvas.Create; MyCanvas.Handle := MyDC; BeginPath(MyCanvas.Handle); MyCanvas.Font.Color := clRed; MyCanvas.Font.Name := 'Courier New'; MyCanvas.Font.Size := 60; SetBkMode(MyCanvas.Handle, TRANSPARENT); EndPath(MyCanvas.Handle); MyCanvas.TextOut(0, 0, TransText); end;
Delphi-Quellcode:
beide funktionieren so gesehen recht ok! aber - was ist wenn der Text dann auf dem Desktop zu sehen ist?!
procedure DrawPicture(const FileName: string; Width: Integer = 0; Height: Integer = 0; Top: Integer = 0; Left: Integer = 0);
var DC: HDC; Canvas: TCanvas; Bitmap: TBitmap; begin // Falls die Datei existiert, dann fortfahren if FileExists(FileName) then begin Bitmap := TBitmap.Create; try Bitmap.LoadFromFile(FileName); // Falls eigene Parameter angeben sind, werden diese benutzt. if Height > 0 then Bitmap.Height := Height; if Width > 0 then Bitmap.Width := Width; // Wir holen uns den 'Device Context' vom Desktop DC := GetWindowDC(GetDesktopWindow()); try Canvas := TCanvas.Create(); try // Wir weisen den DC dem Canvas zu Canvas.Handle := DC; // Das Bild wird an Left / Top auf den Desktop gezeichnet Canvas.Draw(Left, Top, Bitmap); finally Canvas.Free; end; finally ReleaseDC(0, DC); end; finally Bitmap.Free; end; end; end; Wie bekomme ich den wieder weg?! oder stehe ich auf dem Schlauch?! |
Re: Text auf Desktop Zeichnen
Nein, du stehst nicht auf dem Schlauch, die Sache ist und bleibt einfach do das es
mit dem zeichnen auf den Desktop nicht das Warhe ist. Es gibt Optionen mit dem man das was dem Desktop angetan wurde wieder rückgängig zu machen aber dadurch kommt es zum flackern der Icons da diese nan neu gezeichnet werden müssen. Das kann man unter XP nicht anders lösen mit diesen Methoden. zB.:
Delphi-Quellcode:
oder:
Windows.UpdateWindow(GetDesktopWindow)
Delphi-Quellcode:
Besser ist es ein durchsitiges Fenster zu erstellen und darauf zu zeichnen.
InvalidateRect(GetDesktopWindow, nil, TRUE);
Beispiele sollte es hier in der DP dazu genügend geben ... |
Re: Text auf Desktop Zeichnen
hmm ok dann Danke ich :-)
|
Re: Text auf Desktop Zeichnen
Hallo
Zusätzlicher Hinweis:
Delphi-Quellcode:
In deinem oberen(ersten) Beispiel vermisse ich noch das notwendige Aufräumen mit
MyDc := GetWindowDC(MyHand);
Delphi-Quellcode:
....
ReleaseDC
|
Re: Text auf Desktop Zeichnen
Ein durchsichtiges Fenster wäre auch besser bzgl. Redraw. Falls das von Dir Ausgegebene von irgend etwas überdeckt wird ist es weg - auch wenn es erhalten bleiben soll.
|
Re: Text auf Desktop Zeichnen
Hallo,
noch 'n Hinweis: GetDC(0) liefert direkt den Desktop-DC. und noch einer: seit Vista ist es kein Spaß mehr, auf den Desktop zu zeichnen. Das ist elend langsam geworden. Such Dir also lieber eine andere Strategie. Gruß xaromz |
Re: Text auf Desktop Zeichnen
Zitat:
|
Re: Text auf Desktop Zeichnen
Hi,
eine Möglichkeit, auf die ürsprüngliche Frage Zitat:
![]() Mfg FAlter |
Re: Text auf Desktop Zeichnen
Zitat:
Du kenst aber das Problem mit dem flackernden Bildschirm ? |
Re: Text auf Desktop Zeichnen
Hallo,
Zitat:
Gruß xaromz |
Re: Text auf Desktop Zeichnen
Hi,
bei mir flackert nichts :gruebel: und die Symbole werden nur einmal bei Systemstart geladen, dann sind sie im IconCache drin und werden beim Neuzeichnen nicht neu eingelesen, sondern eben nur nochmal neugezeichnet (falls überhaupt ein Symbol betroffen ist). [edit] Wenn ich mir diesen anderen Thread ansehe, der hier gerade rumkursiert, wo Schnee (wermutlihc bewegte Flocken) gezeichnet werden soll, kann ich mir schon vorstellen, dass das mit direkt auf Bildschirm zeichnen gewaltig flackern wird, wenn man jedesmal Schnee zeichnet, Bildschirm neuzeichnet und Schnee versetzt zeichnet oder so. [/edit] Ich nutz es normalerweise übrigens auch nicht. (Wozu außer für Cheats im Minesweeper-Stil braucht man sowas?) Nur dachte ich, da nach sowas doch öfters gefragt wird, dass ichs einfach mal für die CodeLib poste. Warum eigentlich TCanvas? Ich dachte, das wäre ne abstrakte Klasse, die man nicht verwenden sollte, und jetzt muss ich ständig TCanvas.Create lesen. Hab ich was verpasst, oder bekommen die anderen einfach ab und zu mal "Abstract error." und fragen dann gleich das nächste Mal hier nach? Mfg FAlter |
Re: Text auf Desktop Zeichnen
Du könntest auch mit Bitblt den hintergrund erst sichern und dann wieder herstellen...
Dann währe es eine art Sprite... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 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-2025 by Thomas Breitkreuz