Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.042 c
1-1088753591
Provodnick
2004-07-02 11:33
2004.07.18
Как вставить в Worde текст с новой страницы?


9-1073408254
Elf
2004-01-06 19:57
2004.07.18
TImage


1-1088928187
Глеб
2004-07-04 12:03
2004.07.18
Работа с Unicode - запись в файл


14-1088367069
Ломброзо
2004-06-28 00:11
2004.07.18
Немного о шарлатанах


4-1086339472
Rem
2004-06-04 12:57
2004.07.18
Найти запущенную копию приложения и установить на нее фокус