![]() |
Probleme mit Application.Terminate; ...
Hallo Leutz,
ich habe ein Problem. Ich mache gerade ein kleines Programm aus dem ich mehrer andere Programme starten kann (ein Installationsmenü). Nun wenn man alle nötigen Komponenten installiert hat kann man das Programm anschließen auch aus dem Installtionsmenü starten:
Delphi-Quellcode:
Dabei wie ihr seht will ich das InstallationsMenü gleichzeitig schließen, damit man es nachher nicht manuell machem muss. :-D
procedure TForm1.ImageButton2Click(Sender: TObject);
begin CheckInstallationen; ExecuteProgramm('Programm1.exe'); Application.OnMessage := nil; Application.Minimize; Application.Terminate; end; Hier ist mein Problem, er fängt an die Anwendung Programm1.exe auszuführen aber schließt es gleich wieder mit dem InstallationsMenü. Im Taskmaneger unter Anwendung ist dann kein Programm1.exe zu sehen, aber unter Prozesse schon. Was mach ich da falsch? :?: |
Re: Probleme mit Application.Terminate; ...
Was genau macht ExecuteProgramm()?
|
Re: Probleme mit Application.Terminate; ...
Delphi-Quellcode:
Das hier!
procedure TForm1.ExecuteProgramm(const PFileName: string);
var SEInfo: TShellExecuteInfo; ExitCode: DWORD; ExecuteFile: string; begin ExecuteFile := '"' + PFileName + '"'; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode <> STILL_ACTIVE) or Application.Terminated; end else begin Application.MessageBox('Fehler beim Starten des Programms', 'Hinweis', MB_OK + MB_ICONERROR); end; end; |
Re: Probleme mit Application.Terminate; ...
Du hänst das Programm auch an den handle deines Programmes
|
Re: Probleme mit Application.Terminate; ...
Ok, meinste du die stelle bei:
Wnd := Application.Handle; ???? Soll ich stattdessen was anderes hinschreiben? oder mach ich einfach die Zeile weg? |
Re: Probleme mit Application.Terminate; ...
![]() http://msdn2.microsoft.com/en-us/library/bb759784(VS.85).aspx |
Re: Probleme mit Application.Terminate; ...
Also ich versteh das immer noch nicht ganz!
Ich mach das jetzt mit:
Delphi-Quellcode:
Aber das Handle ist immer noch dabei! Er macht jetzt Zwar mein InstallationsMenü zu Ohne dabei das Programm1.exe zu schließen. Jedoch wenn ich dann das Programm1.exe schließe ist es immer noch unter Prozesse (im Task-Manager da).
ShellExecute(Handle, nil,'Programm1.exe', nil, nil, SW_SHOW);
Application.Minimize; Application.Terminate; Also schließt er das Programm nicht komplett. :?: :?: :?: |
Re: Probleme mit Application.Terminate; ...
Hallo,
wenn ich dich richtig verstehe, willst Du mehrere Programme installieren und danach das Programm beenden. Mach eine Funktion aus Checkinstallationen; und wenn erfolgreich beendest Du es dann ganz normal und schiesse es nicht einfach ab. |
Re: Probleme mit Application.Terminate; ...
Wie soll ich das ganz normal beenden?
Application.Terminate ist doch beende das Programm, oder etwa nicht? Ich kann es ja ganz einfach beenden in dem ich oben rechts auf das rot hinterlegte X drücke. Aber ich will halt noch das wenn man alles installiert hat, das man dann auf Programm ausführen klickt und er startet das Programm und schließt dabei das InstallationsMenü. function Checkinstalltionen habe auch schon. Ich bin halt der Delphi-Sprache nicht mächtig, also nicht zu 100%. |
Re: Probleme mit Application.Terminate; ...
Ein Close der MainForm wäre zumindest nicht so rüde :mrgreen:
|
Re: Probleme mit Application.Terminate; ...
Application.Terminate hat gegenüber einem Close der Mainform keine "Nachteile".
Du solltest als Handle vielleicht 0 übergeben. |
Re: Probleme mit Application.Terminate; ...
Moin Sirius,
Zitat:
Bei Application.Terminate werden, z.B., OnClose und OnCloseQuery nicht ausgeführt. |
Re: Probleme mit Application.Terminate; ...
Hallo ich hab da ein Problem!!
Ich hoffe ihr könnt mir dabei helfen. Ich möchte einen IQ-Test machen, dabei möchte ich mehrere Formblätter benutzen. Wenn ich bei Form1 auf den Button klicke, dann kommt zuerst ein showmessage. Wenn ich diese dann mit ok betätige öffnet sich ein zweites Formblatt. Und jetzt zu dem Problem: wenn ich dann das Programm schließen möchte dann kann ich es nicht komplett schließen, da ich das Form1 Blatt mit visible:=false unsichtbar gemacht habe. Wie kann ich es jetzt hinkriegen, dass das erste Formblatt mit betätigen des Buttons vernichtet wird, sodass ich das Programm komplett schließen kann. Ich würde mich sehr über eure Lösungen freuen. Danke schon im voraus MfG Daniel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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-2025 by Thomas Breitkreuz