![]() |
Desktop Canvas Clear ?
Hallo
ich habe so was auf den Desktop gezeichnet
Delphi-Quellcode:
var DP: TCanvas; begin DP := TCanvas.Create; DP.Handle := GetDC(0); DP.font.Height:=(40); DP.font.Name:=('Verdana'); DP.font.Color:=(cllime); DP.font.Style:=[fsBold]; DP.TextOut(round(Screen.width/2-150),round(Screen.height/2+Screen.height/4),'Laustärke :'+inttostr(100-round(100/72*Form2.Trackbar1.position))+' %'); ReleaseDC(0, DP.Handle); DP.Handle := 0; DP.Free; end; wie bekomme ich das wieder weg ? MfG |
Re: Desktop Canvas Clear ?
|
Re: Desktop Canvas Clear ?
Mit
Delphi-Quellcode:
würde es gehen aber der ganze Desktop flimmert dann immer kurz auf.
invalidaterect(windowfromdc(0), nil, false);
Könnte man es vielleicht mit transparenter Farbe übermalen ? Ich hab das mit clnone probiert aber dann wird es schwarz. MfG |
Re: Desktop Canvas Clear ?
Das muss doch irgendwie gehen oder ? Vielleicht wenn man das anders draufzeichnet ?
Oder kann man wenigstens nur einen Teil des Desktops neuzeichen ? MfG |
Re: Desktop Canvas Clear ?
Denken hilft. Ich wuerde mal InvalidateRect in der Win32-Hilfe nachschlagen. Fuer irgendwas muss der Namensbestandteil "Rect" doch gut sein.
|
Re: Desktop Canvas Clear ?
Gibt es keine andere möglichkeit ? Wer eine Logitech Tastatur hat, die hat ja auch so eine Anzeige auf dem Desktop und da geht das auch gut ?
--- Ich habe das jetzt gemacht aber irgendwie wills nicht gehen.
Delphi-Quellcode:
Was habe ich falsch gemacht ?var rectnz:PRect; begin rectnz.Top:=5; rectnz.Bottom:=10; rectnz.Left:=5; rectnz.Right:=20; invalidaterect(windowfromdc(0), rectnz, false); MfG |
Re: Desktop Canvas Clear ?
wenn ich es mit den obirgen koordinaten für die Textausgabe vergleiche würde ich sagen es liegt an dem bereich den du neu zeichnen lässt.
|
Re: Desktop Canvas Clear ?
Der Code ist ja auch falsch.
Delphi-Quellcode:
var
rectnz: TRect; begin rectnz.Top:=5; rectnz.Bottom:=10; rectnz.Left:=5; rectnz.Right:=20; InvalidateRect(WindowFromDC(0), @rectnz, false); |
Re: Desktop Canvas Clear ?
Es ging nicht weil ein Fehler kam nicht weil es da nicht neugezeichnet wurde.
So geht es zwar ohne Fehler, aber irgendwie wird immer noch der ganze Desktop neugezeichnet und es flimmert weiterhin kurz auf. Zitat:
MfG |
Re: Desktop Canvas Clear ?
Zitat:
Somit wird alles Transparent/durchklickbar was die Farbe TransparentColor hat. |
Re: Desktop Canvas Clear ?
Ich habe nun so eine Form gemacht. Ich habe aber noch 1 Problem.
Wenn ich Form.Show mache dann drängt sich die Form immer in den Fordergrund. Also es geht der Focus drauf. Kann man das irgenwie unterbinden ? MfG |
Re: Desktop Canvas Clear ?
Hi,
es mag ja noch was besseres geben, aber so müsste es auch gehen:
Delphi-Quellcode:
private
OldWindowProc: TWndMethod; procedure SubClassWndProc(var Message: TMessage); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SubClassWndProc(var Message: TMessage); begin case Message.Msg of WM_WINDOWPOSCHANGED: begin SetWindowPos(Form1.Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE); Form1.WindowProc:= OldWindowProc; end; end; OldWindowProc(Message); end; procedure TForm1.FormCreate(Sender: TObject); begin OldWindowProc:= Form1.WindowProc; Form1.WindowProc:= SubClassWndProc; end; procedure TForm1.FormDestroy(Sender: TObject); begin Form1.WindowProc:= OldWindowProc; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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