![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Формы [D7, XP]
led © (2007-08-25 12:39:00)Можно ли как-то связать две форму, т. е. при перемещении одной вторая будет тоже перемещаться за первой.
Leonid Troyanovsky (2007-08-26 07:19:00) [1]
> Turbouser © (25.08.07 18:01) [19]
> А у нас WM_WINDOWPOSCHANGED - т.е. уже после изменения.
inherited не приметил, sorry.
--
Regards, LVT.
Turbouser (2007-08-25 18:01:00) [2]> [17] Leonid Troyanovsky © (25.08.07 17:49)
Если бы было WM_WINDOWPOSCHANGING - то да.
А у нас WM_WINDOWPOSCHANGED - т.е. уже послеизменения.
О чем, собственно и сказано в хелпе:
The WM_WINDOWPOSCHANGED message is sent to a window whose size, position,
or place in the Z order has changedas a result of a call to the
SetWindowPos function or another window-management function.
Anatoly Podgoretsky (2007-08-25 18:00:00) [3]
> wp2 © (25.08.07 13:11) [8]
> ? курсорами? в режиме для инвалидов?
Мы пристали?
Leonid Troyanovsky (2007-08-25 17:49:00) [4]
> Turbouser © (25.08.07 14:34) [16]
> Так лучше :)
> Form2.Left := Left + 100;
> Form2.Top := Top + 100
Оно не совсем лучше, бо, Left & etc
отразит полжение до.
--
Regards, LVT.
Turbouser (2007-08-25 14:34:00) [5]Так лучше :)
type
TForm1 = class(TForm)
Label1: TLabel;
procedure WMWINDOWPOSCHANGED(var Message: TMessage); message WM_WINDOWPOSCHANGED;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.WMWINDOWPOSCHANGED(var Message: TMessage);
begin
inherited;
if (Form2 <> nil)and not(csDestroying in Form2.ComponentState) then
begin
if not Form2.Visible then
Form2.Visible := True;
Form2.Left := Left + 100;
Form2.Top := Top + 100;
end;
end;
wp2 (2007-08-25 13:55:00) [6]Вот:
Кинь компонент TApplicationEvent
procedureTForm1.ApplicationEvents1Message( varMsg: tagMSG;
varHandled: Boolean);
begin
ifMsg.message = WM_NCMOUSEMOVE then
begin
Form2.Left := Form1.Left + Form1.Width;
Form2.Top := Form1.Top
end;
end;
wp2 (2007-08-25 13:36:00) [7]ну что вы пристали к этим инвалидам?
лучше скажите какое сообщение поймать, когда мышка нажимается на заголовке окна?
Anatoly Podgoretsky (2007-08-25 13:25:00) [8]> wp2 (25.08.2007 13:11:08) [8]
Ты не любишь инвалидов?
А пользователей которые клавиатурой пользуются?
wp2 (2007-08-25 13:20:00) [9]А может Drag&Doc?
Leonid Troyanovsky (2007-08-25 13:16:00) [10]
> wp2 © (25.08.07 13:11) [8]
> ? курсорами? в режиме для инвалидов?
Во-первых, это не для инвалидов.
Во-вторых, хотя бы, и для них.
В-третьих, форма может перемещаться путем установки ее свойств,
например: Top, Left.
--
Regards, LVT.
wp2 (2007-08-25 13:16:00) [11]Так, тот способ действительно что-то не работает, так как когда по заголовку клацаешь мышкой события мышинные не генерируются.
А ведь когда-то я такое сделал.
Так, счас попробую с TAction поработать.
engine (2007-08-25 13:12:00) [12]> [6] wp2 © (25.08.07 13:08)
Пробовал?
wp2 (2007-08-25 13:11:00) [13]? курсорами? в режиме для инвалидов?
Leonid Troyanovsky (2007-08-25 13:09:00) [14]
> wp2 © (25.08.07 13:08) [6]
> Правильно, а мышь то будет мотать форму1
Форма может и не мышью перемещаться.
--
Regards, LVT.
wp2 (2007-08-25 13:08:00) [15]Правильно, а мышь то будет мотать форму1 ;-)
engine (2007-08-25 12:57:00) [16]> [4] wp2 © (25.08.07 12:53)
ShiftState есть и в MouseMove, зачем лишние переменные?
[3] - здесь форма2 будет мотаться за мышью, а не за формой1.
wp2 (2007-08-25 12:53:00) [17]да не забудь же в MouseMove тот код выполнять когда та булевская переменная труъ.
Да не забудь же в MouseUp ту булевскую переменную в фальш :-)
wp2 (2007-08-25 12:51:00) [18]В событии MouseDown запоминаешь в булевскую переменную, что ты нажал на правую кнопку мыши.
В событии MouseMove надо написать что-то такое
Form2.Left := Form1.Left + Form1.Width;
Form2.Top := Form1.Top;
ЗЫ. Это если вторая форма будет справа от первой.
Anatoly Podgoretsky (2007-08-25 12:47:00) [19]Можно
wp2 (2007-08-25 12:47:00) [20]конкретнее, где будет первая форма, где вторая.