Главная страница
    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.04 c
14-1130184033
Piter
2005-10-25 00:00
2005.11.20
McAfee VirusScan


11-1110221256
Shanker
2005-03-07 21:47
2005.11.20
Проблемы с установкой Socket


2-1131015442
|imp|
2005-11-03 13:57
2005.11.20
Как получить список процессов?


2-1130418128
kyn66
2005-10-27 17:02
2005.11.20
Как удалить компоненты одним махом?


14-1130307967
stone
2005-10-26 10:26
2005.11.20
Всех москвичей с первым снегом!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский