Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Dynamisch eigene Form erstellen
Delete - Do 23.09.04 20:11
Titel: Dynamisch eigene Form erstellen
Hallo,
bin dabei einen Chat zu programmieren und brauche ne kleine Hilfestellung. Das Problem liegt beim dynamischen Erstellen selbst deklarierter Forms. Ihr müsst euch das wie bei ICQ vorstellen, wo für jede Session ein eigenes Chat-Window angelegt wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TChatForm = class(TForm) Memo1, Memo2: TMemo; btnSend, btnClose: TButton; ... constructor Create; destructor Destroy; end; |
Nun möchte ich bei TChatForm1.create; auch gleich alle Memos, Buttons etc. erzeugen und sie auf der Form anordnen. Nur das bekomme ich irgendwie nicht hin. Bisher sieht mein Constructor so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| constructor TChatForm.Create; begin inherited create(nil); Memo1 := TMemo.Create; Memo1.Left := 10 ... Show; end; |
Ich weiß, dass das ziemlicher Murks ist, aber ich bekomme es einfach nicht hin, durch ein simples ChatForm1 := TChatForm.create; mein gewünschtes Chat-Window auf den Screen zu kriegen.
jasocul - Fr 24.09.04 08:05
Normalerweise benötigt man den Constructor und Destructor nicht selbst zu programmieren.
Lass das mal weg und schreibe einfach
Quelltext
1:
| TChatForm.Create(nil); |
UGrohne - Fr 24.09.04 08:29
Habe ich das richtig verstanden, Du hast die Typendeklaration da oben selbst geschrieben?
Wenn ja, dann musst Du den Komponenten nicht nur Position und Eigenschaften im Create zuweisen, sondern auch den Parent (das sollte das Form selbst sein), damit die Komponente richtig angezeigt wird.
Hast Du es mit dem Designer gemacht, dann brauchst Du den Konstruktor nicht selbst schreiben, wenn alle Kompos ordentlich angeordnet sind (wie schon gesagt wurde).
Lossy eX - Fr 24.09.04 19:12
Als sinnvollstes empfehle ich dir:
1. mit Delphi ein Formular zu erstellen.
2. Die automatischen Erzeugung zu entfernen. (Projektoptionen oder aus dem dpr)
3. Dessen Variable aus seiner Unit zu entfernen.
Das bei bedarf mittels "Instanze := TMyLittleFunnyForm.Create(nil);" zu erstellen. Beim Schließen des Forms das Freigeben bitte nicht vergessen.
Delete - Fr 24.09.04 19:14
UGrohne hat folgendes geschrieben: |
Habe ich das richtig verstanden, Du hast die Typendeklaration da oben selbst geschrieben? |
Ja, die wurde von mir selbst abgetippt.
Ich möchte das Problem jetzt noch mal der Reihe nach schildern:
1. Ich deklariert manuell TChatForm z. B. so:
Delphi-Quelltext
1: 2: 3: 4:
| type TChatForm = class(TForm) Memo1: Tmemo; end; |
2. Ich deklarier ne die Instanz ChatForm1 global:
Delphi-Quelltext
1: 2:
| var ChatForm1: TChatForm; |
3. Ich rufe den Constructor auf und versuche so ChatForm1 zu erstellen:
Delphi-Quelltext
1:
| ChatForm1 := TChatForm.create(nil); |
Beim dritten Schritt bekomme ich dann eine EResNotFound:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EResNotFound aufgetreten. Meldung: 'Ressource TChatForm wurde nicht gefunden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- |
Im Moment kommt es mir gar nicht auf die Komponenten von TChatForm an, sondern nur, dass sieüberhaupt erzeugt wird. Wo liegt mein Fehler?
Anfänger - Fr 24.09.04 19:52
Warum machst du dir das so umständlich die Form durch den Text zu erstellen? Machs doch viel einfacher mit "Datei>Neues Formular".
Dadurch wird das wichtigste automatisch erstellt. Änderungen kannst du doch immernoch im Quelltext vornehmen.
Lossy eX - Fr 24.09.04 21:57
Delphi legt seine Formulardaten (die Eigenschaften des Formulars und deren Kinder) in der *.dfm ab. Wenn du es erstellen möchtest, dann versucht er die als Resource eingebundene dfm zu laden. Was natürlich nicht klappt, da sie ja nicht existiert. Du müsstest wenn dann direkt ein TForm instanziieren und dort dann die Elemente auch alle dynamsich erzeugen. Es ist allerdings wesentlich einfacher, wenn du in Delphi ein Formular erstellst und dieses dann benutzt!!!
Delete - Fr 24.09.04 23:05
Anfänger hat folgendes geschrieben: |
Machs doch viel einfacher mit "Datei>Neues Formular". |
Lossy eX hat folgendes geschrieben: |
Es ist allerdings wesentlich einfacher, wenn du in Delphi ein Formular erstellst und dieses dann benutzt!!! |
Ihr habt ja recht, ich habs inzwischen auch festegestellt :?
Schönen Dank für eure Bemühungen, Problem gelöst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!