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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2009, 16:38   #11
Pavelok
Подтвердите свой е-майл
 
Регистрация: 02.04.2009
Сообщений: 48
По умолчанию

Конечная цель просто рисовать, неее скиншот не пойдет, надо будет одновременно кнопки нажимать
Pavelok вне форума Ответить с цитированием
Старый 16.11.2009, 17:13   #12
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

пока мне видится так... если кто знает как лучше, отпишет:

рисовать по некоторым объектам (с canvas- image, form...) вы сможете, а по наследникам типа TCustomEdit, а это edit, кнопки, memo и другие с защищенным свойством canvas вам придется для каждого из них переопределять WMPaint, по сути создавать наследников, чтоб получить доступ к TControlCanvas... далее, получив доступ к канвасу, объединяем их под общими событиями (как ранее указал) mousemove,mouseleftdown/up (+ нужно учитывать фактическое положение и положение над соответствующим компонентом)

вы готовы к этому?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.11.2009, 19:08   #13
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Какой ужас ребята
Делается это так... разумеется если вам ненужно "живое" окно.
1. Есть окно, на нем контролы
2. Покаким то признакам, состояниям вы определяете что щас начинается рисование
3. Создаете новое окно, дочернее в клиентской области, либо цепляите прямо поверх вашего.
4. Ну два варианта, либо как окно слой - тогда даже можно сделать и "живое" окно, либо просто копировать область окна через GetDC + BitBlt, и уже рисовать на скопированном "фоне".

И так, если выбрали первый вариант (слой), то все не так уже и тяжело:
1. Создать окно по размерам одинаковое с вашим (главным окном).
2. Создать буфер (CreateCompatibleDC + CreateDIBSection) где вы получити нужный вам HDC и указатель на биты в 32х битовом формате на пиксель. Теперь когда рисуите:
1. Прийдется ставить глобальный хук, хотя можно и локальный (ведь в своем приложении/окне рисуите), на мышь т.е. интерисуют WM_LBUTTONDWON + WM_LBUTTONUP + WM_MOUSEMOVE.
2. На этих трех сообщения (в их обработчиках) у вас есть уже созданное окно-слой и HDC и scan0 (биты). Теперь рисуите любым способом (GDI, GDI+, OpenGl, DirectX...) и потом делаите UpdateLayeredWindow (вроде так).
3. Когда главное окно двигается (есть соответствующие сообщения) вы двигайте и свое окно-слой.
4. Т.к. окно-слой, то сквозь прозрачные места можно будет нажимать/работать с главным окном т.е. создадится впечатление что рисуите на окне, а оно "живым" остается.

p.s. извените за корректность, быстро писал да и вечер уже...

Последний раз редактировалось BOBAH13; 16.11.2009 в 19:11.
BOBAH13 вне форума Ответить с цитированием
Старый 16.11.2009, 20:09   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Делается это так... разумеется если вам ненужно "живое" окно.
про вариант прозрачного окна с привязкой тоже думал (кстати достаточно будет и transparent вехнему окну включить, получится создание региона сверху в виде мазков мышью)... но вот справится ли автор
...без обид, что тот вариант, что тот, но вам придется Pavelok разобраться, а мы поможем
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 16.11.2009 в 20:15.
raxp вне форума Ответить с цитированием
Старый 16.11.2009, 20:17   #15
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

raxp: забудьте про "легкий" транспарент - при рисовании про качество, сразу можно забыть, все будет очень криво.
BOBAH13 вне форума Ответить с цитированием
Старый 16.11.2009, 20:27   #16
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
Смех

Цитата:
raxp: забудьте про "легкий" транспарент - при рисовании про качество, сразу можно забыть, все будет очень криво
мой первый вариант все-же считаю надежней... но насчет "вашего легкого" transparent меня мучили смутные сомнения и поскольку раз начали, то надо довести до логического конца, вот что мне удалось реализовать... итак смотрим...

1- имеем окно с кучей компонентов
2- по нажатию правой кнопки мыши поверх идет второе полупрозрачное окно
3- на котором можно рисовать левой кнопкой мыши
4- по нажатию опять правой кнопки мыши делаем его прозрачным, в результате текст остается поверх всего (т.к. это форма), причем нижнюю основную форму можно тягать, нажимать и т.д (идет привязка) и повторять эффект... для стирания двойной клик при рисовании

во вложении проект, держите и дерзайте...
Изображения
Тип файла: jpg 1.jpg (16.6 Кб, 157 просмотров)
Тип файла: jpg 2.jpg (10.5 Кб, 199 просмотров)
Тип файла: jpg 3.jpg (15.5 Кб, 155 просмотров)
Тип файла: jpg 5.jpg (24.2 Кб, 152 просмотров)
Вложения
Тип файла: zip canvas.zip (4.4 Кб, 65 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 16.11.2009 в 22:29.
raxp вне форума Ответить с цитированием
Старый 16.11.2009, 22:29   #17
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

однако up#16
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 17.11.2009, 20:09   #18
Pavelok
Подтвердите свой е-майл
 
Регистрация: 02.04.2009
Сообщений: 48
По умолчанию

raxp спасибо! Но как сделать так чтоб форма 2 не была такой прозрачной?
Pavelok вне форума Ответить с цитированием
Старый 17.11.2009, 21:08   #19
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

а как вы рисовать будете? так вы видите на чем рисуете...
свойство alfablend увеличьте у формы-2
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 17.11.2009, 22:58   #20
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Жаль, хотел добавить + (respect и т.п.) через "весы". Почему то (?) двиг форума не дал возможности.
Так что на словах: raxp - плюс тебе (Вам). За усердие в продвижении темы.
Ну не считайте это OFFTOP - ом.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить форму всегда быть поверх всех окон AnnNet Общие вопросы Delphi 9 11.12.2013 16:16
Как сделать поверх всех KinderX Microsoft Office Excel 7 29.06.2009 20:32
MDICihild форма поверх всех компонентов в родительской MDI ? chandrasecar Общие вопросы Delphi 5 07.06.2009 17:48
Рисовать поверх TImage odi_noki Мультимедиа в Delphi 10 09.04.2009 23:10
Как отобразить меню поверх всех фреймов? drRobert JavaScript, Ajax 3 31.08.2008 21:37