主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2004.07.18;
下载:[xml.tar.bz2];

向下

形式的联合运动。 找到类似的分支


Денис   (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]

谢谢你。
Мне тут один предложил:
类型
TfrmMain = class(TForm)
私立
procedure OnMove(var Msg: TWMMove); message WM_MOVE;
结束;

procedure TfrmMain.OnMove(var Msg: TWMMove);
开始
继承;
// здесь твой код, задавай координаты другой формы.
//например
// tnewform.left:=tfrmmain.left-100;
// tnewform.top:=tfrmmain.top-100;

结束;

попробуй и ты.



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;
下载:[xml.tar.bz2];

楼上









内存:0.58 MB
时间:0.103 c
1-1089149562
agMuH
2004-07-07 01:32
2004.07.18
资源


3-1087823153
Mityai
2004-06-21 17:05
2004.07.18
ADO "Чудеса в решете"


14-1088151356
infom
2004-06-25 12:15
2004.07.18
Pomogite u menya tut kakie-to glyuki


1-1088881014
Vasya.ru
2004-07-03 22:56
2004.07.18
当您单击右上角的十字以显示窗口时?


14-1088540477
ISV
2004-06-30 00:21
2004.07.18
你在听什么





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский