AGB  ·  Datenschutz  ·  Impressum  







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

Formular beliebig oft zur Laufzeit erstellen

Ein Thema von Sko · begonnen am 14. Okt 2005 · letzter Beitrag vom 17. Okt 2005
 
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#5

Re: Formular beliebig oft zur Laufzeit erstellen

  Alt 14. Okt 2005, 21:19
Du könntest dir auchn Knopf an die Backe nähen...

Da gesagt wurde, dass es für ein Chatprogramm ist, kann man wohl davon ausgehen, dass das ganze später noch verwendet werden muss

Projektsource:

Delphi-Quellcode:
program Formulare;

uses
  Forms,
  Main in 'Main.pas{MainForm},
  chat in 'chat.pas{ChatForm};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm); // ChatForm nicht erstellen!
  Application.Run;
end.
So nun vom MainForm
Delphi-Quellcode:
uses Chat
type PChatForm = ^ChatForm; // ein Pointer auf das Formular

type
  TMainForm = class(TForm)
...

  public
    FormListe: TList; // Eine Liste, in der die Pointer auf die Formulare gespeichert werden
    ChatPointer: PChatFormForm; // Eine Pointervariable (Definition oben)
Wenn du jetzt ein Formular erzeugen willst, musst du folgendes machen:
Delphi-Quellcode:
procedure TMainForm.CreateButtonClick(Sender: TObject);
begin
  GetMem(ChatPointer, SizeOf(TChatForm)); // An Adresse Speicher fürs Formular bereitstellen
  ChatPointer^ := TChatForm.Create(Self); // ChatForm erzeugen
  FormListe.Add(ChatPointer); // fügt den Pointer zur Liste hinzu
end;
Der Zugriff auf eines der Formulare geschieh wie folgt:
Delphi-Quellcode:
  ChatPointer := FormListe[Integer]; // Pointer auf ein Formular richten
  ChatPointer^.Caption := EditFormCaption.Text;
Da du den ganzen Speicher selber reserviert hast, musst du ihn auch wieder freigeben.
Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 0 to FormListe.Count-1 do
  begin
    ChatPointer := FormListe[i];
    ChatPointer^.Hide; // Sicherheitshalber aufrufen, da es sonst zu Fehlern kommen kann
    ChatPointer^.Free;
    FreeMem(ChatPointer, SizeOf(TChatFormForm)); // Speicher wieder freigeben
  end;
  FormListe.Free;
Das waren so die trockenen Befehle.

Nun denn, da du darauf nicht selber gekommen bist, nehme ich an, dass du dich noch nicht mit dem Thema "Pointer" beschäftigt hast. Dazu würde ich dir nun raten (Ausnahme: Du willst ein CnP-Prog), dich damit intensiv zu beschäftigen. Ist anfangs schwierig zu verstehen (wozu auch selbstständiges Beherrschen gehört), aber für dein Programm unabdingbar. Hier im Forum wirst du einiges dazu finden.
  Mit Zitat antworten Zitat
 


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 07:45 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