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

Вниз

HWND -> PControl   Найти похожие ветки 

 
vampir_infernal   (2006-10-10 14:59) [0]

Матчасть: Delphi 2005 Upd 3 + KOL 2.39.1, WinXP SP2;
Проблема: Существует окно "чужого" приложения, есть его handle, полученный из FindWindow. Необходимо наследовать свое окно от него с использованием чистого KOL, по аналогии с CreateParented(ParentWin: HWND) из VCL. Перерыл весь KOL.pas, нашел наследование только от PControl.
Вопрос: как привести handle к типу PControl ( PControl(ParentWin) не помогает)? если есть другие варианты подобного наследования, с удовольствием их выслушаю.


 
Barloggg   (2006-10-10 15:21) [1]

никак.

чтобы чего-нибудь от чего-нибудь наследовать надо знать про него все, а не только хендл.

максимум что ты можешь сделать это прицепиться к его хендлу и положить свой компонент на него (возможно)

а вот если у тебя есть полная конструкция класса (исходник), тогда другой разговор, тогда кое-что можно сделать. в принципе.


 
vampir_infernal   (2006-10-10 15:51) [2]

По хэндлу окна можно получить о ней очень много данных, вплоть до ее оконной процедуры.
Становится непонятным то, что такое наследование свободно применяется в VCL. Похоже, придется запастись временем и окунуться в мир Source\vcl. :(


 
Barloggg   (2006-10-10 17:59) [3]

е это не то. хедл это лишь адрес, где хранятся данные.

а обращение к скажем процедуре canvas.fillrect означает выхов функции которая должна находиться скажем +15 байт от координат этого хендла.
и если все правильно, то там действительно оказывается нужная нам инфа.

а если это не канвас, а что-то другое, то мы получаем access violation или нечто подобное.

короче еслиу тебя есть весь исходник и 100% таже структура как и у вражеского окна, ты можешь подхватить его хендл как свой и пользоваться им как своим собственным.

но если у тебя есть несостыковка в структуре, то будет (|). а может быть даже (___|___).
вот так-то.

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


 
vampir_infernal   (2006-10-10 21:12) [4]

Мне известны все параметры, используемые при создании "чужого" окна, то есть имя класса, стили, шрифты. Для ясности поясню, что "чужое" окно - это окно Lister в TotalCommander (а мое окно - плагин к нему).
С помощью GetWindowLong я получаю его оконную процедуру, перекрываю ее. Работает. Но необходимо именно наследовать от него. Писал на VCL - появлялось окно с заголовком и меню листера и моей формой вместо рабочей области (то, что нужно). Пишу на KOL, появляется окно листера и в углу экрана мое окно без заголовка. Пока что склоняюсь к ручной подгонке моего окна под координаты окна листера с соответсвующей обработкой сообщений.


 
Barloggg   (2006-10-11 09:04) [5]

ха. это не наследование.
это использование даного тебе хендла как родителя.

с помощью KOL плагин с тоталкомандеру сделал Speller. спроси у него тонкости реализации.
здесь: http://speller.narod.ru/


 
vampir_infernal   (2006-10-11 16:44) [6]

спасибо. признаюсь, не правильно выразил мысль.


 
alex3   (2006-10-11 21:53) [7]

>и в углу экрана мое окно без заголовка
коряво отрабатываются координаты окна,
мне так кажется, что коодината Left не правильно
пересчитывается (позиция на форме - позиция на экране).
При постоянном обновлении (перерисовки), и перемещении хозяина, внедренное окно ездит форме, причем top остается прежним.
Иногда бывает мерцание- внедренная форма рисуется в двух
местах, вызывается перемещением формы хозяина по экрану.
При изменении любой координаты внедренной формы рушатся все
остальные координаты. Измените хотя бы одну, и прочитайте все
остальные, получится очень интересно.
P.S.
Форма хозяин не TotalCommander (в моем случае).


 
Barloggg   (2006-10-12 09:00) [8]

ну да, хозяин Lister. правильно.
я это и имел ввиду.
плагин Speller"а работает и нормально работает. правда двигать окно листера мне как-то в голову даже не приходило...


 
alex3   (2006-10-12 22:26) [9]

Попробуйте, при создании окна, назначать стили(атрибуты), расширенные в том числе. А потом проверте что у вас получится (любой прогой, читающей атрибуты окна). В принципе, можно добится то вего, чего хочеш, было бы желание влазить все дальше в дебри.



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

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

Наверх





Память: 0.47 MB
Время: 0.11 c
2-1179105337
Wood
2007-05-14 05:15
2007.06.03
TDateTimepicker, значение...


15-1177956967
Wiedzmin
2007-04-30 22:16
2007.06.03
Смена иконки стороннего приложения


2-1178820436
Riply
2007-05-10 22:07
2007.06.03
Ожидание окончания "инициализации процесса".


15-1178804675
Rouse_
2007-05-10 17:44
2007.06.03
INTERFACE_TYPE


11-1160821604
vampir_infernal
2006-10-14 14:26
2007.06.03
Exception, TNotifyEvent и не только





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