![]() |
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.
|
Re: Handle eines bestimmten Panels
tja, die Hilfe ist so ein Kapitel für sich...
in meiner OH steht nur RaiseLastWin32Error was wohl aber dasselbe sein dürfte. |
Re: Handle eines bestimmten Panels
Kann sein dass es das noch nicht bei D5 gibt. RaiseLastWin32Error ist plattformspezifisch. RaiseLastOSError geht auch unter Linux mit Kylix.
|
Re: Handle eines bestimmten Panels
Also, es funktioniert einwandfrei wie es soll!
Aber ich kann jetzt mit dieser einen Funktion nicht verschiedene Messages abfragen, da my_message ja fest steht - habe ich das richtig verstanden! Das ist jetzt aber nicht mein Prob, nur theoretisch. Aber: wie kommt es, dass er in der procedure
Delphi-Quellcode:
kein 'buttonclick(sender);' akzeptiert?
procedure TForm1.ReceiveMyMsg(var msg: TMessage);
begin ShowMessage('Angekommen.'); end; [edit=Luckie]Such-Tags durch Delphi-Tags ersetzt. Mfg, Luckie[/edit] |
Re: Handle eines bestimmten Panels
Und wie lautet die Fehlermeldung? :roll:
Willst du mehrer Nachrcihten abfgangen, musst du die WndProc überschreiben. |
Re: Handle eines bestimmten Panels
beim compilen kommt 'UIndef. Bezeichner: 'Sender'
ich schätze mal irgendwo muß ich noch die procedure bekannt machen oder so, aber beim testen kamen dann gelich andere noch 'komischere' Meldungen. :oops: |
Re: Handle eines bestimmten Panels
Siehst du hier irgendwo einen Paramter der Sender heißt:
Delphi-Quellcode:
lager das, was in der Buton-Klick-Routine steht in eine Prozedur / Funktion aus und rufe diese jeweils beim Button-Click und beim Abfangen der Nachricht auf.
procedure TForm1.ReceiveMyMsg(var msg: TMessage);
|
Re: Handle eines bestimmten Panels
alles klar!
Wußte nicht dass es nicht geht, wenn der onclick aus einer procedure heraus aufgerufen werden soll die kein sender im 'titel' hat. Tja, so lernt man ständig dazu. Hab ja erst vergangenen September mit Delphi angefangen und zuvor nur ein wenig c und assembler gehabt. edit: Luckie, nochmals vielen Dank :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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