![]() |
Forms Dynamisch Erstellen
Moin erstmal, ich bin es mal wieder
Habe nach einer Antwort gesucht, hier im forum nichts gefunden, und ebens wenig bei google hier mein problem.. meine anwendung soll während der laufzeit eine beliebe anzahl von forms erstellen können.... also quasi wie z.b. icq.. also muß ich die forms ja zur laufzeit erstellen.... soweit auch noch kein problem... nun möchte ich aber eine undefinierte anzahl von forms erstellen lassen... und da ich soweit ich weiß für jede form ne var brauche, und sie vorher declariert werden müssen, ist ja ein mindestwert gegeben.. Könnte mir jemand erklären wie ich es so programmieren könnte das meine anwendung praktisch unbegrente formen erstellen kann ? Vielen Dank im vorrau |
Re: Forms Dynamisch Erstellen
Schreib dir ein Klasse, die alle Funktionen des Formulars beinhaltet, also erstellen, Komponenten, benötigte Funktionen, usw.
Im Programm könntest du dann ein dynamisches Array aus diesen Klassen machen und bei Bedarf das Array vergrößern.
Delphi-Quellcode:
MyFormClass= TClass
... List: array of MyFormclass; // Neues Form: Setlength(list, length(list+1) List[length(list)]:= Myformclass.create; usw... |
Re: Forms Dynamisch Erstellen
Danke erstmal hört sich ja logisch an, doch habe ich keinen Plan wie ich das Anstellen soll...
Könntest du es ein wenig erläutern ? bin delphi neuling... eigendlich oop neuling.. habe nur mit anderen programmiersprachen zu tun gehabt...... wie meinst du das mit klasse die alle funktionen enthält.... naja werde es erstmal so veruchen, wie es mir meine logic sagt... |
Re: Forms Dynamisch Erstellen
kleine korrektur:
Zitat:
|
Re: Forms Dynamisch Erstellen
Wo muß ich
Delphi-Quellcode:
eintragen, habe es in type versucht will aber nicht...
MyFormClass= TClass
binwie gesagt bin auf diesem gebiet neu... und bitte keine sprüche wie grundlagen lernen etc. |
Re: Forms Dynamisch Erstellen
Moin
Zitat:
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; private { Private-Deklarationen } public { Public-Deklarationen } end; type MyFormClass = TClass; |
Re: Forms Dynamisch Erstellen
Danke Matthias,
habe nun volgenes versiucht
Delphi-Quellcode:
Allerdings erhalte ich diese fehlermeldung:
unit hauptform;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public MyFormClass: TClass; end; type MyFormClass = TClass; var Form1: TForm1; List: array of MyFormclass; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // Neues Form: Setlength(list, length(list+1) List[length(list)]:= Myformclass.create; end; end. [Fehler] hauptform.pas(40): E2010 Inkompatible Typen: 'TClass' und 'TObject' soganz habe ich das prinzip noch nicht verstanden... Sorry, aber wie gesagt, bin sehr wissbegierieg aber halt noch ein newbee... |
Re: Forms Dynamisch Erstellen
Hallo,
wenn es dir um gewöhnliche Formulare geht, kannst du es so machen:
Delphi-Quellcode:
Attribute kannst du dann so setzen;
type
MyForm = TForm; var List: array of TForm; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // Neues Form: Setlength(List, high(List) + 1); List[high(list)]:= MyForm.Create(Self); end;
Delphi-Quellcode:
Je nach Anzahl der Formulare. Freigeben geht dann einfach so:
List[0].Width := 500;
List[0].Height:= 200; List[0].Show; List[1]. ...
Delphi-Quellcode:
FreeAndNil(List[x]);
Grüße |
Re: Forms Dynamisch Erstellen
also jetzt ma von vorne :)
ich würde mir mein formular komplett so designen wie ichs gerne möchte. dann speichere ich die unit und binde sie in meine main-unit ein. gehen wir ma von der standard namesvergebung aus. mein dynamisch erzeugtes form (dein s.g. chat-fenster bei icq)soll ma form2 in der unit unit2 sein. dann fügst du bei deinem projekt (meist ja form1 in unit1) in der uses klausel "unit2" hinzu.
Delphi-Quellcode:
dann deklarierst du dir n array der die ganzen dynamisch erstellten
unit Unit1;
interface uses Unit2, Windows, Messages, ...; forms aufnimmt.
Delphi-Quellcode:
und wenn du ne neue instanz von form2 erstellt dann vergrößerst du
var
FormList: array of TForm2; den array um ein element und speicherst es da.
Delphi-Quellcode:
wenn dein prog beendet wird oder du aus einem anderen grund alle
var
frm: TForm2; begin frm := TForm2.Create; frm.Show; setlength(FormList, length(FormList)+1); FormList[high(FormList)] := frm; end; instanzen von form2 freigeben willst sollte das so aussehen (z.B. in OnDestroy von deinem form1)
Delphi-Quellcode:
var
i: integer; begin for i:=0 to high(FormList) do FormList[i].free; setlength(FormList, 0); end; edit: da war wohl jemand schneller als ich... |
Re: Forms Dynamisch Erstellen
Jups, vielen dank es klappt... ihr müßt mich doch nun alle für völlig doof halten....
Naja nun habe ich es verstanden, (und nicht nur doof abgetippt bzw copy & paste) ist ja auch an sich logisch, wenn man eine var für nen objekt braucht, das man dafr ein dyn array benutzt.. Da war noch ein Kleiner fehler drin, der sender hat bei create gefehlt... so und für alle die genauso doof wie ich sind und das selbe prblem haben, hier die Komplettlösung:
Delphi-Quellcode:
unit2:
unit unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, unit2; // Hier die Unit/Form eintage // die immer wieder geöffnet werden soll type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private public end; var Form1: TForm1; FormList: array of TForm2; // Ein Array erzeugen mit den Werten von TForm2 implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var frm: TForm2; // Declaration für TForm2 begin frm := TForm2.Create(self); // TForm2 Erstellen frm := frm.Show; // TForm2 Anzeigen setlength(FormList, length(FormList)+1); // Array um ein Element erhöhrn FormList[high(FormList)] := frm; end; end.
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm2 = class(TForm) Edit1: TEdit; RichEdit1: TRichEdit; Button1: TButton; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} end. Noch mal viele Dank anAlle die mir geholfen haben... Ich gehe mich jetzt erstma ne runde ich die ecke stelen und schämen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz