Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2014, 12:14   #1
SA_TER
Новичок
Джуниор
 
Регистрация: 12.01.2014
Сообщений: 5
Вопрос Взаимодействие с невидимым компонентом

Всем привет!

Суть проблемы в следующем: На форме есть панель (TPanel) с цветом (например clSilver), на ней - PaintBox.
В свойствах главной формы (TForm) для TransparentColorValue указан clSilver.
Свойство TransparentColor установлено в True.

Задача: организовать интерактивное взаимодействие невидимого объекта PaintBox с мышкой или клавиатурой для вывода графики.

Проблема: После запуска приложения TPanel становится прозрачной и являясь владельцем TPaintBox игнорирует все генерируемые события для PaintBox типа OnMouseMove.

Перехват мышиных и клавиатурных событий через SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0) в принципе работает но требует фильтрации координат по клиентской области PaintBox, коме этого необходимо придумать фильтр на накрытие этой области другими окнами.

Может есть более элегантный способ поймать эти сообщения в самом PaintBox?

Заранее спасибо за идеи!
SA_TER вне форума Ответить с цитированием
Старый 12.01.2014, 12:38   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Вопрос

Простите, но не совсем понятна постановка задачи и требуемый результат.
Если нужно что-то нарисовать в определённом месте экрана, то здесь скорее подойдёт просто Canvas которому передан его handle.
Streletz вне форума Ответить с цитированием
Старый 12.01.2014, 12:49   #3
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Как-то слишком сложно. Используй только PaintBox, предварительно покрасив его как панель.
doktor255 вне форума Ответить с цитированием
Старый 12.01.2014, 12:53   #4
SA_TER
Новичок
Джуниор
 
Регистрация: 12.01.2014
Сообщений: 5
По умолчанию

Необходимо в области PaintBox отследить координату мыши, нажатие левой/правой/ и т.п. кнопки мыши и клавиатуры для вывода изображения именно в этой точке, но события OnMouseDown, OnMouseMove и т.п. не ловятся по причине невидимости его Owner'a - TPanel.
SA_TER вне форума Ответить с цитированием
Старый 12.01.2014, 12:58   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Как вариант, рисовать на Image. TImage "ловит" все эти события.
doktor255 вне форума Ответить с цитированием
Старый 12.01.2014, 12:59   #6
SA_TER
Новичок
Джуниор
 
Регистрация: 12.01.2014
Сообщений: 5
По умолчанию

В том-то и проблема, что область должна быть прозрачной, так как под ней находится другое приложение с выводом видео в окне с координатами моего TPaintBox и мне нужно поверх видео (как-бы) вывести графику.
SA_TER вне форума Ответить с цитированием
Старый 12.01.2014, 13:04   #7
DpolenST
Форумчанин
 
Регистрация: 28.09.2013
Сообщений: 115
По умолчанию

У меня в С++ Builder был глюк с TransparentColorValue, при выставлении некоторых цветов форма становилась прозрачной но отверстие в ней не появлялось и события на прозрачных элементах отлавливались как обычно. Как не глупо это звучит, но попробуйте другой цвет
Что бы еще такого сделать, чтобы ничего не делать?
DpolenST вне форума Ответить с цитированием
Старый 12.01.2014, 13:13   #8
SA_TER
Новичок
Джуниор
 
Регистрация: 12.01.2014
Сообщений: 5
По умолчанию

К сожалению в Delphi нет свойства прозрачности в процентах как на формах VisualStudio. там можно поставить прозрачность на 99% и видно будет хорошо сквозь окно и события будут ловится.
SA_TER вне форума Ответить с цитированием
Старый 12.01.2014, 13:16   #9
DpolenST
Форумчанин
 
Регистрация: 28.09.2013
Сообщений: 115
По умолчанию

Цитата:
Сообщение от SA_TER Посмотреть сообщение
К сожалению в Delphi нет свойства прозрачности в процентах как на формах VisualStudio. там можно поставить прозрачность на 99% и видно будет хорошо сквозь окно и события будут ловится.
а AlphaBlendValue и AlphaBlend?
Что бы еще такого сделать, чтобы ничего не делать?
DpolenST вне форума Ответить с цитированием
Старый 12.01.2014, 13:23   #10
SA_TER
Новичок
Джуниор
 
Регистрация: 12.01.2014
Сообщений: 5
По умолчанию

AlphaBlendValue и AlphaBlend делают прозрачной всю форму и все объекты управления на ней, вот если-бы такое свойство было у TPanel ...
SA_TER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать Excel невидимым на панели задач в VBA? kss Microsoft Office Excel 3 13.05.2012 15:43
У меня почему то TTabSheet не становиться невидимым. tonatas Общие вопросы Delphi 1 01.09.2010 12:52
курсор с компонентом ASЯ Помощь студентам 11 16.05.2010 00:02
Помогите с компонентом Aндрей Помощь студентам 2 13.05.2009 15:30
Как сделать курсор невидимым??? Teen4jump Общие вопросы Delphi 6 27.06.2007 01:57