![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Идентификатор второй формы можно и не искать, это же один проект, можно заменить некоторые типы, чтоб компилятор не ругался...
Похоже верно. Вобщем, вот пример: |
|
#4
|
||||
|
||||
|
Цитата:
Это не один проект, а совершенно другая программа. |
|
#5
|
||||
|
||||
|
const MY_MESSAGE = WM_USER + 4242;
- Что это за константа и для чего. Вопрос о передаче сообщения другой программе остается в силе. ![]() |
|
#6
|
||||
|
||||
думал, что посылаешь сообщение другой форме из того же проекта...Но если нет, то идентификатор окна надо искать, как ты и сделал... Код:
const MY_MESSAGE = WM_USER + 4242; меньшие значения брать не стоит, т.к они используются самой Windows (впрочем так можно обрабатывать нестандартные сообщения, напр: WM_HELP посылается окну, когда нажимается клавиша F1). Главное указать в другой программе ту же константу. Последний раз редактировалось Rokuell, 30.12.2007 в 22:30. |
|
#7
|
||||
|
||||
|
А зачем туже константу, если 2 программа только принимает сообщение, а не отправляет. Или я че-то не догоняю
И если можно, напиши пример, а то чето я пробовал, но сообщение не приходит ![]() |
|
#8
|
||||
|
||||
|
"зачем туже константу" - а как иначе тогда в принимающей программе разобраться, какое сообщение пришло? Представь: Ты отправляешь два сообщения, в параметрах одного (напр в lParam) будет ссылка на текст в памяти ( Integer(PAnsiString(...)) ) а в другом сообщении будет передаваться просто число, и как ты их различишь? Поэтому в каждом сообщении должен присутствовать уникальный идентификатор этого сообщения, чтобы принимающая программа могла вызвать правильный обработчик!
PS: Кстати, передача строки таким образом (через сообщение) работает только в пределах одной программы (т.е её адресного пространства) поэтому для передачи текста можно использовать например FileMapping, пример того, что это такое в исходнике. |
|
#9
|
||||
|
||||
Спасибо за пример !С Наступающим Новым Годом !!! ![]() |
|
#10
|
||||
|
||||
|
Я вчера заметил, что если в uses добавлен Dialogs, то размер файла увеличивается на
~350!!!Kb. Вот так ![]() |