Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

Проблема с Control ами   Найти похожие ветки 

 
Nimbus ©   (2002-10-20 02:49) [0]

Привет, Мастера, доброго всем времени суток!
Буду очень благодарен всем откликнувшимся на мою просьбу.
Ниже приведён пример кода, который выводит пользователю название (т.е. заголовок) 3-й закладки Tab Control"a, который находится в точке (200;200).
Прим.: я превёл слово "Tab" как "заклАдка").

Собственно пример:
TForm1.Button1Click(Sender: TObject);
var
pos: TPoint;
Item: TC_ITEM;
xx: hWnd;
buff: array [1..15] of char;
begin
pos.x := 200;
pos.y := 200;
Item.mask := TCIF_TEXT;
Item.pszText := @buff;
Item.cchTextMax := SizeOf(buff);
xx := WindowFromPoint(pos);
SendMessage(xx,TCM_GETITEM,2,integer(@Item));
showmessage(buff);
end;



Проблема в следующем:
Если процедура выполняется в той же программе, где находится Tab Control, то всё О.К. (хотя это изврАт (мягко говоря), я это сделал для проверки, чтобы узнать, что код, в принципе, работает).
А вот если выполнить эту же процедуру из другой проги (даже состоящей только из одной этой процедуры), то в массив buff ничего не записывается!!??? При этом, есессно, Tab Control находился в той же точке (200;200) и окно было поверх всех окон.

Please, HELP!!! Выручайте Мастера, в чём ошибка?


 
Suntechnic ©   (2002-10-20 04:02) [1]

Причина стара как этот мир. Нельзя получить адрес структуры, которая находится в чужом адресном пространстве. Точнее адрес то получить можно, только вот в вашем процессе этот адрес ничего не значит. Я толкую вот о какой строчке: SendMessage(xx,TCM_GETITEM,2,integer(@Item));

Одно из потенциальных решений это внедрение в чужое адресное пространство. Каким образом это сделать обсуждалось и переобсуждалось на этом сайте десятки раз.


 
Nimbus ©   (2002-10-20 16:01) [2]

to Suntechnic: спасибо и на этом, конечно - в общих чертах понятно, хотя могу с Вашим мнением и поспорить:

SendMessage(hWnd,WM_SETTEXT,0,lparam(PChar("бла-бла-бла")));

этот код вставит строку как в ЧУЖОЙ Edit Control, так в свой. Что Вы на это скажете, уважаемый? (принципиальной разницы между Edit Contol"ом и Tab Control"ом я не вижу - если она есть, то объясните, в чём???).


 
Suntechnic ©   (2002-10-20 17:21) [3]

>Nimbus © (20.10.02 16:01)
Принципиальной разницы то нет... принципиальная разница в том какое сообщение вы отсылаете.
Существуют сообщения в Win API, которые обрабатываются не так как все остальные, а по особому. Такими сообщениями являются: WM_SETTEXT, WM_GETTEXT, WM_COPYDATA. Не вдаваясь в подробности могу лишь сказать, что обработка подобных сообщений в Win API для разных процессов происходит с помощью file mapping.
Как вы уже наверное догадались TCM_GETITEM к таким сообщениям не относится.


 
Nimbus ©   (2002-10-20 18:09) [4]

to Suntechnic:
если Вам не сложно, то мыльните пару ссылочек на работоспособные примеры, как правильно (в моём случае) обращаться с такими сообщениями или поподробнее поясните, в каком направлении "копать". Заранее благодарю.


 
Suntechnic ©   (2002-10-20 19:31) [5]

>Nimbus © (20.10.02 18:09)
Я уже сказал в каком направлении копать. Копать надо в направлении внедрения в чужое адресное пространство. Сделать это можно, например, с помощью ловушек (см. статью на этом сайте http://delphi.mastak.ru/articles/hooks/index.html). Есть ещё несколько способов. Лучше всего для этого почитать Джеффри Рихтера. У него, если я правильно помню, цельный пример для ListView имеется.


 
Nimbus ©   (2002-10-21 09:19) [6]

хммм... Джеффри Рихтера говоришь... А название книги о которой ты говоришь не подскажешь? (не буду же я все книги этого автора просматривать? :-)).


 
Suntechnic ©   (2002-10-21 16:11) [7]

http://delphi.mastak.com/cgi-bin/forum.pl?look=1&id=1034655273&n=3


 
Nimbus ©   (2002-10-22 00:49) [8]

Спасибо огромное за помощь!
Теперь, я думаю, у меня всё получится.



Страницы: 1 вся ветка

Текущий архив: 2002.12.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-4312
AndreyAgSoft
2002-11-19 11:35
2002.12.02
ShellListView


14-4611
MalkoLinge
2002-11-12 14:33
2002.12.02
Есть идея ! (калькулятор и т.п.)


1-4321
DN
2002-11-21 17:27
2002.12.02
TIniFile


4-4664
DeMoN-777
2002-10-19 15:27
2002.12.02
А можно пример использования TimeSetEvent ?


1-4323
carmagedon
2002-11-19 21:15
2002.12.02
CD rom