Wenn du die JCL einsetzen kannst könnte ich Dir eine Lösung zeigen.
Die JCL enthält die Klasse TJclAppInstances; mit der kann man Botschaften zwischen allen Instanzen austauschen.
Intern werden über Memory-Maped-Files die Fenster Handles ausgetauscht.
Das sieht dann so aus:
Delphi-Quellcode:
unit ...,JclAppInst;
const
AI_SHUTDOWN_LPARAM = 446;
// LParam-Wert, der beim Senden der Shutdown-Message benützt wird
class procedure TMainForm.SendShutdownMessage;
// Meldung an alle Instanzen schicken
begin
JclAppInstances.UserNotify(AI_SHUTDOWN_LPARAM);
end;
procedure TMainForm.HandleOnMessage(
var Msg: TMsg;
var Handled: Boolean);
// Eventhandler für Application.OnMessage
begin
if Msg.
message = JclAppInstances.MessageID
then
begin
if (Msg.wParam=AI_USERMSG)
and (Msg.lParam=AI_SHUTDOWN_LPARAM)
then
ShowMessage('
Bitte speichern Sie Ihre Änderungen und beenden Sie dieses Programm!');
end;
end;