Entwickler-Ecke
Sonstiges (Delphi) - Zwei Programme in einem zusammenfassen
daywalker0086 - Do 22.05.14 22:44
Titel: Zwei Programme in einem zusammenfassen
Moin Moin,
Ich habe eine Frage zur Vorgehensweise.
Ich habe ein erstes Programm geschrieben, anschließend ein zweites.
Nun möchte ich das zweite irgendwie in dem ersten integrieren und das Hauptformular der zweiten Anwendung über einen Button in der ersten Anwendung aufrufen.
Hintergrund der ganzen Sache: Am Anfang sollte ein Programm zum programmieren von Geräten programmiert werden. Später sollte ein Programm geschrieben werden mit welchem man die Geräte testen kann. Nun könnte ich einfach die Units des zweiten in das erste integrieren aber in Zukunft soll es Gerätespezifisch jeweils eine neue Testsoftware geben und ich will ungern immer das komplette Programm austauschen. Ich stelle mir das eher so vor, dass das Programm in einen Ordner nach den Unterprogrammen schaut und dann quasi dynamisch jeweils einen Button für das Programm anzeigt, quasi wie Apps auf dem Handy ;).
Wie kann man das am besten mit delphi umsetzen? noch kann ich beide Programme ohne Aufwand umstricken.
Habt ihr da Vorschläge?
Grüße Christian
ChrisCross - Fr 23.05.14 06:54
Hallo,
wenn ich dich richtig verstanden habe, nimm doch einfach die .exe Datei deiner Testsoftware und packe sie in einen Unterordner von deinem anderen Programm. Folgenden Code fügst du bei deinem Button ein:
ShellExecute(Application.Handle, 'open', PChar('Verzeichnis\Testsoftware.exe'), nil, nil, SW_NORMAL); und passt den Pfad an. Bei Buttonklick sollte sich das andere Programm öffnen.
rushifell - Fr 23.05.14 07:17
Hallo,
eine einfache Lösung wäre z.B. mit
CreateProcess.
Hier ein Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| function ExecAndWait(const FileName: string; const CmdShow: Integer): Longword; var zAppName: array[0..512] of Char; zCurDir: array[0..255] of Char; WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; AppIsRunning: DWORD; begin StrPCopy(zAppName, FileName); GetDir(0, WorkDir); StrPCopy(zCurDir, WorkDir); FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := CmdShow; if not CreateProcess(nil, zAppName, nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin while WaitForSingleObject(ProcessInfo.hProcess, 0) = WAIT_TIMEOUT do begin Application.ProcessMessages; Sleep(50); end;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; end; |
Es wird solange gewartet, bis Du die entsprechende Anwendung wieder schließt.
... oder einfach hier im Forum nach
CreateProcess suchen. ShellExecute sollte man zum Starten von exe-Dateien eigentlich nicht verwenden, auch wenn es funktioniert.
Eine weitere Möglichkeit wäre über eine Art Plugin System mit DLL's.
Hier mal ein Beispiel, wie man Formulare in DLL's nutzt.
http://www.michael-puff.de/Programmierung/Delphi/Code-Snippets/FormInDLL.shtml
Letzteres hab ich selbst jedoch noch nie ausprobiert.
daywalker0086 - Fr 23.05.14 09:16
Guten morgen und danke für die Anregungen.
Kann ich beim Create Prozess noch variablen übergeben?
Geht das nur über ParamStr oder auch anders? Kann man auch Variablen aus dem Unterprogramm an das Hauptprogramm übergeben?
rushifell - Fr 23.05.14 16:59
Ich selbst nutze zum Datenaustausch Memory Mapped Files (MMF). Damit kannst Du auch größere Datenmenge problemlos zwischen den Programmen austauschen. Einfach mal danach suchen. Das Erstellen, Lesen und Schreiben von MMF ist sehr einfach. Du musst nur darauf achten, dass nicht gleichzeitig ein Programm liest und das andere schreibt. Natürlich kannst Du auch die Variablen als Parameter übergeben (einfach an FileName dranhängen).
Viele Grüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!