Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

MDI   Найти похожие ветки 

 
Erl   (2005-10-29 15:23) [0]

Добрый день.
Помошите пож. решить проблему.
Имеется приложение.
Оно прекрасно создает MDI детей, можно сохранять MDI  в файл, читать его из файла. И, если приложение сущ. (проверка семафоров), то не нужно создавать его 2 копию, а загружать файл в сущ. приложение.
Вот как осуществить код создания MDICHILD в сущ. другом приложении?
Спасибо.


 
Zeqfreed ©   (2005-10-29 15:28) [1]

Erl   (29.10.05 15:23)
Можно обрабатывать пользовательское сообщение и, если один экземпляр уже запущен, уведомлять его о необходимости загрузки файла посылкой этого сообщения. Передавать имя файла можно через файлы, отображенные в память.


 
Zeqfreed ©   (2005-10-29 16:53) [2]

Zeqfreed ©   (29.10.05 15:28) [1]
Написал небольшой пример, вроде работает :)

program mafm;

uses
 Windows,
 Forms,
 main in "main.pas" {Form1};

{$R *.res}

const
 _MutexName = "152E3C3954A541B0AAD47B7E7AF6246E";

var
 MutexObj : Cardinal;

begin
 MutexObj := CreateMutex(nil, false, _MutexName);
 if (GetLastError() = ERROR_ALREADY_EXISTS) then begin
  ActivatePreviousInstance();
  Exit;
 end;

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;

 ReleaseMutex(MutexObj);
end.


* * *

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

const
 _MapFileName = "SharedFileName";
 _MessageName = "SharedOpenFileName";

type
 TForm1 = class(TForm)
   Memo1: TMemo;
 private
   procedure WndProc(var Msg : TMessage); override;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 WM_OPENSHAREDFILENAME : Integer;

procedure ActivatePreviousInstance();  

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Msg : TMessage);
var
MapHandle : THandle;
MappedData : Pointer;

Data : PChar;
begin
if (Msg.Msg = WM_OPENSHAREDFILENAME) then begin
 MapHandle := OpenFileMapping(PAGE_READONLY, false, _MapFileName);
 MappedData := MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, Msg.WParam);
 
 if (MappedData = nil) then begin
  CloseHandle(MapHandle);
  RaiseLastWin32Error;
 end else begin
  Data := PChar(MappedData);
  Memo1.Lines.LoadFromFile(Data);

  SetForegroundWindow(Form1.Handle);

  UnmapViewOfFile(MappedData);
  CloseHandle(MapHandle);
 end;
end else
 inherited WndProc(Msg);
end;

procedure ShareData(const Str : PChar);
var
size : Integer;
MapHandle : THandle;
MappedData : Pointer;
Data : PChar;
begin
size := StrLen(Str);

MapHandle := CreateFileMapping(DWORD(-1), nil, PAGE_READWRITE, 0, size, _MapFileName);
if (MapHandle = 0) then RaiseLastWin32Error;

MappedData := MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, size);

if (MappedData = nil) then
 RaiseLastWin32Error()
else begin
 StrCopy(PChar(MappedData), Str);
end;

SendMessage(HWND_BROADCAST, WM_OPENSHAREDFILENAME, size, 0);
end;

procedure ActivatePreviousInstance();
begin
if (ParamCount > 0) then
ShareData(PChar(ParamStr(1)));
end;

initialization
WM_OPENSHAREDFILENAME := RegisterWindowMessage(_MessageName);

end.



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.051 c
2-1131025415
Eksell
2005-11-03 16:43
2005.11.20
Kak podshitati v faile kolichestvo naprimer simvolov #


9-1118375385
Anonim
2005-06-10 07:49
2005.11.20
Как сохранить нарисованное OpenGL ем в Bmp-файл?


14-1130224765
Vlad Oshin
2005-10-25 11:19
2005.11.20
Упаковка товара. Догоняем :)


14-1129951854
alexmix
2005-10-22 07:30
2005.11.20
Нужен компонент для мониторинга


2-1130664807
John Doe
2005-10-30 12:33
2005.11.20
Перевод из String в дату