Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Формы [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]

конкретнее, где будет первая форма, где вторая.


Наверх

Титульная страница Поиск, карта сайта Написать письмо