|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как обработать отправленное сообщение окну
Как обработать отправленное сообщение окну. И как правильно послать:
Код:
SendMessage(Wnd, 0, 0, 0); |
#2
|
||||
|
||||
Пример
Вот статья из DelphiWorld:
Код:
const MY_MESSAGE = WM_USER + 4242; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); // Handler that receive the Message procedure MessageReceiver(var msg: TMessage); message MY_MESSAGE; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var txt: string; begin txt := 'Hello World'; SendMessage(Form1.Handle, MY_MESSAGE, 0, DWORD(PChar(txt))); end; // To receive this custom Message that is addressed to form1.handle // you need a message handler. procedure TForm1.MessageReceiver(var msg: TMessage); var txt: PChar; begin txt := PChar(msg.lParam); msg.Result := 1; ShowMessage(txt); end; end. Код:
var wnd:hwnd; begin Wnd := FindWindow(nil,'Form2'); txt := 'Hello World'; SendMessage(wnd, MY_MESSAGE, 0, DWORD(PChar(txt))); делаю через Код:
procedure TForm1.MessageReceiver(var msg: TMessage); |
#3
|
||||
|
||||
Так
Идентификатор второй формы можно и не искать, это же один проект, можно заменить некоторые типы, чтоб компилятор не ругался...
Похоже верно. Вобщем, вот пример: Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#4
|
||||
|
||||
Цитата:
Это не один проект, а совершенно другая программа. |
#5
|
||||
|
||||
И ещё вопрос
const MY_MESSAGE = WM_USER + 4242;
- Что это за константа и для чего. Вопрос о передаче сообщения другой программе остается в силе. |
#6
|
||||
|
||||
думал, что посылаешь сообщение другой форме из того же проекта...
Но если нет, то идентификатор окна надо искать, как ты и сделал... Код:
const MY_MESSAGE = WM_USER + 4242; меньшие значения брать не стоит, т.к они используются самой Windows (впрочем так можно обрабатывать нестандартные сообщения, напр: WM_HELP посылается окну, когда нажимается клавиша F1). Главное указать в другой программе ту же константу. Велик и могуч наш Object Pascal ! ICQ: 357-591-887 Последний раз редактировалось Rokuell, 30.12.2007 в 22:30. |
#7
|
||||
|
||||
А зачем туже константу
А зачем туже константу, если 2 программа только принимает сообщение, а не отправляет. Или я че-то не догоняю
И если можно, напиши пример, а то чето я пробовал, но сообщение не приходит |
#8
|
||||
|
||||
"зачем туже константу" - а как иначе тогда в принимающей программе разобраться, какое сообщение пришло? Представь: Ты отправляешь два сообщения, в параметрах одного (напр в lParam) будет ссылка на текст в памяти ( Integer(PAnsiString(...)) ) а в другом сообщении будет передаваться просто число, и как ты их различишь? Поэтому в каждом сообщении должен присутствовать уникальный идентификатор этого сообщения, чтобы принимающая программа могла вызвать правильный обработчик!
PS: Кстати, передача строки таким образом (через сообщение) работает только в пределах одной программы (т.е её адресного пространства) поэтому для передачи текста можно использовать например FileMapping, пример того, что это такое в исходнике. Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#9
|
||||
|
||||
Спасибо
Спасибо за пример !
С Наступающим Новым Годом !!! |
#10
|
||||
|
||||
ВОЗМОЖНО НОВОЕ !!!!
Я вчера заметил, что если в uses добавлен Dialogs, то размер файла увеличивается на ~350!!!Kb. Вот так
|