Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Манипуляции с формой


Автор: Clasteruga 7.4.2011, 17:56
Всем доброго времени суток...........есть форма 1 и форма 2, как сделать что бы форма 2 при ее передвижении мышью не могла выйти за пределы 1 формы, как бы просто упиралась в 1 форму.......

Автор: Snowy 7.4.2011, 18:15
Код
Form2.Parent := Form1;
?

Автор: Clasteruga 8.4.2011, 09:06
А без использования form2.parent:=form1; можно както программно указать 2 форме при подводе ее к граница 1 формы, что бы 2 форма как бы упиралась в края 1 формы и не могла выйти за границы

Что-то типа if Form2.Left + Form2.Width > Form1.Width then (как дальше описать) ?????

Автор: Frees 8.4.2011, 09:19
Цитата(Clasteruga @  8.4.2011,  12:06 Найти цитируемый пост)
(как дальше описать) 

Form2.Left := Form1.Width - Form2.Width;

Автор: Clasteruga 8.4.2011, 09:52
Цитата(Frees @ 8.4.2011,  09:19)
Цитата(Clasteruga @  8.4.2011,  12:06 Найти цитируемый пост)
(как дальше описать) 

Form2.Left := Form1.Width - Form2.Width;

Не что-то не то получается ((((

Автор: Frees 8.4.2011, 09:57
Form2.Left := (Form1.Left + Form1.Width) - Form2.Width;

Автор: Clasteruga 8.4.2011, 10:06
Прикольно но немного не то: надо что бы при перемещении мышью формы 2, когда границы формы2 доходят до границы формы 1, то перетаскивание формы2 становилось бы невозможным, что-то типа 2форма упирается в границы 1

Автор: Frees 8.4.2011, 10:32
Цитата(Clasteruga @  8.4.2011,  13:06 Найти цитируемый пост)
Прикольно но немного не то: надо что бы при перемещении мышью формы 2, когда границы формы2 доходят до границы формы 1, то перетаскивание формы2 становилось бы невозможным, что-то типа 2форма упирается в границы 1

и в чем проблема? 
как ограничить смещение написано выше
лови сообщение WM_MOVE для 2 формы и пиши там свой этот код

Автор: Clasteruga 8.4.2011, 10:46
Никогда подобного не делал.......уважаемый Frees научите ловить сообщение WM_MOVE для 2 формы, не серчайте сильно, я только начинающий(ведь ходить мы не сразу научились)  smile  

Автор: Frees 8.4.2011, 10:50
http://www.cryer.co.uk/brian/delphi/howto_capture_onmove_event.htm

Добавлено через 1 минуту и 48 секунд
наверно лучше ловить WM_MOVING

Автор: Clasteruga 11.4.2011, 10:24
Вот сделал, а как сделать для правого края?

procedure TForm2.WMMoving(var Msg: TWMMoving);
var
workArea: TRect;
begin
with Msg.DragRect^ do
begin
if Form2.Left < Form1.Left then
OffsetRect(Msg.DragRect^, Form1.Left - Left, 0) ;
if Form2.Top < Form1.Top then
OffsetRect(Msg.DragRect^, 0, Form1.Top - Top) ;
end;
inherited;
end;

Автор: Gwire 12.4.2011, 17:55
Код

procedure TForm2.FormCreate(Sender: TObject);
begin
    Form2.Parent:= Form1;
end;

procedure TForm2.WMMoving(var Msg: TWMMoving);
var R: TRect;
begin
    R.TopLeft     := Form1.ScreenToClient( Msg.DragRect^.TopLeft );
    R.BottomRight := Form1.ScreenToClient( Msg.DragRect^.BottomRight );

    if R.Left < 0 then OffsetRect(Msg.DragRect^, -R.Left, 0);
    if R.Top  < 0 then OffsetRect(Msg.DragRect^, 0, -R.Top);
    if R.Right  > Form1.ClientWidth  then OffsetRect(Msg.DragRect^, Form1.ClientWidth-R.Right, 0);
    if R.Bottom > Form1.ClientHeight then OffsetRect(Msg.DragRect^, 0, Form1.ClientHeight-R.Bottom);

    inherited;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)