Liebe Delphientwickler, ich brauch mal eure Hilfe,
ich führe bei meinen Zehnern grad ein kleines Softwareprojekt durch, in dessen Rahmen die Schüler eine Anwendung als Vorstellung unserer Schule schreiben sollen. Eine Schülergruppe hat es sich in den Kopf gesetzt ein Hauptprogramm zu erstellen und von dort aus Teilprogramme zu starten. Die Einbindung will diese Gruppe jedoch nicht per Show/ ShowModal o.ä. machen, sondern die EXE-Datei jeweils per ShellExecute (oder WinExec) starten. Sie schließen dabei nach dem Öffnen des Teilprogramms das Hauptprogramm und umgekehrt.
Nun tritt folgendes Phänomen auf:
- Startet man vom Hauptprogramm aus Teilprogramm 1, schließt sich das Hauptprogramm (gewollt). Starte ich nun vom Teilprogramm 1 aus das Hauptprogramm schließt sich einfach Teilprogramm 1 und das Hauptprogramm startet nicht.
- Startet man vom Teilprogramm aus das Hauptprogramm, schließt sich das Teilprogramm (gewollt). Starte ich nun vom Hauptprogramm aus das Teilprogramm, schließt sich einfach das Hauptprogramm und das Teilprogramm öffnet sich nicht.
Meine Fragen an euch:
- Gibt es irgendetwas das beim Starten via ShellExecute oder WinExec einen Besitzer o.ä. deklariert und somit verhindert, dass beim wechselseitigen Aufruf der ursprüngliche Besitzer (das zu erst gestartete Programm) ausgeführt wird?
- Gibt es eine Möglichkeit unter Nutzung von ShellExecute oder WinExec diesen wechselseitigen Start zu realisieren oder müssen die Schüler auf die Einbindung via Show/ShowModal zurückgreifen?
Code-Ausschnitt aus Hauptprogramm:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin rueckmeldung := ShellExecute(0, 'open', 'Keller\Project2.exe', nil, nil, SW_NORMAL); if rueckmeldung > 32 then Label3.Caption := 'Das Starten war erfolgreich.' else Label3.Caption := 'Da gab es wohl ein Problem beim Starten.'; close; end; |
Code-Ausschnitt aus Teilprogramm:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin rueckmeldung := ShellExecute(0, 'open', '..\Project1.exe', nil, nil, SW_NORMAL); if rueckmeldung > 32 then Label1.Caption := 'Das Starten war erfolgreich.' else Label1.Caption := 'Da gab es wohl ein Problem beim Starten.'; close; end; |
Vielen Dank im Voraus für die Antworten.