Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
ВнизPostMessage Найти похожие ветки
← →
АИК (2008-02-22 08:59) [0]Здорова всем
Сделал две программки, в одну разместил ListBox а в другой отправляю сообщения первому (с помощью PostMessage) в общем подскажите как сделать код чтобы форма первой отрабатывала входящие сообщения?
← →
Palladin © (2008-02-22 09:04) [1]
> как сделать код
руками вестимо
> форма первой отрабатывала входящие сообщения
пишем обработчик сообщения виндовс у того кому отправляешь
← →
АИК (2008-02-22 09:19) [2]
> пишем обработчик сообщения виндовс у того кому отправляешь
Прга первой находит HWND второго окна и отправляет ему сообщения
или я тебя неправильно понял
← →
Сергей М. © (2008-02-22 09:22) [3]
> отправляет ему сообщения
Показывай код ..
← →
АИК (2008-02-22 09:29) [4]
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:34) [5]Непонятно, за каким лешим понадобилось посылать кучу сообщений вместо одного-единственного, например, WM_COPYDATA .. Да еще и асинхронно ..
← →
Palladin © (2008-02-22 09:52) [6]
> АИК (22.02.08 09:29) [4]
и чего в результате получиться то должно?
← →
АИК (2008-02-22 09:59) [7]
> и чего в результате получиться то должно?
Резльтат 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;
← →
Сергей М. © (2008-02-22 10:10) [8]Посылай окну формы синхронное (SendMessage) сообщение WM_COPYDATA, в параметрах которого указывай всю передаваемую строку и "координаты" конечного получателя твоего сообщения, например, имя целевого лисбокс-компонента.
По получении сообщения форма установит нужное св-во указанного в сообщении компонента в значение, равное строковому значению, переданному параметром сообщения.
← →
Palladin © (2008-02-22 10:11) [9]я тебя спрашиваю чего ты от listbox"а хочешь своими сообщениями?
← →
АИК (2008-02-22 10:28) [10]
> Сергей М
Вроде SendMessage также может послать только один символ, но мне интересней другое к примеру если я расположи на другом окне несколько listbox"сов и в передаваемом ему сообшении буду указывать для какого именно листбокса оно указана мне всего лиш нужно это - как отработать входяшее сообшение будьто через PostMessage или SendMessage у окна приемника
← →
Сергей М. © (2008-02-22 10:37) [11]
> АИК (22.02.08 10:28) [10]
Ответь сначала на [9]
← →
АИК (2008-02-22 10:37) [12]
> я тебя спрашиваю чего ты от listbox"а хочешь своими сообщениями?
Опыты проводить для привавки знаний но если тебе станет от этого легче то я могу заменить Listbox на Memo или Edit
← →
Сергей М. © (2008-02-22 10:48) [13]
> АИК (22.02.08 10:37) [12]
> Опыты проводить
Опыты проводить нужно после постановки задачи.
Как выглядит твоя задача ? Какую реакцию listbox"а ты ожидаешь увидеть при получении им асинхронного WM_CHAR-сообщения ?
← →
АИК (2008-02-22 11:00) [14]
> Как выглядит твоя задача ?
На ваши вопроси отвичать чего показывает результат
← →
Palladin © (2008-02-22 11:02) [15]Пиши на русском, я нифига не понял чего ты сказал.
← →
{RASkov} © (2008-02-22 11:18) [16]> [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;
Для упрощения сделал все в одном приложении... Для двух - нужно во втором объявить константы для улучшения читабельности кода...
ЗЫ: Только не нужно мой пример нигде использовать - это плохой пример. )Так... для наглядности....
← →
Плохиш © (2008-02-22 13:48) [17]
> АИК (22.02.08 10:37) [12]
> Опыты проводить для привавки знаний но если тебе станет
> от этого легче то я могу заменить Listbox на Memo или Edit
Хочешь "Опыты проводить" - проводи сам, пока что ты пытаешься заставить присутствующих проводить свои дебильные "опыты"...
← →
Johnmen © (2008-02-22 14:08) [18]...и легче им не становится. Вона {RASkov} © в запой ушёл...
← →
Leonid Troyanovsky © (2008-02-23 09:31) [19]
> АИК (22.02.08 08:59)
> подскажите как сделать код чтобы форма первой отрабатывала
> входящие сообщения?
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/ca42e0565d4fea54
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c