Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Text auf Desktop ausgeben (https://www.delphipraxis.net/92563-text-auf-desktop-ausgeben.html)

DavidKlimas 22. Mai 2007 11:30


Text auf Desktop ausgeben
 
Einfaches resultat, schwieriger weg. Ich möchte einen beliebigen (veränderbaren) text automatisch auf dem Desktop ausgeben der lesbar ist, egal welchen Farbton das Hintergrundbild hat. D.H. schwarzer Text bei weissem Hintergrund, weisser Text bei schwarzen Hintergrund etc. Ich dachte daran, Das das programm vor dem Ausgeben des Textes die Stelle analysiert und ein Negativbild von dem Ausschnitt erstellt was dann als Textfarbe benutzt wird.

Wäre für Ratschläge oder andere Ansätze dankbar

Nikolas 22. Mai 2007 11:33

Re: Text auf Desktop ausgeben
 
schau mal nach pen.mode:=pmxor;

_frank_ 22. Mai 2007 11:48

Re: Text auf Desktop ausgeben
 
direktes malen auf den Desktop (getDC(0)) bringt viele Nachteile mit sich (evtl wird auf fenster gemalt, welches dann gf. verschoben wird...).
ich hab mir damals mti nem formular beholfen welches ich anhand von regions einem Schriftzug angepasst habe:
http://www.fw-web.de/download.php?fi.../units/OSD.zip

//edit:link korrigiert

HTH Frank

chaosben 22. Mai 2007 11:56

Re: Text auf Desktop ausgeben
 
Erstmal sollte man klären was man unter Desktop versteht.
Wenn man den Desktop nach Microsoft-Art meint (das absolute Root-Window), dann hat man das Problem, welches Frank angesprochen hat.

Meint man hingegen die Fläche, auf der sich die Icons befinden (aka SysListView) kann man das Ganze relativ einfach umsetzen:

Delphi-Quellcode:
procedure TForm1.tm_Timer1Timer(Sender: TObject);
var
  wnd : HWND;
  Canv : TCanvas;
  t : STring;
  r : TRect;
begin
  t:=TimeToStr(now);

  wnd:=GetDesktopWindow;
  wnd:=FindWindowEx(wnd, 0, 'Progman', nil);
  wnd:=FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil);
  wnd:=FindWindowEx(wnd, 0, 'SysListView32', nil);
  Canv:=TCanvas.Create;
  Canv.Handle:=GetDc(wnd);
  Canv.Brush.Style:=bsClear;
  r:= Rect(100,100,100+Canv.TextWidth(t),100+canv.TextHeight(t));

  InvalidateRect(wnd,@r,true);
  SendMessage(wnd, WM_PAINT,0,0);

  Canv.TextOut(100,100, t);
  Canv.Free;
end;

_frank_ 22. Mai 2007 18:17

Re: Text auf Desktop ausgeben
 
gut, diese variante kannte ich noch nicht...
kannte nur die screen-lösung, aber für OnScreenDisplays bevorzuge ich doch weiterhin meine Region-Form-Variante ;)

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz