![]() |
Re: FindComponent findet Label nicht
Ich habe folgenden Test gemacht. Habe zwei Panels welche übereinander liegen. Label1 liegt auf dem Obersten Panel (Panel2). Jetzt erzeuge ich auf Panel2 nochmals ein label mit dem selben namen. Die Funktion FindComponent findet Label1 nicht.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var lLabel : TLabel; lComponent : TComponent; begin lComponent := Panel2.FindComponent('Label1'); if(lComponent = nil) then Begin lLabel := TLabel.Create(Panel2); lLabel.Parent := Panel2; lLabel.Visible := True; lLabel.Name := 'Label1'; End; end; end. |
Re: FindComponent findet Label nicht
Schau mal, wer der Owner des Label1 ist. Ich vermute die Form.
|
Re: FindComponent findet Label nicht
Hallo,
Wenn man der create funktion die Form übergibt und den parent auf Panel2 setzt scheint es zu funktionieren! Ich finde es aber nicht so schön, dass der Ower bei der Create funktion nicht auch das parentPanel sein kann. lLabel := TLabel.Create(Form1); lLabel.Parent := Panel2; |
Re: FindComponent findet Label nicht
Du mußt also alle Labels dynamisch erzeugen oder .FindComponent auf die Form anwenden.
|
Re: FindComponent findet Label nicht
Hi,
alternativ könntest Du mit
Delphi-Quellcode:
über die Controls des Panels oder Groupbox etc. laufen und
for i := 0 to Panel.ControlCount-1 do
if TContol(Panel.Controls[i]).Name = xName then begin lFound := true; break; end; Deine Componente bzw. Control finden. (Das könnte man natürlich auch in eine Funktion FindControl kapseln) Grüße Frank |
AW: FindComponent findet Label nicht
Moin Leute, :hi:
ich musste mich gerade mit dem Thema auseinandersetzen. Also: Der Owner ist die Form. Ganz wichtig. Jedes Control muss beim Create die Form übergeben bekommen. Die Form "besitzt" alle Controls, ist halt wie der König und sein Folk. Bei dem neu erzeugten Control muss Parent auf seinen Vorfahr gesetzt werden, damit da die Verbindung für die Gui da ist. FindComponent: NUR in der Form aufrufen. Die Funktion durchläuft die Components, die nur in der Form gesetzt sind. FindControl: Die Funktion läuft über die Contols, die Nachfahren. Will man über FindControls eine Komponente finden, muss man von der Form aus rekursiv alle Controls durchlaufen. Das kann man sich sparen, indem man gleich von der Form aus FindComponent aufruft. Man kann Controls umhängen und verschieben, wie man will. In Components bleiben sie erhalten. Wird ein Control freigegeben, verschwindet der Eintrag auch aus dem Components. |
AW: FindComponent findet Label nicht
Einmal genügt doch, dafür muss man doch keine Thread-Leichen aus dem Keller zerren.
|
AW: FindComponent findet Label nicht
Die Seelen der Leichen irrten noch umher weil das Thema noch nicht beendet war. :angel:
Spaß beiseite. Wenn jemand auf der Suche ist, ärgert er sich wieder weil es heißt, jetzt funktioniert es, ich weiß aber nicht warum. Sind wir hier nicht auf der Suche einer Lösung und nicht einer Halben? |
AW: FindComponent findet Label nicht
Trotzdem muss man doch nicht uralte Threads raussuchen, bei denen die Lösung passt, sonst würde das Forum ganz schnell aus allen Nähten platzen. Da sucht man sich exemplarisch einen raus (z.B. den aktuellsten) und postet dort.
|
AW: FindComponent findet Label nicht
Noch besser wäre es einen neuen Thread zu eröffnen und die alten Threads darin zu verlinken.
Und dann auch noch irreführende Aussagen: Zitat:
(Darum ja auch der Unterschied Owner und Parent) Dann ist es auch ganz doof so eine Instanz einfach so wieder freizugeben. Faustregel: Also wenn ein Owner mit angegeben wird, dann soll sich der auch um die Freigabe kümmern. Will ich mich selber darum kümmern, dann keinen Owner mitgeben! Ansonsten wird es kompliziert oder es knallt halt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 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