Главная страница
    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.009 c
3-4196
AndrewVolkov
2002-11-12 18:52
2002.12.02
TDbLookupComboBox - видна только одна запись???


7-4639
Terrible
2002-09-27 17:35
2002.12.02
Сплайсинг функций ядра на Delphi ?


1-4499
Peroon
2002-11-20 01:27
2002.12.02
У меня несколько вопросов.


1-4484
alextov
2002-11-20 15:32
2002.12.02
Приложение тормозит пока не отработает поток


1-4409
Сутковой Вадим
2002-11-17 17:04
2002.12.02
Как правильно перетащить форму не за заголовок?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский