Delphi-PRAXiS

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 VCL Formular verstecken (https://www.delphipraxis.net/205582-vcl-formular-verstecken.html)

Igerbam 25. Sep 2020 20:34

VCL Formular verstecken
 
Hat hier jemand eine Ahnung wie man ein anderes VLC-Formular öffnen und das alte schließt? Natürlich kann ich beim aufrufen den anderen VLC-Formulars das andere mit Form1.Hide verstecken und wenn ich es schließe in Ereignissen des neuen Formulars FormCloseQuery so schreiben:
Delphi-Quellcode:
Halt(ExitCode);
Application.Terminate;
Damit wird das Programm dann immer komplett beendet. Folgendes Problem: Wenn ich dann das neue VCL-Formular anzeigen will und das alte(main) Formular verstecke ist das Programm nicht mehr in der Taskleiste zu finden:

Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm5, Form5);
Form5.Show;
Self.Hide;
end;
heißt bisher hab ich das immer so gemacht:

Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm5, Form5);
Form5.Show;
menu:=nil;
ClientHeight:=0;
ClientWidth:=0;
BorderIcons:=[];
end;
aber so bleibt natürlich ein kleines Fenster im Hintergrund offen. Wie kann ich das verstecken?

himitsu 26. Sep 2020 00:16

AW: VCL Formular verstecken
 
Die MainForm zu schließen (Close) beendet das ganze Programm. Mit Hide ausblenden geht aber.

Durch Application.MainFormOnTaskbar=True wird die MainForm dort angezeigt,
aber das auf False zu ändern ist eine schlechte Idee.
Früher wurde in der Taskbar das unsichtbare Message-Windows der Application angezeigt, was aber seit Vista dank AeroPeak und Co. blöde Nebenwirkungen hat, z.B. hat das Vorschaufenster dann keinen Inhalt, weil die MessageForm ja leer ist.

Lösung:
Wie man für ein anderes Form auch einen Taskbar-Button bekommt,
da hätte dir die Suchfunktion bestimmt geholfen: Fenster ins Taskleiste anzeigen, oder Dergleichen
Stichwort: Hier im Forum suchenWS_EX_APPWINDOW
z.B. https://www.swissdelphicenter.ch/de/showcode.php?id=775

Application.Terminate oder MainForm.Close beendet das Programm.

Halt beendet zwar auch die Anwendung, aber das kann man eher als "erschießen" bezeichnen.
Und wer sowas nötig hat, der hat wohl extreme Problme mit seinem Programm.
Die Hilfe sagt dazu nicht umsonst: Initiates the abnormal termination of a program.
Delphi-Quellcode:
//ExitCode := ...; falls man das benötigt
Application.Terminate;

venice2 26. Sep 2020 00:31

AW: VCL Formular verstecken
 
Zitat:

Halt beendet zwar auch die Anwendung, aber das kann man eher als "erschießen" bezeichnen.
Und wer sowas nötig hat, der hat wohl extreme Problme mit seinem Programm.
Ja?
Warum stellt man dann so eine Funktion überhaupt zur Verfügung wenn sie Keine Berechtigung hat.

Ich denke es ist legitim "Halt" unter besonderen Voraussetzungen zu verwenden.
Zum beispiel wenn man eine DLL instantiiert und diese einen Fehler ausgibt, da man ohne diese nicht arbeiten kann sollte das legitim sein.
Außer das man ein Window erstellt hat ist ja sonst noch nichts passiert.

himitsu 26. Sep 2020 00:53

AW: VCL Formular verstecken
 
Warum?
Für den Notfall, wenn man wegen schwer Probleme alles beenden abschießen muß. :stupid:

Ja, für die Behandlung von "schweren" Fehlern ist es schon OK, aber ein Ausnahmeverhalten ist nicht für den Standard da, also nicht zum "regulären" Beenden. :zwinker:

venice2 26. Sep 2020 01:14

AW: VCL Formular verstecken
 
Zitat:

aber ein Ausnahmeverhalten ist nicht für den Standard da, also nicht zum "regulären" Beenden.
Das ist richtig! :)

KodeZwerg 28. Sep 2020 07:43

AW: VCL Formular verstecken
 
Wenn man möchte, kann man sein Programm mit Parametern bestücken.
Beispiel: "Program.exe /Form=1"

Eine kleine Abfrage ob das Programm bereits geladen ist in der .dpr rein die dann auch das im Parameter aufgerufene Formular öffnet.
Bei der Operation die das Formular wechselt halt eine Execute Methode mit entsprechenden Parameter aufrufen.

So etwas wäre nur Sinnvoll wenn man keinen Datenaustausch zwischen den Formularen hat.


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