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

Вниз

WS_EX_TRANSPARENT и не только   Найти похожие ветки 

 
klyonov   (2003-05-08 17:19) [0]

Привет всем. Уже не раз сюда писал на эту тему и получал полезные ответы, но "не все ладно в датском королевстве" или как там...
В общем так, надо сделать что-то вроде IDE Delphi в смысле перетягивания границ объектов и самих объектов. Использовал этот самый стиль прозрачности и все почти получилось, работает все хорошо и аккуратно за двумя исключениями, а именно:
1. Как мне сделать так, чтобы окно со стилем WS_EX_TRANSPARENT всегда рисовало при получении WM_PAINT все, что что я в этом обработчике написал?
2. Как сделать так, чтобы родители окна с таким стилем не "игнорировали" его при своей перерисовке? Поясню: когда перерисовывается, например, панель и при этом перерисовка не затронула окно с этим стилем, расположенное на панели, она не посылает WM_PAINT дочернему окну, но и не исключает из своей области перерисовки регион окна, и затирает его, естественно. Для обычных окон панель исключит область ими занятую из области своей перерисовки, если эти окна не были изменены.


 
klyonox   (2003-05-09 16:01) [1]

Никто не знает ничего по этой теме, что-ли? Или я что непонятно написал?


 
Malder   (2003-05-09 16:25) [2]

Я не понял с самого начала, про IDE Delphi и как связан с ним WS_EX_TRANSPARENT, да еще "смысле перетягивания границ объектов и самих объектов"


 
klyonov   (2003-05-10 09:17) [3]

Я имел ввиду под "IDE Delphi в смысле перетягивания границ объектов и самих объектов" тот прямоугольничек с 8-ю черными квадратиками, который появляется когда щелкаешь на кнопку на форме, например. Ну и потом можно перетянуть или растянуть эту самую кнопку. Я сделал контрол для этого с помощью WS_EX_TRANSPARENT. Работает почти как в самой Delphi за двумя исключениями, которые я и описал в вопросе.


 
Юрий Зотов   (2003-05-10 15:08) [4]

> klyonov

1. Вообще говоря, в Delphi сделано немного хитрее - каждый из этих черных квадратиков (маркеров) тоже является самостоятельным объектом (потомком TWinControl). У него проставлены свойства Cololr и Cursor, он знает, к какому именно редактируемому компоненту он привязан (и в каком месте), он умеет перемещаться вслед за мышью (и при этом влияет на другие маркеры и размер редактируемого контрола) - и т.п.


2. По сабжу. Вот выдержка из MSDN по поводу WS_EX_TRANSPARENT:

A window created with this style receives WM_PAINT messages only after all sibling windows beneath it have been updated.

Значит, если в обработчике WM_PAINT сначала получить "снимок" картинки под собой, затем вызвать стандартный обработчик, а затем отрисовать этот же снимок на родительском окне, то, вроде бы, все должно быть нормально. Или можно не вызывать стандартный обработчик, а рисовать этот же снимок на собственной канве - тогда и прозрачность не потребуется.


3. На "Королевстве" есть библиотека FormRgn Антона Григорьева. В ней, помимо прочего, реализована возможность создания прозрачных окон. Для экс-СССР - бесплатная, с исходниками - можно скачать и посмотреть. Аналогичные компоненты есть на Torry (ищите по слову Transparent), но про них я ничего сказать не могу, а вот с Антоном мы заочно знакомы и могу заверить, что это грамотный и аккуратный Component Writer.


4. Вы указали D6 и W2k. Насколько я в курсе, при этом сочетании прозрачность реализована уже в самой VCL. Тоже можно посмотреть.


5. Все же я не уверен, что Вы идете лучшим путем. Возможно, есть смысл создавать маркеры в виде самостоятельных оконных контролов и делать растяжку с их помощью, а перемещение и все остальное делать через хуки на мышь и клаву, которые просто вызывают нужные методы глобального а-ля FormDesigner"а. Кстати, в последнем случае появляется возможность ввести в FormDesigner список выделенных компонентов и редактировать их совместно (а-ля SelectionList). Да и вообще, при создании своего аналога FormDesigner"а все получается сосредоточенным в одном месте - легче модифицировать, отлаживать и т. д.


6. Зайдите на www.dream-com.com. Там Вы найдете все уже готовое. Разумеется, не бесплатно, но решение уж Вы принимайте сами (или со своим начальством, если оно есть).


 
klyonov   (2003-05-10 17:20) [5]

2 Юрий Зотов: Спасибо за помощь.



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

Форум: "Основная";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
3-70170
Oleon
2003-04-29 14:13
2003.05.22
Какие минусы при использовании IDENTITY для первичного ключа.


1-70247
KIE
2003-05-08 11:58
2003.05.22
Потоки


3-70136
AlexGof
2003-04-30 12:35
2003.05.22
Отсоединенный набор в MS SQL


3-70102
e-master
2003-04-27 18:36
2003.05.22
Сетевое приложение под Interbase


3-70174
TroianOFF
2003-05-02 01:47
2003.05.22
Как записать данные в DBGrid не из таблицы





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