Thema: Delphi Dynamisches Formular

Einzelnen Beitrag anzeigen

undertaker

Registriert seit: 10. Feb 2004
2 Beiträge
 
#1

Dynamisches Formular

  Alt 6. Jun 2004, 13:24
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).
  Mit Zitat antworten Zitat