![]() |
Zeichnen auf Fremdes Panel
Hallo,
ich möchte gerne in einer Fremden Applikation etwas zeichnen, dafür habe ich mir nen Testprogramm geshcrieben das nur ein Panel beinhaltet und ich habe ein Programm geshcrieben, dass darin einen Kreis zeichnen soll. Also ermittle ich mit Das Handle der Application und dachte mir, dass ich dann, wie auf dem desktop, zeichne, jedoch funktioniert das nicht, ich bekomme keine anzeige, wenn ich GetWindowDC(0) anstelle von GetWindowDc(WindowHandle) aufrufe zeichnet er auch korrekt auf meinem desktop.
Delphi-Quellcode:
Danke
procedure TForm1.Button1Click(Sender: TObject);
var DCanvas: TCanvas; DHandle: HWND; begin TheWindowHandle:=FindAWindow('Programmsize', ''); if TheWindowHandle=0 then ShowMessage('Window not found!') else begin ShowWindow(TheWindowHandle, SW_SHOW); DHandle := GetWindowDC(TheWindowHandle); //DHandle := GetWindowDC(0); if DHandle<>0 then begin try DCanvas:=TCanvas.Create; try DCanvas.Handle:=DHandle; DCanvas.Font.Color:=clRed; DCanvas.Font.Size:=72; DCanvas.Brush.Style:=bsClear; DCanvas.TextOut(20, 20, 'Ein'); DCanvas.Brush.Style := bsDiagCross; DCanvas.Ellipse(0, 0, 100, 100); finally DCanvas.Free; end; finally ReleaseDc(TheWindowHandle, DHandle) end; end end; end; |
Re: Zeichnen auf Fremdes Panel
Delphi-Quellcode:
Probier es mal damit
TheWindowHandle:=FindWindow(nil, 'Programmsize');
|
Re: Zeichnen auf Fremdes Panel
Findwindow liefert das gleiche Handlezurück wie ich es auch mit enumwindows herusgefunden hatte, das funktioniert leider auch nciht
Edit : ic hhätte vllt anmerken sollen, dass FindAWindow das Handle zurückliefert |
Re: Zeichnen auf Fremdes Panel
Also es leigt wohl daran, das sich die falsche id an der hand habe, wenn ich mir die Threadid ausgeben lasse von meinem fenster und diese mit enumthreadwindows aufrufe komme ich an das handle und kann auch darauf malen, jedoch funktioniert die ermittlung mit GetWindowThreadProcessId(FindAWindow('Programmsize ', ''), @PID); nicht . ich bekomme eine flasche id zurück.
wie kann ich die threadid meines Programms ermitteln? |
Re: Zeichnen auf Fremdes Panel
Wozu brauchst du die Prozess ID?
Ich kenne das nur zum Lesen oder schreiben innerhalb des speichers:
Delphi-Quellcode:
Das Window Handle über deine FindAWindow Funktion sollte eigentlich reichen.
var
PID: Integer; HandleWindow: Cardinal; begin HandleWindow := OpenProcess(PROCESS_VM_READ,False,PID); {...} |
Re: Zeichnen auf Fremdes Panel
Du musst natürlich das Handle des Panels ermitteln, das des Parent-Fensters reicht nicht. Du musst also erst mit
![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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