![]() |
Programm nach Parameterwechsel beenden und neu starten
Hallo Leute,
damit ich mir nicht immer meine Datenbank-Dateien zur Schnecke mache, wenn mal wieder etwas beim Testen anders funktioniert als wie ich mir das gedacht hatte, habe ich ein Verzeichnis \MyProg\Daten und ein Verzeichnis \MyProg\Daten_für_Test. Wenn ich zwischen beiden wechseln will, clicke ich auf einen Button, der in meiner INI-Datei das Datenverzeichnis ändert und beende meine Anwendung (Application.Terminate). Jetzt muß ich mein Programm manuell neu starten. Funktioniert prima, aber ich hätte es gern automatisch, d.h. Programm beendet sich selbst und startet sofort mit den geänderten Werten neu. Weiß jemand, ob das geht und wenn ja, wie?? mfg eddy |
Moin Eddy,
nur so eine Idee: Jedes Programm kann das jeweils andere starten, und sich dann beenden. In der Projektdatei, vor Application.Run, wird dann geprüft, ob das jeweils andere Programm noch läuft, und solange gewartet, bis diese nicht mehr der Fall ist. Am sichersten wohl mit einem Timeout, falls Du mal beide von "ausserhalb" startest. Du müsstest Dir halt nur noch etwas einfallen lassen, woran Du die verschiedenen Versionen auseinanderhalten, bzw. womit Du sie finden kannst (z.B. bestimmte Caption). |
Hi,
setze erfolgreich diese von mir entwickelte Variante ein
Delphi-Quellcode:
[Edit=Sakura]Delphi-Tags gesetzt[/Edit]
(* Schließt alle offenen Datenbanken*)
procedure closealldatabase; var i:integer; begin if session.databasecount > 0 then for i:=0 to Session.DatabaseCount-1 do Session.Databases[i].Close; end; function startwinproc(const value:String;param:String;Mode: boolean ):hwnd; type TfileName = array [0..128] of char; {Für Windows Aufrufkonvention} pFileName = ^TfileName; {Zeiger auf Char Nullterminiert bereitstellen} varszbuffer:Tfilename; {ZeigerVariable für das Array} czbuffer:Tfilename; {ZeigerVariable für das Array} pBuffer:pFilename; cBuffer:pFilename; {Zeiger auf den Dateinamen} begin result:=0; if mode and not FileExists(value) then showmessage(format( 'Laden des externen Programms %s fehlgeschlagen.',[value])); pbuffer:=@szbuffer; {Puffer zuweisen} cBuffer:=@czBuffer; strPcopy(pbuffer^,value); {Nulltermierter String wandeln} strPcopy(cbuffer^,Param); {Nulltermierter String wandeln} result:=ShellExecute(Application.Handle,PChar('open'),szbuffer,czBuffer,nil,SW_NORMAL); end; procedure Restartprogram; var param:^String; begin new(param); closealldatabase; // Siehe Funktion oben (* GGF Parameter mit auf den Weg geben sonst mit '' vorbelegen!*) param^:=''; // für Kommandzeile Startwinproc(paramstr(0),Param^,true) ;// Siehe Funktion oben dispose(param); application.terminate; end; |
Hallo praktiker,
danke für den Quelltext. Da werd' ich wohl ein bischen Zeit zum Probieren investieren müssen!! mfg eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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