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

Вниз

Вопросы с перемещением объектов по форме   Найти похожие ветки 

 
Keba   (2009-10-31 08:40) [0]

У меня есть форма, в которой находятся 2 панели. Какждой из них я прописал следующее:


procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
begin
releasecapture;
Menu.Perform(wm_syscommand, sc_dragmove, 0);
end;


Теперь их можно свободно перемещать их по форме нажав на них мышкой.

Первый вопрос:
Что и где нужно написать, чтобы при перемещении панелей они не выходили за границы формы и ктому же чтобы они (панели) сталкивались между собой.

Второй вопрос:
Что нужно сделать, чтобы объекты прилипали друг к другу и к краям самой формы.

Если кто не понял, что я имел в виду, то мне нужно сделать наподобие окон в фотошопе (инструменты, навигация, слои).
Пробовал с MDI, но там много заморочек.

Заранее спасибо за понимание и поддержку!


 
AIK ©   (2009-10-31 10:49) [1]

могу объяснить смысл алгоритма

> Первый вопрос:


если панель1.края=форма1.края или панель1.края=панель2.края то
 перемешения_панели:= лож;



> Второй вопрос:


если панель1.Левый_край >= 5 то
панель1.Левый_крайЖ=0;


с правым краем чуть по сложнее но принцып тод же.


 
AIK ©   (2009-10-31 10:52) [2]


> если панель1.Левый_край >= 5 то
> панель1.Левый_крайЖ=0;


если панель1.Левый_край <= 5 то
панель1.Левый_край;=0;


Хотя не знаю, надо чуть намудрить так он может прилипнуть краю и не отлипнуть.


 
Leonid Troyanovsky ©   (2009-10-31 12:11) [3]


> Keba   (31.10.09 08:40)  

By Peter Below:

type
 TWmMoving = Record
   Msg: Cardinal;
   fwSide: Cardinal;
   lpRect: PRect;
   Result: Integer;
 End;

 TForm1 = class(TForm)

 private
   { Private declarations }
   docked : Boolean;
   procedure WmMoving( Var msg: TWMMoving ); message WM_MOVING;
  end;

var
 Form1: TForm1;

{$R *.dfm}

implementation

procedure TForm1.WmMoving(var msg: TWMMoving);
var
 r: TRect;
 dx, dy: Integer;
 pt: TPoint;
begin
 SystemparametersInfo( SPI_GETWORKAREA, 0, @r, 0 );
 // snap to nearest edge if closer that 20 pixels and not docked
 dx:= 0;
 dy:= 0;
 With msg.lpRect^ Do Begin
   If docked Then Begin
     // prevent form from moving out of bounds
     If left < r.Left Then
       dx := r.left - left
     Else If top < r.top Then
       dy := r.top - top
     Else If right > r.right Then
       dx := r.right - right
     Else If bottom > r.bottom Then
       dy := r.bottom - bottom;
     If (dx <> 0) or (dy <> 0) Then Begin
       GetCursorPos( pt );
       SetCursorPos( pt.x + dx, pt.y + dy );
       Exit;
     End;
   End;

   // check if form is inside snap limits of border
   If Left <= (r.left+20) Then
     dx:= r.left - left
   Else If Top <= (r.top+20) Then
     dy :=r.top - top
   Else If Right >= (r.Right-20) Then
     dx:= r.right - right
   Else If Bottom >= (r.bottom - 20) Then
     dy := r.Bottom - Bottom;
   If (dx <> 0) or (dy <> 0) Then
     // Is inside, dock if not already docked
     If not docked Then Begin
       docked := true;
       GetCursorPos( pt );
       SetCursorPos( pt.x + dx, pt.y + dy );
       Exit;
     End
   Else
     docked := False;
 End; // With

 inherited;
end;

I hope you know how to create a
message handler for the control class.

--
Regards, LVT.


 
Keba   (2009-10-31 14:57) [4]

Leonid Troyanovsky
как это теперь добавить к Панели?


 
Leonid Troyanovsky ©   (2009-10-31 16:59) [5]


> Keba   (31.10.09 14:57) [4]

> как это теперь добавить к Панели?

http://www.podgoretsky.com/Redir.aspx?id=226&DownloadFile=~/ftp/Docs/Delphi/DX/PeterBelow.chm

See also topic: Moving components at runtime.

"I hope you know how to create a
message handler for the control class."

--
Regards, LVT.



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

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

Наверх





Память: 0.47 MB
Время: 0.005 c
4-1225224879
AndreyRus
2008-10-28 23:14
2009.12.20
Странности в определении загруженности CPU


2-1257241912
Serge
2009-11-03 12:51
2009.12.20
Как сделать перенос текста в заголовке ListView?


2-1256993677
rubma
2009-10-31 15:54
2009.12.20
Как получить код символа нажатого в данный момент в любом месте.


2-1256902521
Drowsy
2009-10-30 14:35
2009.12.20
"Откат" значений генератора.


2-1256914960
Ivan
2009-10-30 18:02
2009.12.20
Список названий сетевых соединений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский