![]() |
Delphi-Version: 5
Label zur Laufzeit - Parent
Hallo,
ich erstelle zur Laufzeit eine GroupBox in der soll ein label Doch wie sag ich dem Label das es in die zur Laufzeit generierten GroupBox soll? |
AW: Label zur Laufzeit - Parent
In dem du diese als Parent setzt
|
AW: Label zur Laufzeit - Parent
Ähm, sagt deine Überschrift das nicht schon?!
Delphi-Quellcode:
MeinLabel.Parent := MeineGroupBox;
|
AW: Label zur Laufzeit - Parent
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var AGrpBx: TGroupBox; ALbl: TLabel; begin AGrpBx := TGroupBox.Create(Self); with AGrpBx do begin Name := 'AGrpBx1'; Parent := Self; Left := 20; Top := 20; Width := 200; Height := 100; Caption := 'GrpBx1'; TabOrder := 0; end; ALbl := TLabel.Create(Self); with ALbl do begin Name := 'ALbl1'; Parent := AGrpBx; Left := 10; Top := 20; Width := 15; Height := 10; Caption := 'label1'; end; end; |
AW: Label zur Laufzeit - Parent
Ha ja das weiss ich auch aber - wie gebe ich den Namen der GroupBox an die Label? kenne den namen ja nicht da ich mehrer GroupBox erstelle!
|
AW: Label zur Laufzeit - Parent
Entweder du hast noch die Variable zur Groupbox oder du solltest der GroupBox einen Namen geben, dass du sie mit
![]() Bernhard |
AW: Label zur Laufzeit - Parent
Danke - ABER
Delphi-Quellcode:
Wäre das dann doch die Label Wird nicht angezeigt (sehe ich nicht)
Parent := (FindComponent('gb_' + IntToStr(tab.FieldAsInteger(tab.FieldIndex['pid']))) as TGroupBox);
Delphi-Quellcode:
Caption := 'Nachname:';
Top := 25; Left := 25; Parent := (FindComponent('gb_' + IntToStr(tab.FieldAsInteger(tab.FieldIndex['pid']))) as TGroupBox); AutoSize := True; Height := 13; |
AW: Label zur Laufzeit - Parent
dann prüfe mal nach, ob du nicht zufällig das Parent auf nil setzt, heißt, dass FindComponent die gesuchte Komponente auch findet.
Bernhard ADD: Warum setzt du AutoSize auf True, wenn du danach eh die Höhe änderst? |
AW: Label zur Laufzeit - Parent
Wie/wo hast du denn die GroupBox erstellt?
FindComponent steht hier für Self.FindComponent und es wird demnach nur das gefunden, wovon Self der Owner ist. |
AW: Label zur Laufzeit - Parent
Klar, woher soll FindComponent denn auch wissen, von welchem Objekt es die Unterobjekte durchsuchen soll. (Wenn man ihm es nicht sagen kann.)
|
AW: Label zur Laufzeit - Parent
scheint nicht so!
Delphi-Quellcode:
Gibt ne Zugriffsverletzung..
ShowMessage((FindComponent('gb_' + IntToStr(tab.FieldAsInteger(tab.FieldIndex['pid']))) as TGroupBox).Name);
Warum findet FindComponent die Box nicht? Die ist ja da ich sehe sie :) Liegt das daran das die Box zur Laufzeit in eine zur Laufzeit erstellte Page (TpageControl) erstellt wird? |
AW: Label zur Laufzeit - Parent
es geht ja nicht ums sehen. Dann prüfe nochmal, wie du auf den Namen kommst.
Eine AV scheint mir hier aber sehr komisch. Steht nicht zufällig dabei, dass das Objekt nicht nach TGroupBox gecastet werden kann? Ansonsten hast du ne Komponente erwischt, die die Eigenschaft Name nicht hat. Bernhard |
AW: Label zur Laufzeit - Parent
Wie ist es, wenn Du DeinTabSheet.FindComponent verwendest?
|
AW: Label zur Laufzeit - Parent
Wenn FindComponent nichts findet, dann gibt es NIL zurück.
Delphi-Quellcode:
.
Parent := (FindComponent('gb_' + IntToStr(tab.FieldAsInteger(tab.FieldIndex['pid']))) as TGroupBox);
Hier gab es deswegen noch kein Problem, außer daß .Parent auf NIL gesetzt wurde.
Delphi-Quellcode:
.
ShowMessage((FindComponent('gb_' + IntToStr(tab.FieldAsInteger(tab.FieldIndex['pid']))) as TGroupBox).Name);
Wärend man hier auf .Name des "nicht" gefunden Objekts zugreifen wollte, was natürlich knallt. Ergo: FindComponent findet nichts. - Stimmt der Name? - Wird im richtigen Owner gesucht? Das was man beim Erstellen der GroupBox als Owner angegeben hat, darin muß man auch mit FindComponent suchen, um Diese wiederzufinden. |
AW: Label zur Laufzeit - Parent
Zitat:
Wieso sollte man es diesem nicht mitgeben können? ![]() Es steckt in TComponent damit auch in TForm. Wenn man dieses nun aus einer Methode seiner Form aufruft, dann sucht es natürlich in TForm und findet somit alles, von welchem die Form der Owner ist. Da die VCL die DFMs so läd, daß die Form von allen enthaltenen Komponenten der Owner ist, wird normalerweise auch alles gefunden, welches über die DFM automatisch erstellt wurde, was aber nicht automatisch auf alles zutrifft, welches man manuell erstellt. :stupid: Heißt also, wenn man das FindComponent einer anderen Komponente aufruft, dann findet man das in dieser Komponente verwaltete Zeug. |
AW: Label zur Laufzeit - Parent
Wenn man diese Kompos aber selber erzeugt, sollte man auch die Referenzen direkt ansprechen können
|
AW: Label zur Laufzeit - Parent
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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