Форум: "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.055 c