![]() |
Delphi-Version: 5
Mehrere Objekte zur Laufzeit erzeugen
Hi,
ich stehe gerade vor folgendem Problem. Ich möchte mehrere Komponenten, um genau zu sein 2 Tedits, 1 TLable und 1 Tspeedbutton jeweils dynamisch zur Laufzeit erzeugen. Dazu habe ich jeweils ein Dynamisches Array erzeugt und lass mit die Teile per Parent auf ein Panel Mappen. Irgendwie schein mein Delphi aber ein Problem damit zu haben wenn ich mehr als 3 Komponenten zur Laufzeit einbinden möchte. 2 gehen Problemlos, sobald ich die 3. Hinzunehmen spinnt mein Delphi und hängt sich auf. Kennt ihr das verhalten? Anbei mal die 3 Prozeduren.
Delphi-Quellcode:
Danke im Voraus für die Hilfe :thumb:
private
TabellenCombo : array of TComboBox; FeldCombo : array of TComboBox; dynDelBtn : Array of TSpeedbutton; procedure TForm1.CreateNewDynDelButton; begin inherited; SetLength(dynDelBtn, length(dynDelBtn)+1); dynDelBtn[length(dynDelBtn)] := TSpeedbutton.Create(self); dynDelBtn[length(dynDelBtn)].Parent := self.DokExpPanel; dynDelBtn[length(dynDelBtn)].Name := 'DynBtn'+inttostr(length(dynDelBtn)); dynDelBtn[length(dynDelBtn)].Visible := True; dynDelBtn[length(dynDelBtn)].Left := 5; dynDelBtn[length(dynDelBtn)].Top := (dynDelBtn[length(dynDelBtn)].Height + 10) * length(dynDelBtn); dynDelBtn[length(dynDelBtn)].Width := 20; dynDelBtn[length(dynDelBtn)].Height := 15; dynDelBtn[length(dynDelBtn)].Glyph := nil; ImageList1.GetBitmap(0, dynDelBtn[length(dynDelBtn)].Glyph); dynDelBtn[length(dynDelBtn)].OnClick:=DeleteMeBtn; end; procedure TForm1.CreateNewTableCombo; begin SetLength(TabellenCombo, length(TabellenCombo)+1); TabellenCombo[length(TabellenCombo)]:=TComboBox.Create(self); TabellenCombo[length(TabellenCombo)].Parent := self.DokExpPanel; TabellenCombo[length(TabellenCombo)].Name := 'Tabellen'+inttostr(length(TabellenCombo)); TabellenCombo[length(TabellenCombo)].Left := 30; TabellenCombo[length(TabellenCombo)].Top := (TabellenCombo[length(TabellenCombo)].Height + 10) * length(TabellenCombo); end; procedure TForm1.CreateNewFieldCombo; begin SetLength(FeldCombo, length(FeldCombo)+1); FeldCombo[length(FeldCombo)]:=TComboBox.Create(self); FeldCombo[length(FeldCombo)].Parent := Self.DokExpPanel; FeldCombo[length(FeldCombo)].Name := 'Felder'+inttostr(length(FeldCombo)); FeldCombo[length(FeldCombo)].Left := 200; FeldCombo[length(FeldCombo)].Top := (FeldCombo[length(FeldCombo)].Height + 10) * length(FeldCombo); end; |
AW: Mehrere Objekte zur Laufzeit erzeugen
Auf den ersten Blick würde ich sage das das hier falsch ist
SetLength(dynDelBtn, length(dynDelBtn)+1); dynDelBtn[length(dynDelBtn-1)] muss das heißen da das Array bei 0 anfängt |
AW: Mehrere Objekte zur Laufzeit erzeugen
Eieie ich glaub ich brauch ein Kaffee, Danke jetzt läufts :oops::thumb:
|
AW: Mehrere Objekte zur Laufzeit erzeugen
Weiterhin sollte wohl in den meisten Fällen der Owner der Buttons das Panel sein:
Delphi-Quellcode:
dynDelBtn[length(dynDelBtn)-1] := TSpeedbutton.Create(self.DokExpPanel);
Ansonsten könnte es interessant werden, wenn das Panel vor dem Button zerstört wird. Vllt ist das aber auch extra von dir gewollt. Grüße Karsten |
AW: Mehrere Objekte zur Laufzeit erzeugen
Nebenbei:
Statt immer auf dynDelBtn[length(dynDelBtn)] zuzugreifen, sprich jedesmal einen Arrayzugriff zu machen, würde ich eine lokale Variable dafür nehmen. Das ist nicht nur sauberer, sondern auch schneller. Es reicht ja den Inhalt der lokalen Variablen dann in das Array zu schreiben. |
AW: Mehrere Objekte zur Laufzeit erzeugen
Und warum ein dynamisches Array? Du weißt doch genau, wie viele Elemente du brauchst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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