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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 20:59   #1
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
Радость "Игривость" формы при перетаскивании

Добрый вечер!
Сразу обращаюсь к модераторам: извините что может быть название темы не соответствует вопросу, но придумать более подходящее название я не могу (фантазии не хватает).
А теперь суть вопроса: недавно нашёл на форуме обсуждение насчет физической формы, и там увидел сообщение которое меня очень заинтересовало. Говорилось там о изменении своих форм, формой когда ее перетаскивать по роб. столу. Так вот кто нить может подсказать как это возможно реализовать, или скиньте статьи у кого есть, потомучто я лично ничего не могу найти на эту тему.
Заранее всем огромнейшее спасибо!
Да кстати вот ссылка на то изображение что бы все стало ясно. http://programmersforum.ru/attachmen...4&d=1237555204
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 23.03.2009, 21:46   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
Радость

Самый простой вариант, как я уже говорил, наверное, сделать "скриншот" формы и построчно изменять изображение...А и еще во время перетаскивания мы перетаскиваем не форму а изображение...
Levsha100 вне форума Ответить с цитированием
Старый 23.03.2009, 22:07   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ээээм.. compiz?
пыщь
JTG вне форума Ответить с цитированием
Старый 23.03.2009, 23:09   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Лично я не возражаю против такого названия - по крайней мере, оно отображает суть вопроса.
А почему вам не захотелось продолжить уже начатую тему? Ведь уважаемый Вован пообещал даже исходники для "резиновой" формы... Или вам нужно еще круче, еще лихее...?
mihali4 вне форума Ответить с цитированием
Старый 24.03.2009, 12:34   #5
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

Нет мне нужно хотябы чуть чуть, что бы увидеть как оно работает, так сказать для ознакомления.
А темы не продолжал, просто подумал что в той теме парень хотел узнать не то о чем ему говорили, и то что я начну спрашивать про свое будет как нарушение правил.
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 24.03.2009, 16:26   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Levsha100 Посмотреть сообщение
Самый простой вариант, как я уже говорил, наверное, сделать "скриншот" формы и построчно изменять изображение...А и еще во время перетаскивания мы перетаскиваем не форму а изображение...
Близко. Я реализовывал не много не так, но суть сохранена.

Сразу оговорюсь, что пишу быстро, все иностранные слова, функции и т.п. могут быть не 100% корректны, проверить их корректность - просто вбейти в гугл

По сути создаете окно, с со стилем WS_EX_LAYERED. Так же потребуется буфер и созданный битмап (CreateDIBSection) его связываем с HDC и через обновление слоя на окне указываем этот самый HDC.

Потом как сказано выше, делаем скриншот вашего окна, чтобы вышло все четко надо вынести окно на передний план экрана (BringToFront, SetForegroundWindow) потом создать CreateDC где указать в имени DISPLAY, остальные параметры оставить NIL - именно так, а не как все делают GetDC(0) просто поверьте. Разумеется получить область вашего окна по хендлу этого окна через GetWindowRect, ну и на наш буфер (верней его HDC) через BitBlt с SCRCOPY.

Все теперь по сути у нас есть буфер + окно + оно не видимо пока что.

Теперь мы обновим окно, наше, покажем его и разумеется расместим его прямо там где оригинал окна находится. Потом оригинал как обычно ShowWidnow(original_handle, SW_HIDE) все, пользователь даже не заметил как он скрылось.

Теперь перед нами илюзия что окно начинается двигаться

По сути, чтобы каждый раз не фоткать, создаем копию нашего буфера (окна-копии) для анимации так сказать.

Чтобы не крутить вертеть себе мозги берем тот же FastDIB ищем билинейную интерполяцию, копируем алгоритм и подстраиваем под свои нужды, т.е. вместо класса FastDIB указываем либо свой класс, либо на прямую через наши буферы работаем. Размеется перед каждым кадром новой анимации требуется очищать временный буфер.

Анимация по сути это какой-то коэфицент(ы) который меняется от 0 до 1. Т.к. у нас два буфера, и причем они одинаковы по кол-ву бит на пиксель и по размерам, то можно вполне спокойно прогонять по строкам эти буферы (0 до высоты - 1) и относительно номера строки / на высоту (окна) буфера получать нужную ширину, согласно билинейному алгоритму, эта строка будет качественно сжата.

После всего этого, окно - слой, должно обновится где будет указан HDC временного буфера (т.е. текущий кадр анимации).

То что делать когда мышь отпущенна (после перетаскивания окна, как я понимаю) думаю и сами догадаитесь.

p.s. все конечно выглядит мрачно, и врятли кто поверит мне что это работает, ну я рассказал то как я это реализовывал, но пока показать не могу
Если будет время на этой неделе, может легенький примерчик сделаю, но не обещаю.
BOBAH13 вне форума Ответить с цитированием
Старый 24.03.2009, 16:36   #7
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

Цитата:
Если будет время на этой неделе, может легенький примерчик сделаю, но не обещаю.
если можно, то пожалуйста выложи хоть какой нить примерчик потомучто не все понял...
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 22.11.2009, 10:52   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Остальное зависит от Вашей фантазии :D Незачто
Вложения
Тип файла: rar example.rar (221.7 Кб, 45 просмотров)
BOBAH13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42
Как вырезать на форме область определенной формы ("что то вроде ножниц") dimfil Общие вопросы Delphi 9 10.11.2007 08:51
Запретить закрытие окошка формы крестиком "Х" Slim Microsoft Office Excel 5 28.03.2007 19:39