Dynamisches Formular
Ich bin dabei ein Chatprogramm zu entwickeln, in dem es auch möglich sein soll einen privatchat zu öffnen. Da ich nicht weiß, wie viele privatchats ein user aufmacht, sollen die Formulare dafür dynamisch erstellt werden. Ich hab mich hier im Forum mal umgesehen und zwei Lösungen gefunden, die aber beid noch nicht so funktionieren, wie ich es mir wünsche.
Lösung 1 (aus der Code-Libary):
Code:
initialization
RegisterClass(TMeinFormular66); end;
Code:
function CreateComponentByClassName(const name:string; AOwner:TComponent):TComponent;
begin // Sollte die Klasse mit dem Namen "name" nicht registriert worden sein, // dann wird in FindClass eine Exception ausgelöst Result := TComponentClass(FindClass(name)).Create(AOwner); end;
Code:
Hierbei hab ich probleme mit dem initialization, ich habs ganz am ende meiner unit gesetzt damit es überhaupt lief, aber ich sollte auch TMainformular66 deklarieren und ich weiß nicht wie.
var
newform : TForm; begin newform := CreateComponentByClassName('TMeinFormular66', nil) as TForm; newform.ShowModal; // anzeigen newform.Free; // und wieder vernichten end; Die zweite Lösung (die ich etwas einfacher finde):
Code:
Ich habe hier das Problem, das ich nicht weiß, wie ich auf das erstelle editfeld zugreifen kann um zB den Text zu ändern. Ich kann ja auch mehrere instanzen dieses Formulares öffenen, aber wie unterscheide ich die vom Hauptprogramm aus? Außerdem bekomme ich eine Fehlermeldung, wenn ich die Form schließen (NF.close) oder frei machen will (NF.free).
procedure TclientForm.pchatBitBtnClick(Sender: TObject);
var NF: TForm; procedure dOnClick(self: TObject; Sender: TObject); begin showmessage('test'); editprivat.text:='test'; //funktioniert nicht NF.Close; //funktioniert nicht end; begin NF := TForm.Create (Self); NF.show; with Tedit.Create(NF) do begin parent := NF; name:='editprivat'; caption := 'lalalalei'; end; with Tbutton.Create(NF) do begin parent := NF; caption := 'test'; top:=100; height:=25; width:=80; name:='button' + inttostr(privatchats); mtdbtn.Code := @dOnClick; mtdbtn.Data := Self; OnClick := TNotifyEvent(mtdbtn); end; end; |
Re: Dynamisches Formular
Du kannst das Chatfenster auch zur entwurfszeit erstellen, und dann beliebg viele solcher Formulare zur Laufzeit erstellen.
|
Re: Dynamisches Formular
Ich hab das Formular ja durch NF := TForm.Create (Self); zur Laufzeit erstellt, nur weiß ich jetzt net, wie ich vom Hauptformular darauf zugreifen kann, besonders weil ich ja mehrere Instanzen starten kann.
|
Re: Dynamisches Formular
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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