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

Вниз

Создание дочернего PControl для чужого окна   Найти похожие ветки 

 
belest ©   (2007-02-28 17:36) [0]

А как можно создать PControl (в моем случае - Panel, на которой лежат другие контролы), который будет дочерним для совершенно чужого окна?
Handle этого окна у меня есть. Причем, этих чужих окон может быть 5, а может и 25. И можно ли как-нибудь это сделать? Неужели придется все на чистом API переписывать? Используется KOL без MCK.
  Я адаптирую toolbar к IE7. Все кнопочки и сам тулбар были сделаны на KOL. Но в IE6 создавался Applet и все клалось на него. Но я же не могу создавать по апплету на каждую вкладку! (Пробовал - глючит.)


 
Vladimir Kladov   (2007-02-28 20:14) [1]

API никто не отменял, так что Windows.SetParent должно работать. По крайней мере, попробовать можно.


 
belest ©   (2007-03-01 14:04) [2]

Спасибо за подсказку. Но работает ровно так же (с теми же глюками), как и при создании апплета для каждой вкладки. Видимо, именно так делать и надо, а баги живут в другом месте. Дихлофос хочу! :-)


 
thaddy   (2007-03-01 14:08) [3]

You not only need to use win32 api to set the parent, but also to subclass that parent and intercept its messageloop to intercept processing for your controls.
(getwindowlong, setwindowlong etc)


 
mdw ©   (2007-03-02 01:22) [4]

Да, есть такое. Аплет или что его  заменяет (форма) ловит сообщения, которые до него доходят. Но доходит не все, особенно если родительское окно модальное. Недавно, просто занимался примерно тем же, встраивал свою панель с контролами в чужую форму. Довольно грустно получается, например кновка Left в едитах не работает (а вправо работает:)), таб тоже... Пришел к тому, что нужно или перехватывать оконную процедуру родителя и делать свой обработчик (геморойно это),  или делать стиль встраивамого окна WS_POPUP, тогда работает все хорошо, но при фокусировке своего окна родитель теряет фокус. Не очень красиво.
У меня закончилось все благополучно, оказалось что исходная программа тоже на делфи написана (VCL), договорились с автором, переделал под VCL и счастье пришло... некто <PMG>  этим же, помнится давно занимался, вроде как победил. У меня аська есть, правда редко живая, если нужно дам.


 
alex3   (2007-03-04 19:58) [5]

На форуме уже не раз появлялись, темы так или иначе  упирающиеся,
в одно и то же место.
Значение  Parent, при выполнении SetParent, в кол не меняется,
Функция API GetParent - возвращает нового хозяина.
Из этого можно зделать вывод, что, с точки зрения,
кол и API, поля содержащие  Parent находятся в разных
местах. Очевидно, виду этого, происходит нарушение
алгоритма определения координат объекта. Объект просто
не знает, что у него поменяли хозяина.
Если организовать обработку координат на API,
проблем не возникает. Самое оптимальное решение-
если бы Vladimir Kladov пересмотрел алгоритм, с учетом
данной возможности - как ни как он самый компетентный в
этом вопросе. Или каждому изобретать что то свое.
У меня была сходная проблема, но я ее решил, средствами API.


 
belest ©   (2007-03-06 13:34) [6]

Все заработало, всем спасибо за помощь, а отдельное спасибо - Владимиру Кладову за подсказку  Windows.SetParent. Сам бы не сообразил. :-(  Матчасть  учить надо!

2 alex3 - в "Книге по KOL" написано, что для PControl.Parent возвращает PControl, а для получения дескриптора (handle) родительского окна надо использовать PControl.ParentWindow. И PControl.ParentWindow у меня прекрасно работало.


 
Alex3   (2007-03-07 17:44) [7]

Прочитайте внимательно!
Речь идет о нарушении обработки координат, при передаче объекта
другому PARENT!


 
Galkov ©   (2007-03-09 13:43) [8]

Может следует завести "фиктивное" окно, которое не посылает нотификации паренту, но честно переправляет их чайлдам через CM_XXX....


 
alex3   (2007-03-09 17:05) [9]

Говорю же, что на API проблем нет!
Top - нормально, а вот left и размеры,
непонятно, то ли Экранные то ли относительно
родного окна, точно сейчас не помню.


 
Galkov ©   (2007-03-09 19:16) [10]


> Говорю же, что на API проблем нет!

Это не открытие Америки. Если проблемы "на API", то писать надо не на этот форум, а Биллу.
Вопрос в топике шел о пристегивании KOL-овского контролла, насколько я понимаю.
Который о своих действиях сообщает нотификациями в парент.
Если этот парент KOL-овский, то эти сообщения переправляются опять на нашу форму "своими" CM-мессагами...
Если "чужой", то это проблема - он ничего не переправляет.
И если Вы на нее не наступили, это не значит еще, что ее нет

Если я чего-то не правильно понимаю - покажите, пожалуйста....


 
alex3   (2007-03-11 14:49) [11]

На АРI все нормально отрабатывается,
проблема отработки в kol, я свою проблему решил уже давно,
для меня она не актуальна. Но зачем же дважды наступать на
грабли? Если еще кто то на них напорется? Парент чужой.
Применение - все возможные плагины и так далее.
Для понимания проблемы: передаем елемент чужому
парент( не коловскому), считываем и устанавливаем его координаты,
смотрим что из этого получается.


 
Galkov ©   (2007-03-11 20:02) [12]

alex3
понять содержание Вашего поста крайне затруднительно.
То, что на API все прекрасно отрабатывается - это не информация, а аксиома.
Если не отрабатывалось бы, ни в каких библиотеках просто не было бы смысла. И о чем этот форум было бы просто не понятно.

Единственно, что я понял нового - для Вас эта не проблема уже не актуальна.
Но не понял зачем это Вы рассказываете народу...

Ну, наши поздравления, если за этим....



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

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

Наверх





Память: 0.48 MB
Время: 0.04 c
3-1181285199
ssa
2007-06-08 10:46
2007.10.14
Узнать, что dataset находится в режиме редактирования


4-1172569970
DevilDevil
2007-02-27 12:52
2007.10.14
Поток. Как "убить себя" ?


2-1190265993
Ohotnic
2007-09-20 09:26
2007.10.14
Три ComboBox и кнопка...


15-1189622431
Инс
2007-09-12 22:40
2007.10.14
Подскажите микросхему


15-1189682335
de.
2007-09-13 15:18
2007.10.14
С ++





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