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:
var
newform : TForm;
begin
newform := CreateComponentByClassName('TMeinFormular66', nil) as TForm;
newform.ShowModal; // anzeigen
newform.Free; // und wieder vernichten
end;
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.
Die zweite Lösung (die ich etwas einfacher finde):
Code:
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;
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).