|
Вопрос # 458/ вопрос решён / |
|
Здравствуйте. У меня к вам такой вопрос?
Есть две формы Form1 и Form2.
Form1.Width :=500;
Form1.Height := 300;
Form1.Left := 30;
Form1.Top := 30;
Form1.Visible := true;
Form2.Width :=500;
Form2.Height := 300;
Form2.Left := 0;
Form2.Top := 0;
Form2.Visible := true;
Разница только в параметрах Left и Top.
У меня вопрос, можно сделать так, чтобы
перетаскивая Form1 мышкой, Form2 перемещалась
вместе с ней, как будто они приклеенные.
Заранее благодарен.
 |
Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 7 апреля 2007, 00:14
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Можно, нужно для первой формы обрабатывать сообщение WM_MOVE. Это сообщение посылается форме, когда она пересовывается. Новые координаты второй формы всегда можно расчитать, зная координаты первой формы.
обработчик доделываем так.
В private разделе формы добавляем строку
procedure MyFormMove(var msgTMessage);message WM_MOVE;
и нажимаем Ctrl+Shift+C. Делфи сгенерит обработчик, в котором можно писать код
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 7 апреля 2007, 01:01
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Дима Гусаков
Здравствуйте, Толков Геннадий Викторович!
Код действует при нажатии мыши на поле формы
Приложение: Переключить в обычный режим- var
- Form1: TForm1;
- CursorPos, FormPos: TPoint;
- Drag: boolean;
- ....
-
- procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- if Button = mbLeft then // ÷òîá íå
"òàñêàëîñü"
ïî íàæàòèþ
ïðàâîé
êíîïêè
ìûøè
- begin
- Drag := True;
- //
Çàïîìèíàåì
ïîëîæåíèå
îêíà â
ìîìåíò
íà÷àëà
ïåðåòàñêèâàíèÿ
- FormPos.X := Left;
- FormPos.Y := Top;
- //
Çàïîìèíàåì
ïîëîæåíèå
êóðñîðà â
ìîìåíò
íà÷àëà
ïåðåòàñêèâàíèÿ
- GetCursorPos(CursorPos);
- end;
- end;
-
- procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- if Button = mbLeft then Drag := False;
- end;
-
- procedure TForm1.OnIdle(Sender: TObject; var Done: boolean);
- var Point: TPoint;
- begin
- if Drag then
- begin//
Ïðîâåðÿåì
íàõîäèòñÿ
ëè ôîðìà â
ðåæèìå
ïåðåòàñêèâàíèÿ
- GetCursorPos(Point); // Óçíà¸ì
íîâûå
êîîðäèíàòû
êóðñîðà
- // Äâèãàåì
îêîøêî
- Left := FormPos.X + Point.X - CursorPos.X;
- Top := FormPos.Y + Point.Y - CursorPos.Y;
-
- Form2.Left := Left + Form1.Width;
- Form2.Top := Top;
- end;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- Application.OnIdle := OnIdle;
- end;
-
 |
Ответ отправил: Дима Гусаков (статус: 2-ой класс)
Время отправки: 7 апреля 2007, 15:26
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:26: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|