Kako smo prošli put napravili asocijaciju fileova programu koji će otvarati i učitavati se u određenu aplikaciju, sada želimo da se svi ti profili učitaju u postojećem prozoru. Prvo treba odredititi initialization glavnog prozora (Delphi):
Privatne promenljive forme
mHandle: THandle;
PrevWindow : HWND;
S : string;
CData : TCopyDataStruct;
initialization
mHandle := CreateMutex(nil, true, 'MySimpleApp');
if (GetLastError = Error_Already_Exists) then
begin
PrevWindow:=FindWindow('TfrmMyForm', nil);
if IsWindow(PrevWindow) then
begin
SendMessage(PrevWindow, WM_SYSCOMMAND, SC_RESTORE, 0);
BringWindowToTop(PrevWindow);
SetForegroundWindow(PrevWindow);
if FileExists(ParamStr(1)) then
begin
S:=ParamStr(1);
CData.dwData:=0;
CData.lpData:=PChar(S);
CData.cbData:=1+Length(S);
SendMessage(PrevWindow, WM_COPYDATA, 0, DWORD(@CData) );
end;
end;
// ShowMessage(' Already running! ');
halt;
end;
Tako saljemo poruku. A potruka se prima u metodi:
procedure TfrmOnlineMonitor.ReceiveData_Handler(var msg: TWMCopyData);
begin
case MessageDlg('Do you want to save current profile:'+PChar(ProfilePath)+' before loading new profile: '+PChar(msg.CopyDataStruct.lpData), mtConfirmation, [mbYes,mbNo,mbCancel], 0) of
mrYes:
begin
SaveXML(PChar(ProfilePath));
LoadXML(PChar(msg.CopyDataStruct.lpData));
end;
mrNo:
LoadXML(PChar(msg.CopyDataStruct.lpData));
end;
end;
Nikola Milošević




