Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MDI приложение [D7, WinXP]


ZeFiR ©   (2006-02-12 13:44:00) 

Привет, Мастера!
делаю сабж(текстовый редактор)... Нужно, чтоб при открытии файла запускалась не еще один екзе, а MDIChild с этим же файлом в уже запущеной проге.


Leonid Troyanovsky   (2006-02-15 11:22:00) [1]


> 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.


Loginov Dmitry   (2006-02-15 11:10:00) [2]


> Так - нельзя, т.е., бестолку 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-14 19:06:00) [3]


> 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-14 18:54:00) [4]


> 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 и пр. то сюда и постить-то будет некому :))


аматор   (2006-02-14 17:39:00) [5]

Привет...
ParamStr() - эт когда запустил,  а если прога уже работает :) ?

Простенький совет всем начинающим: " http://delphiworld.narod.ru/" зайдите по этой ссылке, скачайте прогу, и начните читать........
И большинство вопросов отпадут!


Loginov Dmitry   (2006-02-14 14:07:00) [6]

ParamStr()


tesseract   (2006-02-14 10:30:00) [7]

http://www.interface.ru/borland/d5_3prraz1.htm

немного неодобно - через Clipboard зато очень просто :-)


ZeFiR   (2006-02-12 16:23:00) [8]


> tesseract ©   (12.02.06 14:53) [1]

А можна пример раз меня в конференцию для начинающих перенесли?


vovnuke   (2006-02-12 14:58:00) [9]

А в чем вопрос?


tesseract   (2006-02-12 14:53:00) [10]

Делаешь при старте объект синхронизации. Например мютекс.
И добавляешь обработку своего сообщения.
Если он уже существует то посылаешь уже открытому exe сообщение с именем файла который нужно открыть.


Наверх

Титульная страница Поиск, карта сайта Написать письмо