Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Handle eines bestimmten Panels (https://www.delphipraxis.net/14769-handle-eines-bestimmten-panels.html)

Praktikant 15. Jan 2004 11:08


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:
 
   hPanel:=0;
   while hPanel = 0 do
      hPanel := FindWindowEx(FHauptmenuHwnd,PanelHauptfensterHwnd,NIL,NIL);
   PanelHauptfensterHwnd := hPanel;
   showmessage('Panelhandle gefunden');
Aber auch mit
Delphi-Quellcode:
hPanel := FindWindow('PanelHauptfenster',Nil);
klappt's nicht.

Wo ist mein Denkfehler?
FHauptmenuHwnd ist das Handle des Hauptformulares auf dem das Panel liegt.

p0ke 15. Jan 2004 11:18

Re: Handle eines bestimmten Panels
 
Würde dir das nicht reichen:

Delphi-Quellcode:
Button1.handle;
:?:

Praktikant 15. Jan 2004 11:23

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);
:|

Praktikant 15. Jan 2004 12:36

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

Praktikant 15. Jan 2004 12:55

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:

Luckie 15. Jan 2004 13:21

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.

Praktikant 15. Jan 2004 13:30

Re: Handle eines bestimmten Panels
 
ähm... könntest erläutern wie das aussehen muß :oops:

Luckie 15. Jan 2004 13:51

Re: Handle eines bestimmten Panels
 
So:
Empfänger
Delphi-Quellcode:
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;
Sender:
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:
procedure ReceiveMyMsg(var msg: TMessage); message MY_MESSAGE;
sagst du ihm auf welche Nachricht er warten / reagieren soll.

Hier:
Delphi-Quellcode:
procedure TForm1.ReceiveMyMsg(var msg: TMessage);
begin
  ShowMessage('Angekommen.');
end;
die dazugehörige Prozedur.

Und hier:
Delphi-Quellcode:
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;
Schickst du die Nachricht an dein Fenster. Über die Parameter kannst du sogar noch Infos mitgeben.

Praktikant 15. Jan 2004 14:00

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();

Luckie 15. Jan 2004 14:02

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 21:03 Uhr.
Seite 1 von 2  1 2      

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