Вниз
Скачать: CL | DM;

Перемещение формы по экрану.   Найти похожие ветки 

← →
Koba   (2003-12-01 11:04) [0]

Когда свойство формы BorderStyle отлично от bsNone,
то над формой есть такая синяя полоска с иконкой и
кнопками минимизации и т.д. Во время работы приложения
можно хватать форму за эту полоску и тащить в любую
часть экрана. А вот когда BorderStyle = bsNone, такой
полоски нет.

Проблема такая: можно ли запрограмировать перетаскивание
формы по экрану в этом случае. То есть, например: я нажимаю
кнопку мыши над формой, курсор превращается в такую
хватающую ручку и я могу тащить форму куда захочу.

Можно конечно, запрограмировать изменение свойств Left и
Top. Это отчасти работает, но мне кажется, что это
неправильно. При таком способе иногда все виснет. Кроме
того, форма каждый раз перерисовывается полностью и на
старых машинах это может работать медленно и коряво.

Нет ли другого способа?


← →
TUser ©   (2003-12-01 11:52) [1]

1. Обрабатывай события OnMouseDown - установить некий флаг, запомнить положение формы и курсора, OnMouseMove - если флаг, то переместить форму в соотвествии с новым положением курсора, OnMouseUp - убрать флаг.
2. (еще проще) - есть такой массаг, WMC..Hit.. (Ну, не помню я как его зовут). В обработчкие написать Msg.result:=htCaption.


← →
Юрий Федоров ©   (2003-12-01 12:02) [2]

WM_NCHITTEST


← →
Koba   (2003-12-02 09:19) [3]

Спасибо. Все работает. Я в FAQ еще другой способ нашел.
Правда вот есть еще одна проблема.

Без всяких там перемещений. Пишем обработчик OnMouseDown
и в теле обработчика меняем Form.Cursor Вот что странно.
Если во время работы приложения нажимаю правую кнопку,
то курсор сразу же меняется. А если левую --- то нет, а
только тогда, когда ее отпустишь. Как с этим бороться?


← →
AbrosimovA ©   (2003-12-02 10:16) [4]

if Button=mbLeft then
begin
...//меняй курсор
end


← →
Семен Сорокин ©   (2003-12-02 10:23) [5]

Mouse.CursorPos := Mouse.CursorPos


← →
Yanval ©   (2003-12-02 10:28) [6]

procedure Form.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-36699
A JI E LLI A
2003-11-29 21:29
2003.12.12
Как реализовать возведение числа в произвольную степень?


14-36809
ИдиотЪ
2003-11-20 10:16
2003.12.12
отношение к людям


6-36782
MegaVolt
2003-10-14 17:35
2003.12.12
Как определить есть ли компутер за конкретным IP?


1-36656
Agent13
2003-11-30 19:27
2003.12.12
Регистрация почтового клиента


1-36662
Marina_S
2003-11-30 17:24
2003.12.12
Почему на экране не появляются созданные квадраты




   Наверх