Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.05 c
1-1130440257
Дмитрий_05
2005-10-27 23:10
2005.11.20
Почему не запускается txt-файл из ShwllListView?


14-1130604438
Arazel
2005-10-29 20:47
2005.11.20
Книга Oracle и DELPHI, Хочу купить книгу


14-1130462615
Джо
2005-10-28 05:23
2005.11.20
Ох, нелегкая это работа...


14-1130421767
ПЛОВ
2005-10-27 18:02
2005.11.20
Странная ситуация с материнкой


2-1130774205
Leech
2005-10-31 18:56
2005.11.20
OnMouse...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский