![]() |
Komponente zur laufzeit erzeugen Komp-liste anzeigen lassen
Moin Leute,
habe wiedermal ein Problem vor mir liegen wo ich nicht weiter komme! Hoffe sehr das Ihr mir bei der Lösung dieses Problems helft! Ich erzeuge zur Laufzeit von einen Formular auf einem anderen Komponenten. klappt soweit alles ganz gut, bis auf die tatsache, dass die erzeugten komponenten nicht in der Komponentenliste des 2.Formulars stehen. geb euch mal kurzen quellauszug 1. Formular
Delphi-Quellcode:
2.Formular
procedure TForm1.button1Click(Sender: TObject);
var LEdit: TLabeledEdit; g_box: TGroupBox; radio: TRadioGroup; datum: TDateTimePicker; name: TLabel; button: TButton; i: integer; begin for i:=1 to 3 do begin Form6.Width := i*270+(i*10)+20; Form6.Height := 580; Form6.Position := poScreenCenter; g_box := TGroupBox.Create(Self); with g_box do begin Name := 'g_box_' + IntToStr(i); Caption := 'test ' + IntToStr(i); Parent := Form6; Height := 190; Width := 270; Left := (i-1)*280+10; Top := 10; ComponentIndex := 3+i; end; radio := TRadioGroup.Create(Self); with radio do begin Parent := g_box; Columns := 2; Items.Add('ware1'); Items.Add('ware2'); Height := 33; Width := 249; Left := 10; Top := 15; end; LEdit := TLabeledEdit.Create(Self); with LEdit do begin Name := 'W_Nr_' + IntToStr(i); EditLabel.Caption := 'Warennummer'; Text := ''; Parent := g_box; Width := 121; Top := 68; Left := 10; end; LEdit := TLabeledEdit.Create(Self); with LEdit do begin Name := 'Wert_' + IntToStr(i); EditLabel.Caption := 'Wert'; Text := ''; Parent := g_box; Width := 249; Top := 112; Left := 10; end; LEdit := TLabeledEdit.Create(Self); with LEdit do begin Name := 'Anzahl_' + IntToStr(i); EditLabel.Caption := 'Anzahl'; Text := ''; Parent := g_box; Width := 121; Top := 156; Left := 10; end; datum := TDateTimePicker.Create(Self); with datum do begin Name := 'datum_' + IntToStr(i); Parent := g_box; Width := 121; Top := 68; Left := 138; end; name := TLabel.Create(Self); with name do begin Name := 'label_' + IntToStr(i); Caption := 'Datum'; Parent := g_box; Width := 121; Top := 52; Left := 138; end; button := TButton.Create(Self); with button do begin Name := 'lbutton_' + IntToStr(i); Caption := 'Laden'; Parent := g_box; Width := 121; Top := 156; Left := 138; end; end; button := TButton.Create(Self); with button do begin Name := 'sbutton'; Caption := 'Speichern'; Parent := Form6; Width := 81; Top := 210; Left := Form6.Width-273; end; button := TButton.Create(Self); with button do begin Name := 'dbutton'; Caption := 'Drucken'; Parent := Form6; Width := 81; Top := 210; Left := Form6.Width-187; end; button := TButton.Create(Self); with button do begin Name := 'bbutton'; Caption := 'Schließen'; Parent := Form6; Width := 81; Top := 210; Left := Form6.Width-101; end; Form6.ShowModal(); end;
Delphi-Quellcode:
Bekomme aber in dem Memo nur die Komponenten "MEMO" und "BUTTON" angezeigt, welche aber schon zur entwicklung erzeugt wurden!
procedure TForm6.Button1Click(Sender: TObject);
var i: Integer; begin Memo1.Lines.Clear; for i:= 0 to ComponentCount-1 do begin Memo1.Lines.Add(Components[i].name); end; end; Bitte um Eure Hilfe Mit freundlichen Grüßen mentos112 |
Re: Komponente zur laufzeit erzeugen Komp-liste anzeigen las
Du musst beim Konstruktor-Aufruf das andere Formular als Owner angeben. Beim Owner tragen sich die Komponenten in der Liste ein.
|
Re: Komponente zur laufzeit erzeugen Komp-liste anzeigen las
Delphi-Quellcode:
du meinst doch hier oder?
g_box := TGroupBox.Create(Owner);
with g_box do begin Name := 'g_box_' + IntToStr(i); Caption := 'Einsatz ' + IntToStr(i); Parent := Form6; Height := 190; Width := 270; Left := (i-1)*280+10; Top := 10; ComponentIndex := 3+i; end; Das geht trotzdem nicht muss ich das noch irgendwie dem anderen form zu wissen geben? |
Re: Komponente zur laufzeit erzeugen Komp-liste anzeigen las
Du kannst nicht mehrere Buttons in eine Variable schreiben.
Delphi-Quellcode:
Einfach für jeden Button eine Variable deklarieren.
button := TButton.Create(Self);
with button do begin Name := 'dbutton'; Caption := 'Drucken'; Parent := Form6; Width := 81; Top := 210; Left := Form6.Width-187; end; button := TButton.Create(Self); with button do begin Name := 'bbutton'; Caption := 'Schließen'; Parent := Form6; Width := 81; Top := 210; Left := Form6.Width-101; end; ... EDIT: oder gleich so:
Delphi-Quellcode:
EDIT2: Apollonius meinte das so:
with TButton.Create(Self) do
begin Name := 'Button1'; end;
Delphi-Quellcode:
g_box := TGroupBox.Create(NameDeinerAnderenForm);
|
Re: Komponente zur laufzeit erzeugen Komp-liste anzeigen las
Der Owner (also das neue Form6, was Du ja auch als Parent angibst) muss im Konstruktor übergeben werden.
Also so:
Delphi-Quellcode:
g_box := TGroupBox.Create(Form6);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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