![]() |
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 |
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:
In deinen Fall wäre es also statt Form5 einfach TForm5.
object := klasse.create;
... object.free; 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 |
AW: eine Form mehrfach öffnen
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir klappt's so, wie im Anhang zu sehen.
Delphi-Quellcode:
Edit: Der Button zum Öffnen von Formularen lässt sich natürlich auch mehrfach anklicken. :stupid:
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; |
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: |
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); |
AW: eine Form mehrfach öffnen
Müsste sich nicht der angegebene Owner um die Freigabe kümmern?
|
AW: eine Form mehrfach öffnen
Zitat:
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. |
AW: eine Form mehrfach öffnen
Dann sollte man aber auch keinen Owner angeben. Zudem würde ich dann FreeAndNil() verwenden.
|
AW: eine Form mehrfach öffnen
Formulare werden mit Release freigegeben und nicht mit Free.
|
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:
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:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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