Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.025 c
3-36502
Элина
2003-11-22 17:59
2003.12.12
Как в SQL проверить поле на нулевое значение


1-36622
oens
2003-12-01 13:08
2003.12.12
button


1-36743
Destructor
2003-12-03 10:41
2003.12.12
Использование элементов управления в StringGrid


3-36518
Patrick
2003-11-21 14:31
2003.12.12
Интеграция


1-36649
Sacred
2003-12-01 00:51
2003.12.12
Проблема с позицией формы на экране.