|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.03.2009, 20:59 | #1 |
Форумчанин
Регистрация: 04.11.2008
Сообщений: 360
|
"Игривость" формы при перетаскивании
Добрый вечер!
Сразу обращаюсь к модераторам: извините что может быть название темы не соответствует вопросу, но придумать более подходящее название я не могу (фантазии не хватает). А теперь суть вопроса: недавно нашёл на форуме обсуждение насчет физической формы, и там увидел сообщение которое меня очень заинтересовало. Говорилось там о изменении своих форм, формой когда ее перетаскивать по роб. столу. Так вот кто нить может подсказать как это возможно реализовать, или скиньте статьи у кого есть, потомучто я лично ничего не могу найти на эту тему. Заранее всем огромнейшее спасибо! Да кстати вот ссылка на то изображение что бы все стало ясно. http://programmersforum.ru/attachmen...4&d=1237555204
Мой скромненький сайт
|
23.03.2009, 21:46 | #2 |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Самый простой вариант, как я уже говорил, наверное, сделать "скриншот" формы и построчно изменять изображение...А и еще во время перетаскивания мы перетаскиваем не форму а изображение...
|
23.03.2009, 22:07 | #3 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Ээээм.. compiz?
пыщь
|
23.03.2009, 23:09 | #4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Лично я не возражаю против такого названия - по крайней мере, оно отображает суть вопроса.
А почему вам не захотелось продолжить уже начатую тему? Ведь уважаемый Вован пообещал даже исходники для "резиновой" формы... Или вам нужно еще круче, еще лихее...? |
24.03.2009, 12:34 | #5 |
Форумчанин
Регистрация: 04.11.2008
Сообщений: 360
|
Нет мне нужно хотябы чуть чуть, что бы увидеть как оно работает, так сказать для ознакомления.
А темы не продолжал, просто подумал что в той теме парень хотел узнать не то о чем ему говорили, и то что я начну спрашивать про свое будет как нарушение правил.
Мой скромненький сайт
|
24.03.2009, 16:26 | #6 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
Сразу оговорюсь, что пишу быстро, все иностранные слова, функции и т.п. могут быть не 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. все конечно выглядит мрачно, и врятли кто поверит мне что это работает, ну я рассказал то как я это реализовывал, но пока показать не могу Если будет время на этой неделе, может легенький примерчик сделаю, но не обещаю. |
|
22.11.2009, 10:52 | #8 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Остальное зависит от Вашей фантазии :D Незачто
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при использовании 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 |