![]() |
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);
|
Re: Handle einer Komponente zuweisen
Nein, da wirst du um die WinAPI nicht drumrumkommen... :cry:
|
Re: Handle einer Komponente zuweisen
Ist ja kein Problem aber WIE ???
|
Re: Handle einer Komponente zuweisen
Hi,
Delphi-Quellcode:
Das Panel aus dem Handle kannst du erhalten.
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; 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 |
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??? |
Re: Handle einer Komponente zuweisen
Da hast du etwas verpasst. Die Funktion
Delphi-Quellcode:
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.
function FindControl( Handle:THandle ):TControl;
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. |
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 ?? |
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 |
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 |
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 20:17 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