![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Совместное перемещение форм. [D5, D6, D7, Win95/98, WinXP]
Денис © (2004-06-23 01:20:00)Товарищи!
Кто нибудь в состоянии спокойно и без понтов объяснить, как наладить совместное перемещение двух или нескольких форм по экрану при перемещении одной из них.
Вариант с таймером отпадает - слишком банально.
Буду очень признателен, а может быть и полезен.
Денис.
NAlexey (2004-07-07 09:13:00) [1]>Денис (25.06.04 01:23) [3]
>Babay © (25.06.04 07:39) [4]
Я считаю что не всегда ваши примеры будут работать. WM_MOVE недостаточно.
Денис (2004-07-07 04:46:00) [2]Но ведь мы не можем двигать форму до того как она создана, почему тогда обрабатывается WMMove?
begin...end (2004-07-02 08:54:00) [3]
> [6] Денис (02.07.04 08:51)
Если форма не создана, то выходим.
Хотя это не очень правильный вариант.
Денис (2004-07-02 08:51:00) [4]Babay, ответь пожалуйста: что значит строка if not assigned(Form2) then exit;Никак не могу понять что это за assigned такое и почему надо выходить(exit).
Заранее спасибо.
Babay (2004-06-25 07:44:00) [5]извиняюсь чето просмотрел
> Денис (25.06.04 01:23) [3]
собственно это же и предложил :-)
Babay (2004-06-25 07:39:00) [6]может вот это подойдет
Для первой формы
TForm1 = class(TForm)
.......
procedure WMMove(var Msg: TWMMove); message WM_MOVE;
end;
........
procedure TForm1.WMMove(var Msg: TWMMove);
begin
if not assigned(Form2) then exit;
// здесь ведем расчет позиции для второй формы
form2.Top := Form1.Top + Form1.Height;
form2.Left := Form1.Left;
end;
для второй формы
TForm2 = class(TForm)
....
procedure WMMove(var Msg: TWMMove); message WM_MOVE;
end;
......
procedure TForm2.WMMove(var Msg: TWMMove);
begin
if not assigned(Form1) then exit;
// здесь ведем расчет позиции для 1 формы
form1.Top := Form2.Top - Form1.Height;
form1.Left := Form2.Left;
end;
в данном примере форма 2 находится под первой. Перетаскивание любой формы ведет к перетаскиванию второй за ней
Денис (2004-06-25 01:23:00) [7]И на том спасибо.
Мне тут один предложил:
type
TfrmMain = class(TForm)
private
procedure OnMove(var Msg: TWMMove); message WM_MOVE;
end;
procedure TfrmMain.OnMove(var Msg: TWMMove);
begin
inherited;
// здесь твой код, задавай координаты другой формы.
//например
// tnewform.left:=tfrmmain.left-100;
// tnewform.top:=tfrmmain.top-100;
end;
попробуй и ты.
GuAV (2004-06-23 01:56:00) [8]
> Криво
Не то слово... вариант снимается :(
GuAV (2004-06-23 01:46:00) [9]
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var DragForm: TForm;
begin
DragForm:=TForm.Create(nil);
DragForm.Visible:=True;
DragForm.Top:=0;
DragForm.Left:=0;
DragForm.ClientHeight:=Screen.Height;
DragForm.ClientWidth:=Screen.Width;
Form1.Parent:=DragForm;
Form2.Parent:=DragForm;
ReleaseCapture;
DragForm.Perform(WM_SYSCOMMAND, $F012, 0);
Form1.Parent:=nil;
Form2.Parent:=nil;
DragForm.Release;
end;
Криво, но идея такая: сделать это на Апи - создать прозрачное окно, куда их вставить и таскать это окно.