AGB  ·  Datenschutz  ·  Impressum  







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

Eine Form mehrmals aufrufen

Ein Thema von Tim Henford · begonnen am 11. Mär 2008 · letzter Beitrag vom 12. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#1

Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 13:00
Hallo,

irgendwie steck ich grad fest:
Ich hab eine Form erzeugt, die auf Knopfdruck erstellt wird:

Delphi-Quellcode:
Form1:

unit unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
...
dann im hauptfenster meines Projekts will ich diese Form mehrmals aufrufen, wie kann man das machen:
Eine Instanz erstelle ich so:
Delphi-Quellcode:
      Form1:= TForm.Create(nil);
      Form1.Left:= pos.X; Form1.Top:= pos.Y;
      Form1.ShowModal;
      Form1.Free;
Wie könnt ich das machen?
  Mit Zitat antworten Zitat
Benutzerbild von vsti
vsti

Registriert seit: 20. Sep 2004
Ort: Syke
70 Beiträge
 
Delphi 2005 Architect
 
#2

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 13:09
Mit

Delphi-Quellcode:
Application.CreateForm(TForm1,Form1);
Form1.Show;
solltes du die Form mehrmals createn können.
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von defede
defede

Registriert seit: 10. Aug 2006
Ort: Stötten am Auerberg
72 Beiträge
 
Delphi 7 Professional
 
#3

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 13:09
Delphi-Quellcode:
var
  i : Integer;
  aForm : TForm;
begin
  for i:=0 to 3 do begin
    aForm := TForm1.Create(self);
    aForm.ShowModal;
  end;
...
Dann ist jedesmal aForm eine Intstanz.
Das geht
Invader Zim
Obey Zim
Fear Zim
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 13:11
Dann erstellst du halt noch eine Instanz... Das darf natürlich nicht über die gleiche Instanzvariable Form1 gehen.... Form1 ist eh ein blöder Name.

Wenn jede Form für sich arbeitet, brauchst du dir überhaupt keinen Namen merken, dann geht das auch so:

Delphi-Quellcode:
with TForm.Create(nil) do begin
      Left:= pos.X;
      Top:= pos.Y;
      Show; // kein Showmodal
      Free;
end ;
wichtig ist, dass du die Form über Show aufrufst, da du sonst erst eine 2. Instanz erstellen kannst, nachdem du die erste Form geschlossen hast.

Wenn du von aussen eine liste aller gezeigten Forms benötigst, dann musst du die halt in einem array oder ObjectList verwalten. Dabei bietet sich Objectlist in diesem Fall wirklich an, weil die Instanz aus der Liste entfernt wird, sobald dein Form zerstört wird.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 13:21
Zitat von Jelly:
Dabei bietet sich Objectlist in diesem Fall wirklich an, weil die Instanz aus der Liste entfernt wird, sobald dein Form zerstört wird.
TComponentList IHMO wäre besser, falls das Objekt von woanders freigegeben wird.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#6

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 13:25
Zitat von Jelly:
Delphi-Quellcode:
with TForm.Create(nil) do begin
      Left:= pos.X;
      Top:= pos.Y;
      Show; // kein Showmodal
      Free;
end ;
Das wird nicht funktionieren, da das "Free;" die Form sofort wieder freigibt. Das Free sollte hierbei am besten im FormClose des jeweiligen Formulars mittels "Action := caFree;" gemacht werden.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 17:19
... oder es wird statt Free von aussen Delphi-Referenz durchsuchenRelease aufgerufen.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Eine Form mehrmals aufrufen

  Alt 11. Mär 2008, 18:16
Zitat von dfried:
Das wird nicht funktionieren, da das "Free;" die Form sofort wieder freigibt.
Natürlich nicht... Sowas aber auch
Dein Vorschlag hingegen funktioniert natürlich..
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#9

Re: Eine Form mehrmals aufrufen

  Alt 12. Mär 2008, 09:58
Danke für die schnellen Hilfen.

Also ich lasse die Forms jetzt folgendermaßen erstellen:
Delphi-Quellcode:
var
  formen : array [1..5] of TForm1;
  AnzForm : integer;

procedure THauptForm.StartBtnClick(Sender: TObject);
begin
      AnzForm:= AnzForm+1;

      formen[AnzForm]:= TForm1.Create(nil);
      formen[AnzForm].Left:= pos.X; formen[AnzForm].Top:= pos.Y;
      formen[AnzForm].Tag:= AnzForm;
      formen[AnzForm].Show;
end;
Form1 sieht dann so aus, die nächsten Fenster sollen sich alle neben das erste Reihen und wenn sich das erste bewegt sollen alle mitziehen:

Delphi-Quellcode:
...
  private
    procedure WMMove(var Message: TWMMove); MESSAGE WM_MOVE;
    procedure AlignForm;

....

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  AnzForm:= AnzForm-1;
end;

procedure TForm1.WMMove(var Message: TWMMove);
begin
  inherited;
  try // hier hängt er dann
    if Assigned(formen[Form1.Tag]) then begin
        AlignForm;
    end;
  except
  end;
end;

procedure TForm1.AlignForm;
begin
  formen[Form1.Tag].Left := formen[formen[Form1.Tag]-1].Left + formen[formen[Form1.Tag]-1].Width;
  formen[Form1.Tag].Top := formen[formen[Form1.Tag]-1].Top;
end;
das zugreifen auf "Tag" funktioniert hier so nicht, hat da jemand eine Lösung
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Eine Form mehrmals aufrufen

  Alt 12. Mär 2008, 10:07
Besser
formen[AnzForm]:= TUmbauten.Create(self); Warum form1? das ist eine bestimmte Referenz, welche in deinem Fall höchstwahrscheinlich Nil ist.
Besser Self.Tag bzw. Tag
Markus Kinzler
  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 18:37 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