![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,281
|
![]()
Всем привет.
Вот опять балуюсь с Delphi. Делаю элементарную вешь. Есть панель, которую можно таскать мышкой по форме (не Drag&Drop). Для этого обрабатываю OnMouseDown, ..Up, ..Move. Во время переноса рисую на канве desktop'а прямоугольник эмитирующий эту панель (Pen.Mode := pmXor и закрашиваем старый - рисуем новый). Как многие наверно уже догадались, если во время переноса нажать Alt+Tab, а потом вернутся в приложение, то начинаются глюки. Ясень перь, что нужно обработать Application.OnDeactivate. Так и делаю. В нём закрашиваю нарисованный прямоугольник и "прекращаю процедуру переноса". Все нормально, но есть один глюк. Если прямоугольник проходил по рамке окна, то там остаются полосочки. Хотя по идее рамка должна перерисоваться, она ведь меняет цвет. Почему полоски-то остаются? P.S.: Delphi 7, Winows 7 Последний раз редактировалось Sibedir; 10.02.2011 в 09:17. |
![]() |
![]() |
![]() |
#2 |
Подтвердите свой е-майл
Регистрация: 19.12.2010
Сообщений: 808
|
![]()
Да что ж вы извращаетесь-то ?
![]() Это же проще делается (неоднократно упоминалось на форуме) : Код:
|
![]() |
![]() |
![]() |
#3 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,281
|
![]()
Спасибо. А чтобы при переносе только рамка отображалась?
|
![]() |
![]() |
![]() |
#4 |
Подтвердите свой е-майл
Регистрация: 19.12.2010
Сообщений: 808
|
![]()
Вот этого не припоминаю...
Попробуйте поиграть значением параметра SC_DragMove = $F012. Кстати, очень интересные эффекты наблюдаются при некоторых значениях. ![]() Например, $F022, $F032... Последний раз редактировалось asmodey1; 10.02.2011 в 15:13. |
![]() |
![]() |
![]() |
#5 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,281
|
![]()
А откуда вообще взялось это $F012 и где можно найти полный перечень. На MSDN не пойму где искать.
Кстати, доперло, почему эти черточки остаются. Я стираю (закрашиваю обратно) прямоугольник в Application.OnDeactivate, а он срабатывает уже после потери фокуса, а соответственно и перерисовки рамки. .........немного погодя Опытным путем установленно, что м/у началом потери фокуса (Alt+Tab) и его окончанием (Msg.message = 45057) ни каких сообщений (кроме мыши, клавы, WM_PAINT, и WM_TIMER) приложению не передается (искал через TApplicationEvents.OnMessage). Что, остается ловить Alt+Tab и тогда закрашивать что-ли? А как быть если фокус потерян иным способом? Последний раз редактировалось Sibedir; 11.02.2011 в 10:38. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> где можно найти полный перечень
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx Не уверен насчёт полноты, правда.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 10.02.2011 в 16:50. |
![]() |
![]() |
![]() |
#7 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Нет, это полный перечень, просто "the four low-order bits of the wParam parameter are used internally by the system". Т.е. константы
sc_SizeLeft = $F001;можно смело отнести к недокументированным возможностям (что, кстати, не гарантирует корректной работы в будущих версиях windows) Sibedir, можно включить окну transparent и нарисовать/сделать видимым прозрачный прямоугольник во время перетаскивания, хотя в упор не понимаю зачем ![]()
пыщь
|
![]() |
![]() |
![]() |
#8 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,281
|
![]()
Затем, чтобы пока тащишь, элемент оставался на своем месте. Вообще, главное здесь не как перетащить (для этого и существует Drag&Drop). Вопрос был в полосочках, а теперь он в отловке события "начала потери фокуса". А вообще, мне идея с прозрачным оконным элементом понравилась.
Последний раз редактировалось Sibedir; 11.02.2011 в 10:37. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 16.05.2011
Сообщений: 45
|
![]()
Доброго времени суток.
Проблема: Есть два edit. Как сделать, чтобы второй edit дублировал первый, после потери фокуса с первого edit? |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 16.05.2011
Сообщений: 45
|
![]()
Подскажите. Не могу разобраться.
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перекидывание фокуса при нажатии на таб | Lokos | Общие вопросы Delphi | 7 | 08.02.2011 05:08 |
Проблемы с шаблоном при закрытии приложения | klimov0512 | Microsoft Office Excel | 0 | 06.09.2010 19:55 |
Ошибка при наведении фокуса на Edit | Gumer | Общие вопросы Delphi | 2 | 21.04.2010 00:13 |
сохранение изменений в DBGrid/DBGridEh, при изменении фокуса ячейки | dalien | БД в Delphi | 6 | 30.07.2009 15:36 |
создание dll при старте приложения и удаление при завершении | TyoshA | Общие вопросы Delphi | 7 | 13.07.2009 13:56 |