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

Вниз

MDI-прога и запуск зарегенных за ней файлов   Найти похожие ветки 

 
Bonjovy   (2005-09-19 08:44) [0]

Есть MDI-прога (редактор). Открывает в себе несколько дочерних окон редактируемых файлов. Привязал в системе за ней определённый тип файлов. При FormCreate прога проверяет, запущена ли она уже (ищет своё окно), чтобы не плодить себя.
При запуске зарегенных файлов в проге проверяется ParamStr(1), и если енто свой тип файлов, то открывает его на редактирование. Но это работает только для первого запуска. При щелчке на somefile1.my_type стартует моя прога и в ней открывается этот файл. Но при щелчке на somefile2.my_type второй файл уже не открывается, т.к. в FormCreate определяется, что прога уже запущена и закрывает себя (вторую копию проги). Каким макаром передавать в первый экземпляр проги имя somefile2.my_type из второго экземпляра проги, чтобы в ней было уже два (и т.д.) открытых файла (ну типа как в Winworde)? Очень буду признателен. Спасибо.


 
Котик Б   (2005-09-19 09:14) [1]

Слать первой форме сообщение WM_COPYDATA


 
Bonjovy   (2005-09-19 09:45) [2]

Ну тогда и обработчик надо переопределить? А чё в нём писать?
Я сделал  так":
в FormCreate: Application.OnMessage := AppMessage;
+
procedure TTestEditorForm.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
 if Msg.message = WM_USER+1 then
 begin
   Open(StrPas(PChar(Msg.lParam)));
   Handled := True;
   beep;
 end;
end;

В FormCreate пишу: SendMessage(Wnd_первой_проги, WM_USER+1, 0, DWord(@s) ) - не работает. В чём дело?


 
Defunct ©   (2005-09-19 10:09) [3]

Если с определением значения "Wnd_первой_проги" у тебя проблем не возникает. тогда внимательтно перечитай [1].

WM_COPYDATA...  а не WM_USER+1...


 
Bonjovy   (2005-09-19 10:54) [4]

Братцы, ну примерчик киньте, чего-то не догоняю.
proc FormCreate...;
var
...
 st: string;
 MyData: PCOPYDATASTRUCT;
begin
         st:=ParamStr(1);
         MyData.dwData:=0;
         MyData.cbData:=Length(st);
         MyData.lpData:=@st;
         SendMessage(Wnd_первой_проги, WM_COPYDATA, Handle, MyData);// тут материться на несовпадение типов, делаю DWORD(MyData) ошибка на стадии выполнения выскакивает.
...
end;
В обработчике [2] заменил WM_USER+1 yf WM_COPYDATA.
А может и обработчик не так я переопределил и не так его сделал?
Пожалуйста, живой примерчик киньте, а?


 
Котик Б   (2005-09-19 11:17) [5]


var
 wnd: HWND;
 cds: COPYDATASTRUCT;
begin
.........
 if (0 <> wnd)
 then begin
// Формируем буфер для пересылки
   cds.dwData := 0;
   cds.cbData := Length(ParamString);
   cds.lpData := PChar(ParamString);
   SendMessage(wnd, WM_COPYDATA, 0, LPARAM(@cds))
 end;
end;


 
Leonid Troyanovsky ©   (2005-09-19 11:49) [6]


> Bonjovy   (19.09.05 09:45) [2]

> в FormCreate: Application.OnMessage := AppMessage;
..
> В FormCreate пишу: SendMessage


Во-первых, OnMessage обрабатывает то, что Post*Message.
Второе тебе уже объяснили.

--
Regards, LVT.


 
Bonjovy   (2005-09-19 12:01) [7]

Большущий всем рахмет, а также огромное спасибо, всё заработало.
Особый привет Котику Б. :)


 
Bonjovy   (2005-09-19 13:05) [8]

В принципе всё работает, но только если я в SendMessage(Wnd, WM_COPYDATA, 0, LPARAM(@cds)) ставлю Wnd:=$FFFF. А если реальный Wnd главного окна первого экземпляра, то не работает. Стопудово уверен на счёт правильности Wnd, т.к. проверял, да и ShowWindow(Wnd, SW_SHOWNORMAL) отрабатывает - первый экземпляр раскрывается, если был свёрнут. Но мессага не всасывается через этот Wnd. В принципе, не суть важно, и так пашет, но охота разобраться, в чём здесь дело.
Котик Б., на тебя надежда. :)


 
Leonid Troyanovsky ©   (2005-09-19 15:02) [9]


> Bonjovy   (19.09.05 13:05) [8]
> В принципе всё работает, но только если я в SendMessage(Wnd,
>  WM_COPYDATA, 0, LPARAM(@cds)) ставлю Wnd:=$FFFF. А если
> реальный Wnd главного окна первого экземпляра, то не работает.
>  Стопудово уверен на счёт правильности Wnd, т.к.


Два первых утверждения стопудово доказывают неправильность Wnd.

--
Regards, LVT.


 
Bonjovy   (2005-09-19 16:26) [10]

Лёня, ты конечно монстр, но давай по делу. При старте первого экземпляра в FormCreate мне ShowMessage(IntToStr(Form.Handle)) пишет хендл. Когда второй экземпляр перебирает окна, то то, что он находит, я сравниваю с первым - в копьё совпадают! А не работает этот Wnd в вызове SendMessage хоть тресни! Чё за лажа? Может знаешь? Thanks.


 
Leonid Troyanovsky ©   (2005-09-19 17:11) [11]


> Bonjovy   (19.09.05 16:26) [10]
> экземпляра в FormCreate мне ShowMessage(IntToStr(Form.Handle))
> пишет хендл. Когда второй экземпляр перебирает окна, то
> то, что он находит, я сравниваю с первым - в копьё совпадают!


Давай по существу: где прописан обработчик WM_COPYDATA?

--
Regards, LVT.


 
Bonjovy   (2005-09-19 17:14) [12]

УУффф, надыбал лажу. Девствительно, Wnd был не окна, а Application-a.
Спасибо всем, кто принимал в дискуссии участие. Оперативный форум, ничего не скажешь! И последняя ложечка мёда - в [5] надо вместо cds.cbData := Length(ParamString); писать cds.cbData := Length(ParamString)+1;, иначе ни хрена не работает. Век живи - век учись!



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

Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
14-1126854553
boriskb
2005-09-16 11:09
2005.10.09
Ищутся свадебные тосты


2-1125083133
dimaa
2005-08-26 23:05
2005.10.09
bold в RichEdit-e


3-1125302849
yurrius
2005-08-29 12:07
2005.10.09
Login к Firebird 1.0


4-1123689747
Bios_
2005-08-10 20:02
2005.10.09
Обои


3-1124692952
Max4
2005-08-22 10:42
2005.10.09
кавычки в запросе.





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