![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Как можно определить, что форма перетаскивается за заголовок в текущий момент времени? Заранее благодарен.
|
|||
|
||||
Technoboss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 22.11.2002 Репутация: нет Всего: нет |
Привет!
Может быть использовать ф-цию GetClientRect ? |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
onPaint можно обрабатывать.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Можно через таймер, или обрабатывать OnMouseUp;
-------------------- |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Спасибо, но я сделал вот так:
private procedure NCMouseMove(var Msg: TMessage); message WM_NCMOUSEMOVE; ... x:=GetSystemMetrics(SM_CXSIZE); ... procedure TForm1.NCMouseMove(var Msg: TMessage); begin inherited; if (msg.WParam=HTCAPTION) then begin Form2.Left:=Form1.Left-Form2.Width-20; Form2.Top:=Form1.Top+X; end; end; Мне нужно это для того чтобы одновременно перетаскивать 2 формы, но в етим способом вторая форма меняет свое положение только после того как я, перетащив первую форму, отпускаю кнопку мышки. Можно ли как то сделать, чтоб форма перетаскивалась одновременно с первой? |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Ну, плз, подскажите как сделать, чтобы обе формы перетаскивались одновременно.
|
|||
|
||||
jeka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 19.12.2002 Репутация: нет Всего: нет |
При начале перетаскивания генерируется событие. Перехватываешь это событие и создаёшь таймер к примеру на 0.1 сек. и опрашиваешь положение окна и относительно полученных данных меняешь положение второго окна, а после перехвата события завершения перетаскивания окна таймер отключаешь...
вроде проще некуда... |
|||
|
||||
jeka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 19.12.2002 Репутация: нет Всего: нет |
OnPaint вызывается у меня в 4 случаях: 1. Изменение содержимого формы (обновляется только изменившаяся часть). 2. При выходе за пределы экрана. 3. При перекрытии другой формой. 4. По требованию системы (например при смене цветовой гаммы). |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Попробуй обработать следущие сообщения и напиши что-то вроде этого:
NC_LBUTTONDOWN: FormsDragging := True; XOffset := X; YOffset := Y; NC_LBUTTONUP: FormsDragging := False; NC_MOUSEMOVE: if FormsDragging then begin OtherForm.Left := (OtherForm.Left+X)-XOffset; OtherForm.Top := (OtherForm.Top+Y)-YOffset; end; OtherForm - это вторая форма. Переменные FormsDragging, XOffset, YOffset oбъяви глобально. P.S. See also WM_MOVE -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Сообщение WM_NCMOUSEMOVE наступает только тогда, когдя я, перетащив форму, отпускаю кнопку мышки. Мне же жедательно сделать так, чтобы перетаскиванее было одновременным, как это сделано, например, в Winamp. Если же ставить таймер во второй форме на проверку нажатия на заголовок в первой форме и при этом нажатии перемещать вторую форму, то при загруженности системы, перетаскивание второй формы происходит рывками. |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
...
private { Private declarations } procedure WMMOVE(var Msg: TMessage); message WM_MOVE; .... procedure TForm1.FormShow(Sender: TObject); begin Form2.Show; end; procedure TForm1.WMMOVE(var Msg: TMessage); begin inherited; if (Form2 <> nil) and (Form2.Visible) then begin SetWindowPos(Form2.Handle, 0, Msg.LParamLo - Form1.Width, Msg.LParamHi, 0, 0, SWP_NOSIZE or SWP_NOACTIVATE); end; end; все прекрасно работает -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Form2.Visible не обязательно -- это так иссделования и еще если отключен "показ содержимого окна при перетаскивании" этот код не канает
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 2 Всего: 4 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |