Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2007, 19:04
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Как обработать отправленное сообщение окну

Как обработать отправленное сообщение окну. И как правильно послать:
Код:
SendMessage(Wnd, 0, 0, 0);
Как обработать сообщение ?, т.е. окну пришло сообщение и нужно сделать опреденные действия, но где обработчик ? Обьясните пожалуйста...
Ответить с цитированием
  #2  
Старый 30.12.2007, 21:04
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание Пример

Вот статья из 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.
Но между двумя формами не получается(пересылая сообщение 2 форме и находя её идентификатор с помощью:

Код:
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  
Старый 30.12.2007, 21:43
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Радость Так

Идентификатор второй формы можно и не искать, это же один проект, можно заменить некоторые типы, чтоб компилятор не ругался...
Похоже верно.
Вобщем, вот пример:
Вложения
Тип файла: zip Send Message.zip (4.1 Кбайт, 7 просмотров)
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #4  
Старый 30.12.2007, 22:05
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание

Цитата:
Сообщение от Rokuell
Идентификатор второй формы можно и не искать, это же один проект
.
Это не один проект, а совершенно другая программа.
Ответить с цитированием
  #5  
Старый 30.12.2007, 22:08
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос И ещё вопрос

const MY_MESSAGE = WM_USER + 4242;
- Что это за константа и для чего.
Вопрос о передаче сообщения другой программе остается в силе.
Ответить с цитированием
  #6  
Старый 30.12.2007, 22:27
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

думал, что посылаешь сообщение другой форме из того же проекта...
Но если нет, то идентификатор окна надо искать, как ты и сделал...
Код:
const MY_MESSAGE = WM_USER + 4242;
это идентификатор сообщения, обычно я беру WM_USER + 4000, и дальше(WM_USER + 4001 ...), однозначно определяет сообщение, т.е его номер.
меньшие значения брать не стоит, т.к они используются самой Windows (впрочем так можно обрабатывать нестандартные сообщения, напр: WM_HELP посылается окну, когда нажимается клавиша F1).
Главное указать в другой программе ту же константу.
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887

Последний раз редактировалось Rokuell, 30.12.2007 в 22:30.
Ответить с цитированием
  #7  
Старый 31.12.2007, 00:09
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос А зачем туже константу

А зачем туже константу, если 2 программа только принимает сообщение, а не отправляет. Или я че-то не догоняю
И если можно, напиши пример, а то чето я пробовал, но сообщение не приходит
Ответить с цитированием
  #8  
Старый 31.12.2007, 02:59
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Лампочка

"зачем туже константу" - а как иначе тогда в принимающей программе разобраться, какое сообщение пришло? Представь: Ты отправляешь два сообщения, в параметрах одного (напр в lParam) будет ссылка на текст в памяти ( Integer(PAnsiString(...)) ) а в другом сообщении будет передаваться просто число, и как ты их различишь? Поэтому в каждом сообщении должен присутствовать уникальный идентификатор этого сообщения, чтобы принимающая программа могла вызвать правильный обработчик!

PS: Кстати, передача строки таким образом (через сообщение) работает только в пределах одной программы (т.е её адресного пространства)
поэтому для передачи текста можно использовать например FileMapping, пример того, что это такое в исходнике.
Вложения
Тип файла: zip Send.zip (8.0 Кбайт, 10 просмотров)
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #9  
Старый 31.12.2007, 12:06
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Хорошо Спасибо

Спасибо за пример !
С Наступающим Новым Годом !!!
Ответить с цитированием
  #10  
Старый 31.12.2007, 12:18
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание ВОЗМОЖНО НОВОЕ !!!!

Я вчера заметил, что если в uses добавлен Dialogs, то размер файла увеличивается на ~350!!!Kb. Вот так
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter