Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erstanwendung nach Start der Zweitanwendung schließen (https://www.delphipraxis.net/55782-erstanwendung-nach-start-der-zweitanwendung-schliessen.html)

Avax2k 26. Okt 2005 23:19


Erstanwendung nach Start der Zweitanwendung schließen
 
Ich möchte, dass meine Erstanwendung nach dem Aufruf der Zweitanwendung, sich automatisch schließt
den befehl zum Laden der zweitanwendung habe ich auf einen Button gelegt der wie folgt aussieht:

Zitat:

procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text = Edit2.Text then
winexec(PCHar('WINVER.EXE'), SW_SHOWNORMAL)
else Label1.Caption := 'klappt nicht';
end;
habe folgendes versucht:
Zitat:

winexec(PChar('WINVER.EXE'), SW_SHWONORMAL) AND Form1.Close
else...
aber so wird der else Befehl gar nicht mehr akzeptiert.
Wäre super wenn jemand von Euch eine Lösung parat hätte gleich mit Quellcode.

leddl 26. Okt 2005 23:36

Re: Erstanwendung nach Start der Zweitanwendung schließen
 
Also ein AND macht deinen Befehl ja nur zum Booleschen Ausruck (Wahr/Falsch).
Das macht ja nun gar keinen Sinn. Du mußt einfach die Befehle, die du im ersen Fall ausführen willst, in Begin..End setzen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text = Edit2.Text then
  Begin
    winexec(PCHar('WINVER.EXE'), SW_SHOWNORMAL) ;
    Form1.Close;
  End
  else Label1.Caption := 'klappt nicht';
end;

Avax2k 26. Okt 2005 23:46

Re: Erstanwendung nach Start der Zweitanwendung schließen
 
dankeschön für die schnelle und prompte Hilfe.
Manchmal übersieht man auch die einfachsten Dinge :wall:

himitsu 27. Okt 2005 01:09

Re: Erstanwendung nach Start der Zweitanwendung schließen
 
Und das mit dem WinExec ...

schau mal bitte was deine OH dazu sagt ... verwende statt dessen doch bitte ShellExecute.


Außerdem bietet ShellExecute einen netten Rückgabewert, welchen man eventuell auch noch mit auswerten könnte ;)

So in dieser Art:
Delphi-Quellcode:
if (Edit1.Text = Edit2.Text) and (ShellExecute(...) <> 0) then
  Form1.Close
else
  Label1.Caption := 'klappt nicht';
Genaueres findest du z.B. in der DP Hier im Forum suchenShellExecute

Avax2k 27. Okt 2005 03:50

Re: Erstanwendung nach Start der Zweitanwendung schließen
 
danke für die Info, habe auch ShellExecute umgestellt, jedoch auch gelesen, dass man nun bei EXE-Files den CreateProcess Befehl verwenden soll. Desweiteren hat ShellExecute einen großen Nachteil, wie ich festgestellt habe. Mit dem WinExec kann man die Dateiendung beliebig wählen und bei der Initialisierung erkennt das System automatisch was es für eine Datei ist und führt diese aus. Benennt man nun die Date nicht *.exe sondern *.old (oder wie auch immer) so führt der Aufruf durch ShellExecute nicht zum Aufruf der Datei..es passiert gar nichts. Somit scheint doch WinExec die bessere Wahl zu sein :gruebel:

himitsu 27. Okt 2005 03:59

Re: Erstanwendung nach Start der Zweitanwendung schließen
 
Also, das Windows SDK meint dazu
Zitat:

Zitat von Win32 SDK
This function is provided for compatibility with earlier versions of Windows. For Win32-based applications, use the CreateProcess function.

Win32-based applications should use the CreateProcess function rather than this function. The WinExec function exists in Win32 to provide compatibility with earlier versions of Windows. For more information about how the WinExec function is implemented, see the Remarks section of the LoadModule function.

Und bei ShellExecute steht allerdings nicht, daß man für Anwendungen CreateProcess verwenden soll ^^

CreateProcess lät nur Anwendungen und ShellExecute alle Dateien.

Im Endefekt bleibt es wohl dir überlassen was du verwendest ... nur halt kein WinExec mehr ;)


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