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

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

PostMessage


АИК ©   (2008-02-22 08:59:00) 

Здорова всем
Сделал две программки, в одну разместил ListBox а в другой отправляю сообщения первому (с помощью PostMessage) в общем подскажите как сделать код чтобы форма первой отрабатывала входящие сообщения?


Leonid Troyanovsky   (2008-02-23 09:31:00) [1]


> АИК   (22.02.08 08:59)  

> подскажите как сделать код чтобы форма первой отрабатывала
> входящие сообщения?

http://groups.google.com/group/fido7.ru.delphi.chainik/msg/ca42e0565d4fea54

--
Regards, LVT.


Johnmen   (2008-02-22 14:08:00) [2]

...и легче им не становится. Вона {RASkov} ©  в запой ушёл...


Плохиш   (2008-02-22 13:48:00) [3]


> АИК   (22.02.08 10:37) [12]
> Опыты проводить для привавки знаний но если тебе станет
> от этого легчето я могу заменить Listbox на Memo или Edit

Хочешь "Опыты проводить" - проводи сам, пока что ты пытаешься заставить присутствующих проводить свои дебильные "опыты"...


{RASkov}   (2008-02-22 11:18:00) [4]

> [12] АИК   (22.02.08 10:37)

Шли сообщения в таком виде
SendMessage(H, Mes, Кому, Что);
где H   - приемник сообщения(пусть будет всегда форма)...
   Mes - тип сообщения, например - WM_USER+1
   Кому- Кому конкретно адресовано (например, если ограниченный и постоянный круг получателей, то можно организовать константами)
   Что - Собственно передаваемые данные.....

Пример:
const WM_MYMESS = WM_USER+1;
...............
type TSendCtrl = (scEditName, scEditParam, scMemo, scListBox, scRadioGrp);
.....
 public
   procedure MyMess(var Mes: TMessage); message WM_MYMESS;
.............
procedure TForm1.MyMess(var Mes: TMessage);
begin
 case TSendCtrl(Mes.WParam) of
  scEditName: Edit1.Text:=PChar(Mes.LParam);
  scEditParam: Edit2.Text:=PChar(Mes.LParam);
  scMemo: Memo1.Lines.Add(PChar(Mes.LParam));
  scListBox: ListBox1.Items.Add(PChar(Mes.LParam));
  scRadioGrp: RadioGroup1.ItemIndex:=Mes.LParam;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMessage(Handle, WM_MYMESS, ORD(scEditParam), Integer(Pchar('передаваемый текст, например')));
 SendMessage(Handle, WM_MYMESS, ORD(scRadioGrp), 5);
end;


Для упрощения сделал все в одном приложении... Для двух - нужно во втором объявить константы для улучшения читабельности кода...

ЗЫ: Только не нужно мой пример нигде использовать - это плохой пример. )Так... для наглядности....


Palladin   (2008-02-22 11:02:00) [5]

Пиши на русском, я нифига не понял чего ты сказал.


АИК   (2008-02-22 11:00:00) [6]


> Как выглядит твоя задача ?

На ваши вопроси отвичать чего показывает результат


Сергей М.   (2008-02-22 10:48:00) [7]


> АИК   (22.02.08 10:37) [12]


> Опыты проводить


Опыты проводить нужно после постановки задачи.

Как выглядит твоязадача ? Какую реакцию listbox'а ты ожидаешь увидеть при получении им асинхронного WM_CHAR-сообщения ?


АИК   (2008-02-22 10:37:00) [8]


> я тебя спрашиваю чего ты от listbox'а хочешь своими сообщениями?

Опыты проводить для привавки знаний но если тебе станет от этого легче то я могу заменить Listbox на Memo или Edit


Сергей М.   (2008-02-22 10:37:00) [9]


> АИК   (22.02.08 10:28) [10]


Ответь сначала на [9]


АИК   (2008-02-22 10:28:00) [10]


> Сергей М

Вроде SendMessage также может послать только один символ, но мне интересней другое к примеру если я расположи на другом окне несколько listbox'сов и в передаваемом ему сообшении буду указывать для какого именно листбокса оно указана мне всего лиш нужно это - как отработать входяшее сообшение будьто через PostMessage или SendMessage у окна приемника


Palladin   (2008-02-22 10:11:00) [11]

я тебя спрашиваю чего ты от listbox'а хочешь своими сообщениями?


Сергей М.   (2008-02-22 10:10:00) [12]

Посылай окну формы синхронное(SendMessage) сообщение WM_COPYDATA, в параметрах которого указывай всюпередаваемую строку и "координаты" конечного получателя твоего сообщения, например, имя целевого лисбокс-компонента.

По получении сообщения форма установит нужное св-во указанного в сообщении компонента в значение, равное строковому значению, переданному параметром  сообщения.


АИК   (2008-02-22 09:59:00) [13]


> и чего в результате получиться то должно?

Резльтат h равен 0 видимо  FindWindowex ненаховит ListBox1
Делаю иначе
h:= findwindow(nil,'Okno_Priemnika')
if h<>0 then  begin
   s:=Edit1.Text;
   For i:=1 to length(Edit1.Text) do
   PostMessage(h, WM_CHAR, Ord(S[i]), 0);
end;
Всё работает но сообшения получает окно формы и хотелось бы узнать можно его как нибуть отработать а отуда я передам его на ListBox1


Palladin   (2008-02-22 09:52:00) [14]


> АИК   (22.02.08 09:29) [4]

и чего в результате получиться то должно?


Сергей М.   (2008-02-22 09:34:00) [15]

Непонятно, за каким лешим понадобилось посылать кучу сообщений вместо одного-единственного, например, WM_COPYDATA .. Да еще и асинхронно ..


АИК   (2008-02-22 09:29:00) [16]

var
h: HWND;
S: String;
i:Integer;
Begin
 h:=FindWindowex(findwindow(nil,'Okno_Priemnika')
          ,0,'ListBox1',nil);
 if h<>0 then  begin
    s:=Edit1.Text;
    For i:=1 to length(Edit1.Text) do
    PostMessage(h, WM_CHAR, Ord(S[i]), 0);
 end;
end;


Сергей М.   (2008-02-22 09:22:00) [17]


> отправляет ему сообщения


Показывай код ..


АИК   (2008-02-22 09:19:00) [18]


> пишем обработчик сообщения виндовс у того кому отправляешь

Прга первой находит HWND второго окна и отправляет ему сообщения
или я тебя неправильно понял


Palladin   (2008-02-22 09:04:00) [19]


> как сделать код

руками вестимо


> форма первой отрабатывала входящие сообщения

пишем обработчик сообщения виндовс у того кому отправляешь


Наверх

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