Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - 2. Form geht bei Programmstart mit auf


Fabian E. - Do 01.05.08 17:33
Titel: 2. Form geht bei Programmstart mit auf
hallo zusammen,

ich habe hier ein sehr merkwürdiges Problem.
Ich habe in meiner Anwedung mehrere Formulare.
Sobald ich nun meine Anwedung starte, wird korrekterweiße die Mainform angezeigt.
Allerdings kommt dazu noch eine andere Form. :shock:
Ich habe keine Ahnung vorher... Ich rufe sie nicht auf und gar nichts... :(
Die wird erst bei einem OnClick eines Buttons angezeigt, der wiederrum auf einer anderen Form ist...
Hat jemand eine Idee? Vielleicht irgendwas in der IDE?

Der Fehler ist erst seit kurzem vorhanden... soweit ich weiß habe ich nur einen neuen Button auf der Form platziert... :(

gruß


FSS - Do 01.05.08 17:47

Kannst du den entsprechenden Quelltext posten in dem du den Fehler vermutest, dann kann ich es mal anschauen?


Clemens L. - Do 01.05.08 18:44

Delphi 2007 habe ich zwar nicht, aber in Delphi 6 gibt es unter "Projekt -> Optionen..." Die Registerkarte Formulare wo steht welche Formulare automatisch erzeugt werden sollen. Da kann man die rausnehmen / reintun, vielleicht ist das bei dir der Fall.


Gausi - Do 01.05.08 18:53

Hast du bei der Form vielleicht im OI die Eigenschaft Visible auf True gestellt?


Fabian E. - Do 01.05.08 19:04

user profile iconGausi hat folgendes geschrieben:
Hast du bei der Form vielleicht im OI die Eigenschaft Visible auf True gestellt?


Ja hatte ich :autsch:
Ich hab eben festgestellt, dass man das so verhindern kann und dachte mir so, dass das ja nicht grade die schönste Lösung sei... :roll:
Hmm... Naja okay... :lol:
Aber danke. Wusste gar nicht, dass das solche Auswirkungen hat...
Aber eine Frage bleibt noch... Warum war es Visible? ;)

Naja, egal... Für die Zukunft weiß ich es! :)
Danke!

gruß


zuma - Fr 02.05.08 08:58

Es ist Visible, weil du a) die eigenschaft gesetzt hast und b) das Fenster bei Programmstart implizit miterzeugst.
in deiner Haupt-Unit wird irgendwo
Application.CreateForm(TDeinFenster, DeinFenster);
aufgerufen, dadurch erzeugst du das Fenster schon beim start der Hauptunit.
verhindern des erzeugens geht z.b. so:
methode nach dem End der Fenster-implementation von Form2 deklarieren

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  TForm2 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
 // außerhalb der Type-definition!!
 procedure zeigeFenster2;
// im implementation-teil dann
// das Fenster 'sich selbst' erzeugen lassen
implementation

procedure zeigeFenster2; // NICHT TForm2. somit 'global' und durch Unit-einbinden verfügbar
begin
 Application.CreateForm(TForm2, Form2);
try
 Form2.show;
finally
 Form2.Release;
end;
end;

natürlich sollte dann Form2 in Form1 in der (unteren) Uses eingebunden sein.
nun reicht ein zeigeForm2 in Form1 und das Fenster wird erst zur Laufzeit erzeugt, wenn es benötigt wird.
Nun musst du in deinem Projekt unter Optionen -> Formulare
das Form2 von 'automatisch erzeugen' nach 'verfügbare Formulare' verschieben
(bei Neu/Formular werden die immer unter 'autom. erzeugen' eingetragen)