Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   eine Form mehrfach öffnen (https://www.delphipraxis.net/154404-eine-form-mehrfach-oeffnen.html)

Remedy7 9. Sep 2010 17:49

Delphi-Version: 2006

eine Form mehrfach öffnen
 
Hallo Gemeinde,

in meiner Freizeit beschäftige ich mich gern nebenbei mit neuen Dingen. So bin ich zu Delphi gekommen und hab nun seit mehreren Wochen ein wohl eher kleines Problem. Leider leifert mir Google keine richtige Antwort.
Es geht um folgendes:

Ich habe eine Form. Auf diese Form wird vom Anwender verlangt eine Anzahl an Teilsystem an zu geben. Zum Beispiel 7. Wenn er nun die Zahl 7 einegeben hat, soll sich ein und die selbe Form 7 mal öffnen. Auf der sich öffnenden Formen ist eine Abfolge einzugeben die bei jedem einzelnen Teilsystem anders seien kann. So muss es so sein das sich die Form quasi jedesmal beim öffnen eigenständig verhält.

Habe es mit einer einfachen Schleife probiert:

---------------------------
i: integer;
.
.
.

for i := 1 to 11 do
begin

Form5.Create(Application);
end;

---------------------------
Delphi bringt mir dann Exceptione-Klasse EComponentError miit Meldung 'Komponente mit der Bezeichnung Label1 existiert bereits'.

Heist für mich, dass die Form5 die 7 mal geöffnet werden sollte sich nicht unabhängig voneinander öffnet.

Was mache ich Falsch, bzw geht das überhaupt so wie ich mir das gedacht habe?

Hoffe ich habe mein Problem gut genug erläutert. Wenn nicht bitte nachfragen. Brauche da bissl Hilfe.

Beste Grüße

Remedy7

xZise 9. Sep 2010 18:01

AW: eine Form mehrfach öffnen
 
Eigentlich sollte das gehen.
Aber dein Form5.Create sieht komisch aus. Weil du erstellst da was von einm Objekt und keiner Klasse.

Normalerweise hat man das so:
Delphi-Quellcode:
object := klasse.create;
...
object.free;
In deinen Fall wäre es also statt Form5 einfach TForm5.

Ich bin mir gerade nicht sicher, aber normalerweise muss ein erstelltes Objekt auch wieder freigegeben werden. Aber eventuell geschieht dies bereits durch den Übergabeparameter?

MfG
Fabian

Matze 9. Sep 2010 18:17

AW: eine Form mehrfach öffnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir klappt's so, wie im Anhang zu sehen.
Delphi-Quellcode:
procedure TForm1.BtnShowFormsClick(Sender: TObject);
var
  MyFrm: TForm1;
  i: Integer;
begin
  for i := 1 to 20 do
  begin
    MyFrm := TForm1.Create(Application.MainForm);
    MyFrm.Left := Random(Screen.Width - Form1.Width) + 1;
    MyFrm.Top := Random(Screen.Height - Form1.Height) + 1;
    MyFrm.Show;
  end;
end;
Edit: Der Button zum Öffnen von Formularen lässt sich natürlich auch mehrfach anklicken. :stupid:

Remedy7 10. Sep 2010 08:02

AW: eine Form mehrfach öffnen
 
Guten Morgen,

vielen vielen Dank für eure Hilfe. Hat Funktioniert. Jetzt muss ich nur zusehen das ich da bissl Ordnung rein bekomme, vielleicht mit namen und so.

Danke für die nette Unterstützung:-D

:thumb: :thumb: :thumb:

SirThornberry 10. Sep 2010 08:21

AW: eine Form mehrfach öffnen
 
Um auch die Freigabe wieder hin zu bekommen ist es ratsam die Forms in einem Array zu speichern. Damit hast du auch die Möglichkeit durch eine Schleife die verschiedenen Forms einfach anzusprechen:
Delphi-Quellcode:
private
  yourForms: array of TForm1;
var
  i: Integer;
begin
  SetLength(yourForms, 20);
  for i := 0 to length(yourForms) - 1 do
  begin
    MyFrm := TForm1.Create(Application.MainForm);
    MyFrm.Left := Random(Screen.Width - Form1.Width) + 1;
    MyFrm.Top := Random(Screen.Height - Form1.Height) + 1;
    MyFrm.Show;
    yourForms[i] = MyFrm;
  end;
[...]
  for i := 0 to length(yourForms) - 1 do
    yourForms[i].Free;
  SetLength(yourForms, 0);

DeddyH 10. Sep 2010 15:02

AW: eine Form mehrfach öffnen
 
Müsste sich nicht der angegebene Owner um die Freigabe kümmern?

Matze 10. Sep 2010 15:22

AW: eine Form mehrfach öffnen
 
Zitat:

Zitat von DeddyH (Beitrag 1048731)
Müsste sich nicht der angegebene Owner um die Freigabe kümmern?

Doch, wenn einer angegeben ist, sollte er das.

Beim manuellen Freigeben sieht man am Code schon, dass die Formulare auf jedenfall freigegeben werden.
Evtl. ist das sauberer, wenn man diese selbst freigibt, aber das kann wohl jeder machen wie er mag, wenn die Firma nichts vorschreibt.

mkinzler 10. Sep 2010 15:25

AW: eine Form mehrfach öffnen
 
Dann sollte man aber auch keinen Owner angeben. Zudem würde ich dann FreeAndNil() verwenden.

omata 10. Sep 2010 15:33

AW: eine Form mehrfach öffnen
 
Formulare werden mit Release freigegeben und nicht mit Free.

Hansa 10. Sep 2010 19:07

AW: eine Form mehrfach öffnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

was ihr hier treibt gefällt mir nicht. :mrgreen: Form-Array, beim Create als Sender was angeben, warum das ? Jo und noch Holzhammer a la Random. :shock:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure frmxClose(Sender: TObject; var Action: TCloseAction);
  public
    { Public-Deklarationen }
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var i,x,y : Integer;
    NewForm : TForm;
begin
  for i := 1 to 7 do begin
    NewForm := TForm.Create (Self);
    NewForm.Name := 'frm' + IntToStr(i);
    NewForm.Caption := 'Form Nr.: ' + IntToStr(i);
    NewForm.Left := i * 100;
    NewForm.Top := i * 50;
    NewForm.OnClose := frmxClose;
    NewForm.Show;
  end;
end;
Da ist vorerst jetzt Schluss. Rest ist im Anhang (also komplettes Projekt). 8-) Wegen der bevorstehenden Delphi-Tage will ich die Download-Zahl sehen. Das sind immer solche Themen, über die man schön streiten kann. :mrgreen: Au Mann, das geht ja nur gezippt. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.
Seite 1 von 2  1 2      

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