Komponenten zur Laufzeit erzeugen -> bringt Fehler
Hallo,
ich will auf meinem Formular eine erst zur Laufzeit vorgegebene anzahl von Panel und Listboxen erzeugen Die panel funktionieren auch und die Listboxen auch aber wenn ich díe Listboxes Zeilen oder Text hinzufügen kommt beim ausführen der Fehler: Im Projekt Dart.exe ist eine Exception der Klasse EInvalit Operation aufgetreten. Meldung: Element hat kein übergeordnetes Fenster. Prozess wurde angehalten. Fortsetzen mit Einzelne Anweisung oder Start. Wo liegt mein Fehler die Felder name und Punkte von i haben einen inhalt das habe ich schon überprüft.
Delphi-Quellcode:
könnt ihr mir sagen wo mein fehler liegt oder wie ich die Komponenten anders erzeugen kann so das es funktioniert :wiejetzt:
procedure TTpunkt.FormShow(Sender: TObject);
var i :integer; AName : array of TPanel; APunkte : array of Tmemo; begin setlength(Aname,unit1.anz); For i :=0 to High(Aname) do begin AName[i] := TPanel.Create(self); with AName[i] do begin Caption :=aspieler[i].name; Height := 17; Top := 80; Width := 85; Left := 15 + (i * 90); parent := self; end; end; setlength(APunkte,unit1.anz); For i :=0 to High(APunkte) do begin APunkte[i] := TListbox.Create(self); with APunkte[i] do begin Items.add (inttostr(aspieler[i].punkte[0])); Height := 320; Top := 105; Width := 85; Left := 15 + (i * 90); parent := self; end; end; end; |
Re: Komponenten zur Laufzeit erzeugen -> bringt Fehler
Hallo,
in der arraydefinition soll das Array of Tlistbox heißen , das hab ich beim reinschreiben ins forum übersehen. Also bitte helft mir das Programm soll ein geschenk werden und istlangsam wirklich dringend |
Re: Komponenten zur Laufzeit erzeugen -> bringt Fehler
Du hast APunkte als Array von TMemo deklarierst, erzeugst aber TliszBoxes, die du in diesen Array ablegst?
[edit: Okay hast dich verschrieben] |
Re: Komponenten zur Laufzeit erzeugen -> bringt Fehler
Wenn du Self als Parent angibt ... dann weiß ich leider nicht was passiert... :stupid:
Setze Parent lieber auf TTpunkt, damit sich das Ding dann auch auf der Form befindet. Flare |
Re: Komponenten zur Laufzeit erzeugen -> bringt Fehler
Herzlich willkommen in der Delphi-PRAXiS, schuetzejanett.
Bevor du die ListBox befüllen kannst, muss du die Eigenschaft Parent gesetzt haben. Freundliche Grüße vom marabu |
Re: Komponenten zur Laufzeit erzeugen -> bringt Fehler
Ich würde das Gabze nicht im Show-Event abhandeln, da dieser u.U. öfters ausgelöst wird und dann jedesmal neue Komponeneten erzeugt werden.
|
Re: Komponenten zur Laufzeit erzeugen -> bringt Fehler
@Flare
TTpunkt ist eine Klasse und kann nicht als Parent dienen :wink: Du meinst sicher das Formular. Genau das benutzt er aber als Parent, da sich der Code in einer Methode des Formulars befindet. @schuetzejanett Du legst die Referenzen auf die neuen Controls in den lokalen Variablen AName und APunkte ab. Wann und wie greifst Du später auf die Controls zu? Außerhalb der Methode FormShow hast Du doch keine direkten Referenzen mehr. :gruebel: Noch ein Tip(p): Du könntest die Methode SetBounds einsetzen, um Position und Höhe eines Controls zu setzen:
Delphi-Quellcode:
Gruß Hawkeye
with AName[i] do
begin Caption :=aspieler[i].name; SetBounds (15 + (i * 90), 80, 85, 17); parent := self; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz