Текущий архив: 2006.03.05;
Скачать: CL | DM;
Вниз
MDI приложение Найти похожие ветки
← →
ZeFiR © (2006-02-12 13:44) [0]Привет, Мастера!
делаю сабж(текстовый редактор)... Нужно, чтоб при открытии файла запускалась не еще один екзе, а MDIChild с этим же файлом в уже запущеной проге.
← →
tesseract © (2006-02-12 14:53) [1]Делаешь при старте объект синхронизации. Например мютекс.
И добавляешь обработку своего сообщения.
Если он уже существует то посылаешь уже открытому exe сообщение с именем файла который нужно открыть.
← →
vovnuke © (2006-02-12 14:58) [2]А в чем вопрос?
← →
ZeFiR © (2006-02-12 16:23) [3]
> tesseract © (12.02.06 14:53) [1]
А можна пример раз меня в конференцию для начинающих перенесли?
← →
tesseract © (2006-02-14 10:30) [4]http://www.interface.ru/borland/d5_3prraz1.htm
немного неодобно - через Clipboard зато очень просто :-)
← →
Loginov Dmitry © (2006-02-14 14:07) [5]
ParamStr()
← →
аматор © (2006-02-14 17:39) [6]Привет...
ParamStr() - эт когда запустил, а если прога уже работает :) ?
Простенький совет всем начинающим: "http://delphiworld.narod.ru/" зайдите по этой ссылке, скачайте прогу, и начните читать........
И большинство вопросов отпадут!
← →
Loginov Dmitry © (2006-02-14 18:54) [7]
> ParamStr() - эт когда запустил, а если прога уже работает
> :) ?
Проглядел, извеняюсь :)
Можно так, например:
program Project1;
uses
Windows, Messages;
var
H: THandle;
H := FindWindow("Имя класса", "Имя окна");
if H <> 0 then
begin
PostMessage(H, WM_USER, PChar(ParamStr(1)), 0);
Halt(0);
end;
> Простенький совет всем начинающим: "http://delphiworld.narod.
> ru/" зайдите по этой ссылке, скачайте прогу, и начните читать.
> .......
> И большинство вопросов отпадут!
Ну если все будут юзать Кулибу, DW и пр. то сюда и постить-то будет некому :))
← →
Leonid Troyanovsky © (2006-02-14 19:06) [8]
> Loginov Dmitry © (14.02.06 18:54) [7]
> Можно так, например:
..
> PostMessage(H, WM_USER, PChar(ParamStr(1)), 0);
Так - нельзя, т.е., бестолку ParamStr(1).
Обмениваться строками положено через SendMessage(.., WM_COPYDATA)
--
Regards, LVT.
← →
Loginov Dmitry © (2006-02-15 11:10) [9]
> Так - нельзя, т.е., бестолку ParamStr(1).
Да, вы правы, действительно ParamStr(0) можно, а ParamStr(1) - почему-то нельзя.
Следующий код вполне рабочий:
program Project1;
uses
Windows, Messages,
Forms,
Unit1 in "Unit1.pas" {Form1};
{$R *.res}
var
H: THandle;
S: string;
begin
S := ParamStr(0);
//S := ParamStr(1); // НЕ РАБОТАЕТ ДАЖЕ ПРИ НАЛИЧИЕ ПАРАМЕТРОВ
H := FindWindow(nil, "Имя окна");
if H <> 0 then
begin
SendMessage(H, WM_USER, Integer(PChar(S)), 0);
Halt;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit1;
..............
procedure HookWMUser(var Msg: TMessage); message WM_USER;
........
procedure TForm1.HookWMUser(var Msg: TMessage);
begin
Memo1.Lines.Add(PChar(Msg.WParam))
end;
← →
Leonid Troyanovsky © (2006-02-15 11:22) [10]
> Loginov Dmitry © (15.02.06 11:10) [9]
> Да, вы правы, действительно ParamStr(0) можно, а ParamStr(1)
> - почему-то нельзя.
Неважно, какую строку - все равно, нельзя.
В разных приложениях - разные адресные пространства,
поэтому, то, что имеет смысл в одном - PChar(s) в другом
может указывать на что-то совсем другое.
Кроме того, PostMessage (в отличии от SendMessage) не
дожидается того, что другой поток прочитает это значение.
Использование же SendMessage(.., WM_COPYDATA..) основано
на другом механизме, который гарантирует правильную посылку
данных через границы процесса.
Похожими свойствами обладают еще некоторые сообщения
(f.e., WM_GETTEXT), но никак не WM_USER.
--
Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2006.03.05;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c