AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Forms Dynamisch Erstellen

Ein Thema von Real_Thunder · begonnen am 12. Mai 2006 · letzter Beitrag vom 13. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#1

Forms Dynamisch Erstellen

  Alt 12. Mai 2006, 23:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 00:01
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...
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#3

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 00:15
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...
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 00:15
kleine korrektur:
Zitat:
List: array of MyFormclass;

// Neues Form:
Setlength(list, length(list)+1)
List[high(list)]:= Myformclass.create;
usw...
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#5

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 00:47
Wo muß ich
MyFormClass= TClass eintragen, habe es in type versucht will aber nicht...

binwie gesagt bin auf diesem gebiet neu...
und bitte keine sprüche wie grundlagen lernen etc.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 00:51
Moin

Zitat von Real_Thunder:
[...] habe es in type versucht will aber nicht...
Das müsste eigentlich schon gehen. Beispiel:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  MyFormClass = TClass;
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#7

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 01:18
Danke Matthias,

habe nun volgenes versiucht
Delphi-Quellcode:
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.
Allerdings erhalte ich diese fehlermeldung:
[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...
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 01:34
Hallo,

wenn es dir um gewöhnliche Formulare geht, kannst du es so machen:

Delphi-Quellcode:
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;
Attribute kannst du dann so setzen;

Delphi-Quellcode:
List[0].Width := 500;
List[0].Height:= 200;
List[0].Show;

List[1]. ...
Je nach Anzahl der Formulare. Freigeben geht dann einfach so:

FreeAndNil(List[x]);
Grüße
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#9

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 01:42
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:
unit Unit1;

interface

uses
  Unit2, Windows, Messages, ...;
dann deklarierst du dir n array der die ganzen dynamisch erstellten
forms aufnimmt.
Delphi-Quellcode:
var
  FormList: array of TForm2;
und wenn du ne neue instanz von form2 erstellt dann vergrößerst du
den array um ein element und speicherst es da.
Delphi-Quellcode:
var
  frm: TForm2;
begin
  frm := TForm2.Create;
  frm.Show;

  setlength(FormList, length(FormList)+1);
  FormList[high(FormList)] := frm;
end;
wenn dein prog beendet wird oder du aus einem anderen grund alle
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...
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#10

Re: Forms Dynamisch Erstellen

  Alt 13. Mai 2006, 02:12
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:
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.
unit2:
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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