Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mainmenu (https://www.delphipraxis.net/2393-mainmenu.html)

Jan 21. Jan 2003 12:42

Hallo Hansa,

ich blicke durch das was du da gerade gesagt hast jetzt nicht ganz durch.
Ich glaube du hast absolut nicht verstanden was ich gemacht habe, ich habe lediglich das form2.show in die unit2 verschoben und eine Procedure, die das form2.show verwendet von unit1 aus aufgerufen.

Zitat:

jetzt habe ich es einfach mal so machen wollen

Code:
Form2.Create ()

Was soll denn das sein?

Von form2.create war garnicht die Rede.

Das Form1.create event erzeugst du, wenn du im form1 im OI unter Eigenschaften das oncreate event doppelklickst. darein schreibst du dann das, was ich oben schon geschrieben habe, und du musst auch keine neue Klasse erstellen, theoretisch kannst du die bereits vorhandene Form2-klasse aus unit2 auch verwenden und die Procedure einfach dieser Klasse hinzufügen, aber vergiss dann nicht die klasse auch zu in unit 1 zu definieren:

Code:
var
  classvar: tform2;
und:


Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
classvar:tform2.create;
end;
Ich hoffe, dass das jetzt verständlicher war, was ich gemeint habe.
Gruß
Jan

X-Dragon 21. Jan 2003 14:31

Ich weiss nicht ob das hilft, aber ich create meine Forms erst wenn ich sie brauche und schmeiss sie weg, wenn ich sie nicht mehr brauche.

Also erstmal werden alle Forms(ausser das Hauptformular) aus Projekt/Optionen/Forms/AutoCreate entfernt bzw rechts rüber geschoben. Anschliessend erstell ich das jeweilige Formular, wenn ich es z.B. über ein Menü aufrufe, mit:

Code:
  Form1 := TForm1.Create(Application);
  if Form1.ShowModal = mrOK then
    Form1.Release;
.. und schliesse es mit einem Schliessen-Button dem ich den Wert "ModalResult := mrOK" mitgebe, bzw direkt im Programmcode (in OnClose), wenn vorher noch was anderes ausgeführt werden soll.

Bei mir hat es sich zumindest schon mehrfach bewährt und die Programme startet auch noch schneller, da nur das geladen wird was man wirklich braucht.

Hansa 21. Jan 2003 17:44

Hi,

das da sieht gut aus. So müßte das einwandfrei gehen. Werde es vielleicht heute noch testen. Nur : Wieso soll das Programm schneller starten ? Die EXE wird durch den zusätzlichen Code doch wohl nicht kleiner, oder worauf willst Du hinaus ?

Gruß
Hansa

Luckie 21. Jan 2003 17:52

Die Exe wird nicht kleiner, aber so werden die Formulare erst geladen, wenn sie benötigt werden und nicht gleich alle beim Start deiner Anwendung.

Hansa 21. Jan 2003 17:54

Hi,

ist das so zu verstehen wie ein Overlay früher ?

Gruß
Hansa

Hansa 21. Jan 2003 18:16

Hi X-Dragon,

als ich den Quelltext gesehen habe, ach hab ich doch schon gesagt, daß das für mich gut aussieht. Konnte es deshalb nicht lassen, das direkt auszuprobieren und sieh an zumindest die Form, die ich haben wollte ist da. Danach kommt zwar eine Exception, aber das ist bei StartTransaction. Vermute den Fehler deshalb eher bei SQL. Aber noch eine Frage : Wieso brauche ich das Release nur, falls ShowModal. Das blöde ShowModal kriege ich einfach nicht gepeilt. Kann mir das vielleicht mal einer so einfach erklären, daß ein absoluter NewBie es verstehen würde.

Gruß
Hansa

Hansa 21. Jan 2003 18:21

Hi,

der Fehler ist wahrscheinlich geklärt. Datenbank-Pfad ist noch nicht definiert. Das kann ja nicht gehen. :oops: Das ShowModal kapiere ich irgendwie trotzdem nicht richtig.

Gruß
Hansa

X-Dragon 21. Jan 2003 19:00

Wenn man ein Fenster "Modal" öffnet, ist automatisch nur dieses aktiv. Es ist also kein zugreifen aufs Hauptformular mehr möglich, bis das modal-geöffnete Unterformular geschlossen ist.

Zusätzlich kann man z.B. 2 Button aufs Fenster plazieren und diesen mit der Eigenschaften "ModalRessult" im Objektinspektor, ein Ergebniss mitgeben (mrOK/mrCancel/...).

Also wenn ein Button mit ModalResult auf "mrOK" und der andere auf "mrCancel" eingetellt ist, wird automatisch beim drücken eines der Button, das Fenster geschlossen und dieser Wert jeweils übergeben.

In meinem Beispiel wird bei "mrOK" der Befehl "Release" ausgeführt der das Fenster schliesst und vollständig aus dem Speicher entfernt.

Man kann aber auch erstmal den normalen Programmcode abarbeiten, beim drücken eines Schliessen-Buttons (z.B. Daten speichern), und das Fenster dann mit
Code:
ModalResult := mrOK;
schliessen (wobei dann natürlich das Feld "ModalResult" bei dem Button leer sein muss).


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Seite 2 von 2     12   

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