|
Вопрос # 1 292/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Для перемещения формы без заголовка я пользуюсь таким кодом:
const
SC_DragMove = $F012;
begin
ReleaseCapture;
perform(WM_SysCommand, SC_MOVE+2, 0);
но когда пытаешься переместить форму вверх экрана, то не получается поднять выше -25 форма возращается. но мне желательно чтобы форма поднималась выше. как это реализовать?
Примечание #1 (26 января 2008, 15:20): форма имеет стиль bsNone, а на ней расположены несколько панелей
 |
Вопрос задал: Виталий (статус: 2-ой класс)
Вопрос отправлен: 26 января 2008, 15:18
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: DoS
Здравствуйте, Виталий-1552!
Попробуйте добавить в раздел Private формы переменные Dragging: Boolean; OldX, OldY: Integer и сделать так:
Приложение: Переключить в обычный режим- procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- If Button = mbLeft Then begin
- Dragging := True;
- OldX := X;
- OldY := Y;
- end;
- end;
-
- procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState;
- X, Y: Integer);
- begin
- If Dragging Then Begin
- Left := Left + X - OldX;
- Top := Top + Y - OldY;
- End;
- end;
-
- procedure TForm1.MouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- Dragging := False;
- end;
 |
Ответ отправил: DoS (статус: 1-ый класс)
Время отправки: 26 января 2008, 22:38
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Виталий-1552!
Какое-то время назад Майкрософт ввела запрет на размещение формы за пределами экрана - много вирусов пользовалось этим, размещая там свои окна. Поднятие вверх ограничего 25 - так как это размер заголовка формы на вашем компьютере. у меня это 18. Их можно понять - не каждый мог отдвинуть окно назад, если видит только его низ. Так что рекомендую забросить эту идею, а реализовать по другому - например уменьшая размеры формы, когда она подъежает вверх.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 27 января 2008, 14:23
|
Ответ #3. Отвечает эксперт: Feniks
Здравствуйте, Виталий-1552!
Если я правильно Вас понял, то Вам надо "тоскать" форму мышей не по заголовку, т.к. его нет.
Тогда я предлагаю Вам воспользоваться вот этим кодом. Я сам им пользуюсь в своих проектах.
На один Контрол делаете обработчик события OnMouseDown. Например на Panel1:
procedure TForm1.Panel1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;
На остальных Контролах указываете тотже обработчик. Таким образом, Вы сможете перемещать форму кликая по тем Контролам, у которых указан такой обработчик.
P.S. Я сомтрю Вы почти правильно написали, но ошиблись в одном месте... ;-)
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 29 января 2008, 10:40
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 27 января 2008, 18:41; участников в обсуждении: 1.
|
Виталий (статус: 2-ой класс), 27 января 2008, 18:41 [#1]:
ок спасибо
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|