Текущий архив: 2004.07.18;
Скачать: CL | DM;
Вниз
Совместное перемещение форм. Найти похожие ветки
← →
Денис (2004-06-23 01:20) [0]Товарищи!
Кто нибудь в состоянии спокойно и без понтов объяснить, как наладить совместное перемещение двух или нескольких форм по экрану при перемещении одной из них.
Вариант с таймером отпадает - слишком банально.
Буду очень признателен, а может быть и полезен.
Денис.
← →
GuAV © (2004-06-23 01:46) [1]
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;
Криво, но идея такая: сделать это на Апи - создать прозрачное окно, куда их вставить и таскать это окно.
← →
GuAV © (2004-06-23 01:56) [2]
> Криво
Не то слово... вариант снимается :(
← →
Денис (2004-06-25 01:23) [3]И на том спасибо.
Мне тут один предложил:
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;
попробуй и ты.
← →
Babay © (2004-06-25 07:39) [4]может вот это подойдет
Для первой формы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 находится под первой. Перетаскивание любой формы ведет к перетаскиванию второй за ней
← →
Babay © (2004-06-25 07:44) [5]извиняюсь чето просмотрел
> Денис (25.06.04 01:23) [3]
собственно это же и предложил :-)
← →
Денис (2004-07-02 08:51) [6]Babay, ответь пожалуйста: что значит строка if not assigned(Form2) then exit;Никак не могу понять что это за assigned такое и почему надо выходить(exit).
Заранее спасибо.
← →
begin...end © (2004-07-02 08:54) [7]
> [6] Денис (02.07.04 08:51)
Если форма не создана, то выходим.
Хотя это не очень правильный вариант.
← →
Денис (2004-07-07 04:46) [8]Но ведь мы не можем двигать форму до того как она создана, почему тогда обрабатывается WMMove?
← →
NAlexey © (2004-07-07 09:13) [9]>Денис (25.06.04 01:23) [3]
>Babay © (25.06.04 07:39) [4]
Я считаю что не всегда ваши примеры будут работать. WM_MOVE недостаточно.
Страницы: 1 вся ветка
Текущий архив: 2004.07.18;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.055 c