Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.20;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1256795460
Rimdus
2009-10-29 08:51
2009.12.20
Компонент без отладки


2-1257257601
RWolf
2009-11-03 17:13
2009.12.20
VirtualTreeView


15-1255799077
interrupt
2009-10-17 21:04
2009.12.20
неполадки монитора


15-1255765672
Virgo_Style
2009-10-17 11:47
2009.12.20
Раздача слонов - Paragon Partition Manager 9.5 Professional


2-1257255804
@!!ex
2009-11-03 16:43
2009.12.20
Подскажите контрол для реализации слоев