![]() |
Handle eines bestimmten Panels
Und zwar will ich auf einen Button der auf einem Panel liegt zugreifen.
Das Panel trägt den Name=PanelHauptfenster und hat caption=''. Tja, nur irgendwie klappt es nicht dass ich die Handleadresse vom Panel rausfinde. Hab's so probiert:
Delphi-Quellcode:
Aber auch mit hPanel:=0; while hPanel = 0 do hPanel := FindWindowEx(FHauptmenuHwnd,PanelHauptfensterHwnd,NIL,NIL); PanelHauptfensterHwnd := hPanel; showmessage('Panelhandle gefunden');
Delphi-Quellcode:
klappt's nicht.
hPanel := FindWindow('PanelHauptfenster',Nil);
Wo ist mein Denkfehler? FHauptmenuHwnd ist das Handle des Hauptformulares auf dem das Panel liegt. |
Re: Handle eines bestimmten Panels
Würde dir das nicht reichen:
Delphi-Quellcode:
:?:
Button1.handle;
|
Re: Handle eines bestimmten Panels
nö, da sich der button nicht in dem selben programm befindet.
edit: Fehler gefunden! Das THandle 'PanelHauptfensterHwnd' muss public sein und nicht private :oops: Aber jetzt hängt's am klicken des buttons:
Delphi-Quellcode:
:|
if ButtonKommNeuWertHwnd <> 0 then
SendMEssage(ButtonKommNeuWertHwnd,BM_CLICK,0,0); |
Re: Handle eines bestimmten Panels
:?: häh, check nix mehr :!:
Da ja das click nicht ausgeführt wird hab ich ma rumprobiert. Dass die panelhandle nicht gefunden wurde lieftg gar nicht daran dass es als private deklariert ist. Nun geht's nämlich auch dann :wall: Wieso spinnt das herum?! Und warum wird das click nicht ausgeführt :x |
Re: Handle eines bestimmten Panels
ok, jetzt weiß ich wenigstens warum das click nicht ging:
Der Button war nicht sichtbar, dann führt er den klick auch nicht aus. Das is schlecht, wer hat einen Vorschlag wie ich nun eine procedure starten kann ohne dass ich ein sichtbaren button o.ä. klicke. Muß nämlich warten bis anderes Programm bestimmte Aktionen ausgeführt hat. Wenn das soweit ist dann soll das andere Prog eine procedure durchlaufen. Kann ich mit handles direkt auf eine procedure zugreifen? Sind ja beides meine selbstgeschriebenen Programme, von daher wäre es nicht das Prob. help :pale: |
Re: Handle eines bestimmten Panels
Ach so, das sind auch noch beides deine Programme? :shock: Dann lass das eine Programm auf eine selbst definierte Message von dem anderen warten und wenn die gekommen ist, führst du die Prozedur aus.
|
Re: Handle eines bestimmten Panels
ähm... könntest erläutern wie das aussehen muß :oops:
|
Re: Handle eines bestimmten Panels
So:
Empfänger
Delphi-Quellcode:
Sender:
const
MY_MESSAGE = WM_USER+1974; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } procedure ReceiveMyMsg(var msg: TMessage); message MY_MESSAGE; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ReceiveMyMsg(var msg: TMessage); begin ShowMessage('Angekommen.'); end;
Delphi-Quellcode:
const
MY_MESSAGE = WM_USER+1974; procedure TForm1.Button1Click(Sender: TObject); var hWnd: THandle; begin hWnd := FindWindow(nil, 'Form1'); if hWnd <> 0 then SendMessage(hWnd, MY_MESSAGE, 0, 0) else RaiseLastOSError(); end; Hier:
Delphi-Quellcode:
sagst du ihm auf welche Nachricht er warten / reagieren soll.
procedure ReceiveMyMsg(var msg: TMessage); message MY_MESSAGE;
Hier:
Delphi-Quellcode:
die dazugehörige Prozedur.
procedure TForm1.ReceiveMyMsg(var msg: TMessage);
begin ShowMessage('Angekommen.'); end; Und hier:
Delphi-Quellcode:
Schickst du die Nachricht an dein Fenster. Über die Parameter kannst du sogar noch Infos mitgeben.
procedure TForm1.Button1Click(Sender: TObject);
var hWnd: THandle; begin hWnd := FindWindow(nil, 'Form1'); if hWnd <> 0 then SendMessage(hWnd, MY_MESSAGE, 0, 0) else RaiseLastOSError(); end; |
Re: Handle eines bestimmten Panels
super, tausend dank :thuimb:
jetzt kann's gleich losgehen: :coder: Ach ja, eine Frage noch: Welche Funktion hat das
Delphi-Quellcode:
else
RaiseLastOSError(); |
Re: Handle eines bestimmten Panels
Steht in der Hilfe. Gibt das Ergebnis von GetLastError im Klartext aus, damit di siehst, was schiefgegangen ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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