Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-4232
фтвкун
2002-11-14 13:09
2002.12.02
TreeView и БД


14-4581
Z-Yuri
2002-11-08 15:40
2002.12.02
А что творится в провинции (это еще цветочки)


8-4511
mega
2002-08-10 13:33
2002.12.02
Выделение контуров


14-4618
Anar
2002-11-11 16:34
2002.12.02
Хочу сдедать апгрейд


3-4195
Pegas
2002-11-13 15:12
2002.12.02
InterBase после удаления даных база не уменьшается!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский