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

Вниз

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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.05 c
3-1173963658
Rhasta
2007-03-15 16:00
2007.06.03
Распределенные базы данных


5-1154951820
Vaitek__
2006-08-07 15:57
2007.06.03
Храние ресурсов в компоненте


2-1179105337
Wood
2007-05-14 05:15
2007.06.03
TDateTimepicker, значение...


2-1179343610
WebSQLNeederr
2007-05-16 23:26
2007.06.03
Как добавить в строку одинарные ковычки


15-1178791060
Руслан
2007-05-10 13:57
2007.06.03
Можно ли включить компьютер с помощью сетевой карты?