Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

Как перемещать две формы ОДНОВРЕМЕННО?   Найти похожие ветки 

 
Sidex   (2005-08-24 16:27) [0]

Допустим, есть две формы. Необходимо при перемещении первой формы переместить вторую по тому же вектору перемещения (грубо говоря на то же расстояние по вертикали и горизонтали).
Пример: окна winamp"а (при перемещении плеера окно плейлиста перемещается вместе с ним).


 
Суслик ©   (2005-08-24 18:30) [1]

1. Если тебе нужно реализовать совместное перемещение форм в случае если курсор мышки нажат внутри формы, то это просто - нужно использовать события формы OnMouseDown, OnMouseMove, OnMouseUp

2. Если двигаешь форму за заголовок, то я НЕ знаю как сделать просто. Но вот этот код работает

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm2 = class(TForm)
 private
    fX,fY: integer;
    fAnotherFormX,fAnotherFormY: integer;
    fDrugging: Boolean;
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
    procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;
 end;

var
 Form2: TForm2;

implementation

uses Unit3, Types;

{$R *.dfm}

procedure TForm2.WMMove(var Message: TWMMove);
begin
  if fDrugging then
  begin
     Form3.Left := fAnotherFormX + Mouse.CursorPos.X - fX;
     Form3.Top := fAnotherFormY + Mouse.CursorPos.Y - fY;
  end;
  inherited;
end;

procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType = 61458 then
  begin
     fX := Message.XPos;
     fY := Message.YPos;
     fAnotherFormX := form3.left; // form3 - это переменная, содержащая форму,
                                  // которую двигаем вместе с текущей формой
     fAnotherFormY := form3.top;
     fDrugging := True;
  end;
  inherited;
end;

procedure TForm2.WMExitSizeMove(var Message: TMessage);
begin
  fDrugging := False;
  inherited;
end;

end.


 
Суслик ©   (2005-08-24 18:47) [2]

Тут поправочка по советам бывалых назрела

procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType and $FFF0 = SC_MOVE then
  begin
     fX := Message.XPos;
     fY := Message.YPos;
     fAnotherFormX := form3.left;      
     fAnotherFormY := form3.top;
     fDrugging := True;
  end;
  inherited;
end;

procedure TForm2.WMExitSizeMove(var Message: TMessage);
begin
  fDrugging := False;
  Message.Result := 0;  
  inherited;
end;


 
Суслик ©   (2005-08-24 19:06) [3]

Бывалые товарищи дали свой код. См. здесь, если интересно http://delphimaster.net/view/4-1124894011/


 
Игорь Шевченко ©   (2005-08-24 19:09) [4]


>  fDrugging := False;


fDragging.

Drugging - это несколько из другой оперы ;)


 
Суслик ©   (2005-08-24 19:14) [5]


>  [4] Игорь Шевченко ©   (24.08.05 19:09)
>
> >  fDrugging := False;
> fDragging.
> Drugging - это несколько из другой оперы ;)


Согласен. Неточный термин.


 
Sidex   (2005-08-24 22:26) [6]

Всем спасибо.
Суслик, использовал твой способ. Дело в том, что мне как раз нужно было отследить начало перемещения окна, так как второе окно перемещается вместе с первым по конкретному условию (которое изменяется, стоит сдвинуть первое окно с места). А у тебя очень удобно применяется следующая конструкция:
вместо fDragging:=True ставлю if [условие] then fDragging:=True.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.014 c
10-1102629822
turonix
2004-12-10 01:03
2005.09.18
Создание Excel файла


14-1124685345
Dreamse
2005-08-22 08:35
2005.09.18
Dialogic and Delphi


4-1122463628
Dust
2005-07-27 15:27
2005.09.18
Глобальный системный флаг


4-1122476693
Lito
2005-07-27 19:04
2005.09.18
Проблема с textout


14-1124296161
Ксардас
2005-08-17 20:29
2005.09.18
А не подскажите...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский