Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Редактор форм   Найти похожие ветки 

 
ANTPro ©   (2007-01-30 13:01) [0]

Как реализовать на WinAPI перетаскивание контролов(EditBox, Button...)?


 
tesseract ©   (2007-01-30 13:55) [1]

Почитать MSDN. На WinAPi придёться изобрести два велосипеда и трактор.

А так перхватывать сообщения мыши и обрабатывать их.


 
ANTPro ©   (2007-01-30 14:11) [2]

> [1] tesseract ©   (30.01.07 13:55)
> На WinAPi придёться изобрести два велосипеда и трактор.

Увы :(


 
DVM ©   (2007-01-30 15:59) [3]


> ANTPro ©   (30.01.07 14:11) [2]

Всего 3 сообщения обрабатывать: WM_MOUSEDOWN, WM_MOUSEMOVE, WM_MOUSEUP


 
tesseract ©   (2007-01-30 16:02) [4]


> DVM ©   (30.01.07 15:59) [3]


Угу, а курсорчки подрисовать?  а с DnD поиграться?


 
DVM ©   (2007-01-30 16:04) [5]


> tesseract ©   (30.01.07 16:02) [4]

Еще и копирование со вставкой добавить и т.д. Тогда конечно попотеть придется.


 
tesseract ©   (2007-01-30 16:08) [6]


> Еще и копирование со вставкой добавить


Это, как раз-таки не сложно.


 
DVM ©   (2007-01-30 16:11) [7]


> Это, как раз-таки не сложно.

Ну не скажи. Если копируется не просто окно, а окно со всеми своими дочерними окнами и все это на апи.


 
ANTPro ©   (2007-01-30 16:31) [8]

> [3] DVM ©   (30.01.07 15:59)
> WM_MOUSEDOWN, WM_MOUSEMOVE, WM_MOUSEUP

Еслиб все было так просто :(

Других сообщений нет? Неахота сабклассить, хотя через предка можно достать по WM_NOTIFY. Но может есть еще варианты?


 
DVM ©   (2007-01-30 16:42) [9]


> Неахота сабклассить,

Это же не сложно. Охота-ноохота, а придется.


 
tesseract ©   (2007-01-30 16:54) [10]


> Ну не скажи. Если копируется не просто окно, а окно со всеми
> своими дочерними окнами и все это на апи.


?? Структуры вспомагательные по которым окна создаются рулят по любому.


 
ANTPro ©   (2007-01-30 17:10) [11]

> [4] tesseract ©   (30.01.07 16:02)
> а с DnD поиграться?

Что под этим подразумевается?


 
ANTPro ©   (2007-01-30 17:11) [12]

> [9] DVM ©   (30.01.07 16:42)
> Это же не сложно. Охота-ноохота, а придется.

Получится не универсально, хотя если нет других вариантов, то поробую


 
tesseract ©   (2007-01-30 17:24) [13]


> Что под этим подразумевается?


Drag & Drop


 
ANTPro ©   (2007-01-30 17:34) [14]

> [13] tesseract ©   (30.01.07 17:24)
> Drag & Drop

: ) Я не об этом, что значит "поиграться" и через какие мессаги?


 
GrayFace ©   (2007-01-30 19:59) [15]

tesseract ©   (30.01.07 16:02) [4]
Угу, а курсорчки подрисовать?  а с DnD поиграться?

Зачем??

ANTPro ©   (30.01.07 16:31) [8]
Неахота сабклассить, хотя через предка можно достать по WM_NOTIFY. Но может есть еще варианты?

Сабклассить надо все, это не проблема.

tesseract ©   (30.01.07 16:54) [10]
?? Структуры вспомагательные по которым окна создаются рулят по любому.

А у ListView Items запоминать? А и т.п.?

P.S. Перетаскивание делается как и с формой:
WM_KEYDOWN: SendMessage(Handle, WM_SYSCOMMAND, $f012, 0);
Точно так же и всякие изменения размеров за уголки.


 
tesseract ©   (2007-01-30 21:31) [16]

> [15] GrayFace ©   (30.01.07 19:59)



> WM_KEYDOWN:


Протрезвей и посмотри тему. WM_KEYDOWN edit заглушит, если PreTranslateMessage не использовать, а это весьма нерекомендуемая операция.


> А у ListView Items запоминать? А и т.п.?



> P.S. Перетаскивание делается как и с формой:

-10, форма на WinApi отстуствует. Про этот MagicNumber всем известно.

Не прекручивай, ListView вообще-то к базовым элементам управления не относиться. А ты позиционирование сделай и сохранение/восстановление параметров при закрытии приложения Без сохранения информации об элементе управления.


> Точно так же и всякие изменения размеров за уголки.


ГМ, вот уголки с таким кодом точно не прокатят.


 
GrayFace ©   (2007-01-30 22:16) [17]

tesseract ©   (30.01.07 21:31) [16]
Да, конечно WM_LBUTTONDOWN. Для уголков надо менять параметр $f012.

tesseract ©   (30.01.07 21:31) [16]
-10, форма на WinApi отстуствует.

Как и связь этого факта с моим постом.

tesseract ©   (30.01.07 21:31) [16]
MagicNumber

Че это?

tesseract ©   (30.01.07 21:31) [16]
Не прекручивай, ListView вообще-то к базовым элементам управления не относиться. А ты позиционирование сделай и сохранение/восстановление параметров при закрытии приложения Без сохранения информации об элементе управления.

Согласен.


 
tesseract ©   (2007-01-30 22:56) [18]

> Да, конечно WM_LBUTTONDOWN. Для уголков надо менять параметр
> $f012.


Точно не помню, вроде не глушит.


> MagicNumber
> Че это?


> $f012


Есть константа с говорящим именем для такой команды.

ЗЫ: А непроще сделать как все ? Использовать не элементы управления, а "битмапы"? Так работают редакторы ресурсов, и 1с например.


 
ANTPro ©   (2007-01-30 23:01) [19]

> [15] GrayFace ©   (30.01.07 19:59)
> Точно так же и всякие изменения размеров за уголки.

Уголков у меня нет. Я сделал тупо через стили. ИМХО так даже лучше.


> [16] tesseract ©   (30.01.07 21:31)
> WM_KEYDOWN edit заглушит, если PreTranslateMessage не использовать,
> а это весьма нерекомендуемая операция.

Вот это меня и беспокоит. Можно по-подробней?


 
tesseract ©   (2007-01-30 23:11) [20]

> Вот это меня и беспокоит. Можно по-подробней?


MSDN там подробно. Эта функция вызывается перед всеми функциями обработки сообщений. Например у меня половина программы под  WinCE на ней базировалась (нужен был перехват в Edit нажатия аппаратных клавиш).
Но там свои приколы, например одно сообщение получают все - от предка до потомка, если его не глушануть.


 
ANTPro ©   (2007-01-31 00:05) [21]

> [20] tesseract ©   (30.01.07 23:11)
> MSDN

Там я буду долго искать. Да и все возможные реализации врядли найду.

Сабкласс попробую, может, что и получится...


 
tesseract ©   (2007-01-31 10:23) [22]


> Там я буду долго искать.


Описание функции PreTranslateMessage? Оно в хелпе от D7 есть, в Turbo Delphi почему-то нет. Просто в MSDN есть с примерами. А так - обычная функция обработки сообщений. Не забываем  главное дальше управление передавать, а то прога повиснет.


 
GrayFace ©   (2007-01-31 12:55) [23]

tesseract ©   (30.01.07 22:56) [18]
> Да, конечно WM_LBUTTONDOWN. Для уголков надо менять параметр
> $f012.

Точно не помню, вроде не глушит.


Каким, кстати, образом он может WM_KEYDOWN глушить?

tesseract ©   (30.01.07 22:56) [18]
> $f012

Есть константа с говорящим именем для такой команды.


Есть SC_MOVE = $f010, он немного не так работает. Для уголков константы тоже не описаны - они, помнится, между $f000 и $f010. Могу привести, если надо будет.

tesseract ©   (31.01.07 10:23) [22]
Описание функции PreTranslateMessage? Оно в хелпе от D7 есть, в Turbo Delphi почему-то нет.

В D7 тоже нет. И в Index"е раздела Platform SDK в MSDN нет. И в Windows.pas не объявлен...


 
Amoeba ©   (2007-01-31 15:31) [24]


> ANTPro ©   (30.01.07 13:01)
>
> Как реализовать на WinAPI перетаскивание контролов(EditBox,
>  Button...)?

Ну и приключений ты себе на одно место ищешь. А стоит ли сия овчинка выделки???


 
ANTPro ©   (2007-01-31 21:51) [25]

> [24] Amoeba ©   (31.01.07 15:31)

Меня никто не спрашивает. Да и экспы получу много : )


> GrayFace ©  
> tesseract ©  

Спасибо за ответы.


 
tesseract ©   (2007-01-31 22:08) [26]

>
> Каким, кстати, образом он может WM_KEYDOWN глушить?


Элементарным, из функции обработки сообщений возвращаем признак того, что сообщение обработано. большинство элементов управления много чего глушит. Столкнулся при программировании под WinCE=Win95.


 
GrayFace ©   (2007-02-01 13:16) [27]

tesseract ©   (31.01.07 22:08) [26]
Элементарным, из функции обработки сообщений возвращаем признак того, что сообщение обработано.

Но если мы перекрываем WndProc, то от нас контрол так ничего не скроет. А как иначе можно сообщения ловить? Не делать же хук для этого. Или ты в цикле выборки сообщений это смотрел?


 
tesseract ©   (2007-02-01 13:25) [28]


>  А как иначе можно сообщения ловить? Не делать же хук для
> этого. Или ты в цикле выборки сообщений это смотрел?


Перекрывал WindowProc - не ловяться клавиши, только через PreTranslateMessage.


 
GrayFace ©   (2007-02-01 16:02) [29]

А какие клавиши? Речь, видимо, о C++? В MSDN есть упомянания о методе некоторых объектов C++ PreTranslateMessage, но такой функции API не видно.


 
ANTPro ©   (2007-02-04 21:12) [30]

Перетаскивание заработало, но не хотят таскаться Static Text и ComboBox.
Как заставить их реагировать на события мыши?


 
ANTPro ©   (2007-02-09 16:50) [31]

Еще раз пасиба всем за саб класс!
Теперь все переделывать :(



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.048 c
15-1170156228
Calibr
2007-01-30 14:23
2007.02.25
Вопрос по HTML?


2-1170485562
vegarulez
2007-02-03 09:52
2007.02.25
Как отловить нажатие кнопки?


6-1158345314
free)styler
2006-09-15 22:35
2007.02.25
Загрузка части страницы методом Post (idhttp)


2-1170672429
uka
2007-02-05 13:47
2007.02.25
Здравтсвуйте уважаемые программисты. Как мне решить проблемму...


2-1170896851
Vemer
2007-02-08 04:07
2007.02.25
Подобие TLabel