![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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')Всё работает но сообшения получает окно формы и хотелось бы узнать можно его как нибуть отработать а отуда я передам его на ListBox1
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;
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]
> как сделать код
руками вестимо
> форма первой отрабатывала входящие сообщения
пишем обработчик сообщения виндовс у того кому отправляешь