Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form vermehrfachen ! (https://www.delphipraxis.net/83480-form-vermehrfachen.html)

Counter909 3. Jan 2007 14:24


Form vermehrfachen !
 
moin


ich hab ein Problem: ich schreibe gerade ein relativ kleines Programm, wo ich jetzt aber
ein kleine Hilfe brauche und zwar sieht es so aus. Ich hab ein Unit/Form1 mit normaler Programm-Oberfläche. Dort drückt man auf einen Button, wobei EINE zweite Form sichtbar wird.

Delphi-Quellcode:
 
 if b<10 then showmessage('Die Zahl ist zu klein gewählt');
  if b>10 then
      begin
        Form2.Visible:=true;
        timer1.enabled:=true;
        for c:=1 to b do
Ich möchte aber , dass diese Form "b" mal geöffnet wird, bis jetzt wird sie ja nur einmal geöffnet, ist das i-wie möglich ? wenn ich jetzt zum beispiel hinter der Schleife showmessage('ssss') schreibe wird sie ja auch sooft geöffnet, aber mit der Form bekomme ich das nicht ganz hin
danke


mfg
counter

Udontknow 3. Jan 2007 14:32

Re: Form vermehrfachen !
 
Hallo!

Das geht mit einem Array. Du erzeugst eben mehrere Instanzen derselben Form-Klasse.

Delphi-Quellcode:
var Forms:array of TForm2;

...

begin
  ...
  Setlength(Forms,b)
  for c:=0 to b-1 do
  begin
    Forms[c]:=TForm2.Create(Self);
    Forms[c].Show;
  end;
Die Formular-Objekte werden in diesem Beispiel bei Beendigung freigegeben (Self sollte dein Hauptformular sein, daß diese dann freigibt). Ansonsten kannst du natürlich auch manuell freigeben, indem du den Array verfügbar hälst (also global definierst) und zu gegebener Zeit den Destruktor aufrufst (Forms[c].Free).

Cu,
Udontknow

Counter909 3. Jan 2007 14:47

Re: Form vermehrfachen !
 
ah vielen dank das funktioniert schonmal :-)
der tipp mit der array war eine gute idee....


jetzt aber zum schluss noch eine Frage:
jetzt werden die ja auch alle auf einen Haufen gesetzt, kann ich in der array jetzt
versuchen die positionen zu verändern ?


mfg
counter

Udontknow 3. Jan 2007 14:52

Re: Form vermehrfachen !
 
Natürlich.

Delphi-Quellcode:
Forms[c].Left:=100+c*30;
Forms[c].Top:=100+c*30;
Forms[c].Caption:='Formular '+IntToStr(c);
Cu,
Udontknow

Counter909 3. Jan 2007 15:08

Re: Form vermehrfachen !
 
jopp...vielen dank, mein ziel
ist sogut wie erreicht.
jetzt muss ich noch die verschiedenen Positionen rausfinden und dann
gehts

mfg
counter

Counter909 3. Jan 2007 16:51

Re: Form vermehrfachen !
 
Hallo

Jetzt muss ich doch nochmal so kleine fragen stellen ...
tut mir leid. Also:


1) ist es möglich, dass es nicht so ist, wenn man auf Form 1 auf das Kreuz oben rechts klickt, dass sich die anderen aus Form2 dann auch alle beenden ???

2)
Delphi-Quellcode:
for c:=0 to b-1 do
        begin
        forms[c]:=Tform2.Create(self);
        forms[c].show ;
        Forms[c].top:=100+c*50;
        Forms[c].Caption:='Formular '+IntToStr(c);
        end;
ich hab das jetzt angewendet,... dass die Form 2 sich alle von oben nach unten öffnen auf dem Desktop, wie man auch erkennen kann, nun möchte ich gerne, dass sich so eine Reihe nochmal von oben nach unten erstellt, aber natürlich an einer anderen stelle..sodass sich der desktop zu virtel damit füllt ?...... oder wie wird eigentlich die Position der Form1 berechnet ? wo ist der Null-Punkt ?

soll ein prog im Zusammenhang mit Ftp und so werden... das sind jetzt so zwei kleine sachen, die mich noch bisschen nerven.

vl
counter

RobertP 3. Jan 2007 17:06

Re: Form vermehrfachen !
 
zu 1) Du musst im OnCloseQuery von Form1 die Variable CanClose auf false setzen, dann passiert garnix wenn man auf schließen klickt.

zu 2) 0 Punkt ist die obere linke Ecke des Monitors. Für ne 2te Reihe mach also einfach des selbe nochmal nur setzte für Left einen höheren Wert


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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