Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Handle einer Komponente zuweisen (https://www.delphipraxis.net/58098-handle-einer-komponente-zuweisen.html)

Baeuerle 1. Dez 2005 11:22


Handle einer Komponente zuweisen
 
Hallo,

ist es möglich, wenn ich ein Handle habe, und weiss was für eine Komponente dies ist, daraus eine neue Komponente zu machen.

So ungefähr:
Delphi-Quellcode:
MyKomp:=TPanel(Handle);

tigerman33 1. Dez 2005 11:41

Re: Handle einer Komponente zuweisen
 
Nein, da wirst du um die WinAPI nicht drumrumkommen... :cry:

Baeuerle 1. Dez 2005 11:46

Re: Handle einer Komponente zuweisen
 
Ist ja kein Problem aber WIE ???

dataspider 1. Dez 2005 12:16

Re: Handle einer Komponente zuweisen
 
Hi,
Delphi-Quellcode:
function GetPanel(Handle: Hwnd): TPanel;
Var
  AControl: TWinControl;
begin
  Result := nil;
  AControl := FindControl(Handle);
  if Assigned(AControl) and (AControl is TPanel) then
    Result := TPanel(AControl);
end;
Das Panel aus dem Handle kannst du erhalten.
Nur, eine neue Komponente kannst du daraus nicht erzeugen. Das musst du schon im Code erledigen. Inwieweit die Methode Assign Einstellungen übernimmt, musst du testen.
Cu, Frank

Baeuerle 1. Dez 2005 12:47

Re: Handle einer Komponente zuweisen
 
Danke,

funktioniert gut.

ABER wenn das Handle aus einer anderen Anwendung kommt ist AControl immer NIL !!!

Hast du auch hierfür eine Lösung parat???

sniper_w 1. Dez 2005 12:51

Re: Handle einer Komponente zuweisen
 
Da hast du etwas verpasst. Die Funktion
Delphi-Quellcode:
function FindControl( Handle:THandle ):TControl;
kann nur DELPHI TCONTROL-s innerhalb einer Delphi Anwendung eventuel finden. (fall es sie gibt). Eine fremde Anwendung muss nicht unbedingt mit Delphi geschieben sein und dann heisst es, es gibt keine TControl-s in deiser Anwendung.

EDIT:
Und wenn es eine Delphi-Anwendung gäbe, würde das auch nicht funktionieren. Das geht nur innerhalb der Anwendung, wo der Procedur "FindControl" aufgerufen wurde.

Baeuerle 1. Dez 2005 12:57

Re: Handle einer Komponente zuweisen
 
Hmm,

wie soll ich den folgendes Problem sonst lösen.

Ich möchte meine Anwendung über einen Teil einer externen nicht selbst entwickelten Anwendung legen.

Meine Idee war:

1. Handle der Anwendung ermitteln
2. Handle der Komponente ermitteln
3. Prüfen des Komponentennamens <- weiß aber nicht wie ich diesen bekomme NICHT den TEXT, CAPTION ... -> WM_GETTEXT
4. GetWindowRect(HANDLE,r);
5. SetWindowPos(form.handle,....)

Habt Ihr andere Vorschläge ??

marabu 1. Dez 2005 13:13

Re: Handle einer Komponente zuweisen
 
Hallo Baeuerle,

bist du sicher, dass du den Komponentennamen suchst? Das ist eine exklusive Eigenschaft der VCL Komponenten. Mir scheint du benötigst eher den Namen der Fensterklasse für das gegebene Handle.

Grüße vom marabu

Baeuerle 1. Dez 2005 13:18

Re: Handle einer Komponente zuweisen
 
Meinst du damit ich das Ergebnis "TPanel" oder "TLabel" bekomme?

Ist leider nicht eindeutig, wenn mehrere Panels eingebaut sind, weis ich nicht genau welches Panel ich überlagern soll. Ich muss die Komponente absolut eindeutig indentifizieren

marabu 1. Dez 2005 13:24

Re: Handle einer Komponente zuweisen
 
Da du die fremde Anwendung nicht programmiert hast, werden dort keine clues für dich zu finden sein. Ich würde es über die Geometrie (Rect) der fremden Anwendung versuchen. Vielleicht ist die Kette der Parents eindeutig oder die Schachtelung oder die siblings. Oder eines der child windows kann über WM_GETTEXT identifiziert werden.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.

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