Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi

Ответить
Настройки темы
Delphi - Delphi

Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как сделать, чтобы по достижению опренделенного размера, при перетаскивание бордюра мышкой, размер формы переставал изменяться...

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 16:57, 15-11-2002

 
Fobos


Сообщения: n/a

Профиль | Цитировать


У формы есть свойство: Constraints. Надо установить предельные значения максимальной высоты и ширины формы: Constraints.MaxWidth и Constraints.MinHeight.

Отправлено: 10:32, 18-11-2002 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Constraints
попробовал, это не то что мне нужну, дело в том, что изменение размеров разрешенно, т.е. если стоит 300 я могу поставить 400, но после того как я поставлю форма автоматически изменет свой размер на 300, дело в том что когда происходит изменение размера на тот который мы задали форма может сдвинуться с места, т.е. начинает перемещаться по экрану, что выглядит весьма коряво, особенно когда тянешь сверху-вниз, она может вообще уехать за пределы экрана (я такое же получил, когда в обработчике событий, возникающем при изменении экрана указал не изменяться менее определенных размеров)... а я хочу чтобы достигался эффект подобный тому когда нельзя вообще изменять размеры формы, когда устанавливается "тонкий бордюр", но только в определенном диапазоне размера формы...

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 05:33, 19-11-2002 | #3


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
Какая версия дельфи?


Добавлено:

У формы OnCanResize есть или что-то типа этого?

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 17:27, 19-11-2002 | #4


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


vasketsov Delphi 5 там есть OnResize, OnCanResize и OnConstrainedResize но они мне не подходят, почему я объяснил выше...

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 16:44, 21-11-2002 | #5


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
При OnCanResize так и работает как написал, причем у меня в Delphi5 это используется.

Хочешь "правильно" - обрабатывай сообщения WM_SIZING и WM_MOVING.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 17:18, 21-11-2002 | #6


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Хочешь "правильно" - обрабатывай сообщения WM_SIZING и WM_MOVING.
хочу, только вот с этим никогда дела не имел и ничего у меня не получается...

это то до чего я дошел, только вот уже сил нет, по крайней мере сегодня, я вообще не могу понять как эта штука работает, вроде все пишется одинаково, а результата никакого

Код: Выделить весь код
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure qwe1(var message :Tmessage); message wm_size;
    procedure mtop(var message:Tmessage); message wmsz_top;
    procedure mleft(var message:Tmessage); message wmsz_left;

                         ...

 procedure Tform1.qwe1(var message:Tmessage);
   var h:integer;
   begin
      if form1.Height<200 then form1.Height:=200;
      if form1.width<200 then form1.width:=200;
   end;

 procedure tform1.mtop(var message:Tmessage);
   var h:integer;
   begin
      h:=form1.height;
      if form1.Height<200 then form1.Height:=200;
      if (200-h)>0 then form1.top:=form1.top-(200-h);
   end;

 procedure Tform1.mleft(var message:Tmessage);
   var w:integer;
   begin
   showmessage('');
      w:=form1.width;
      if form1.width<200 then form1.width:=200;
      if (200-w)>0 then form1.left:=form1.left-(200-w);
   end;
с помощью процедуры qwe1 я добиваюся того же результата, что и при помощи обработчика событий, то есть окно не уменьшается менее заданных размеров, но скачет когда я изменяю его размеры сверху-вниз и слева-направо...

с помощью mtop я добился того чтобы она не скакала при изменении размеров сверху-вниз, думал такое же повторить, для слева-направо с помощью mleft но не прокатило, к тому же моя форма также скачет если ее тащить за углы, в смысле изменять размеры... можно конечно попробовать написать что-то типа mtop и для этого случая, но что если получится также как и с mleft... короче я в тупике... может я все таки не с той стороны подошел, как обычно, не там ищу...

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 12:57, 23-11-2002 | #7


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
Цитата:
WM_SIZING и WM_MOVING
Это не то же самое что и WM_SIZE и WM_MOVE.
Читай на msdn.microsoft.com

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 13:55, 25-11-2002 | #8


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
    procedure qwe1(var message :Tmessage); message wm_sizing;

...

 procedure Tform1.qwe1(var message:Tmessage);
   type R=record
        left:Longint;
        top:Longint;
        right:Longint;
        bottom:Longint;
        end;

   var h:integer;
       myRect:^R;        //       longint
       mRect:R;
   begin
{   myRect:=@(message.lparam);} {НЕТРОГАТЬ!!!}
 myRect:=ptr(message.lparam);
 mrect:=Myrect^;
 label1.caption:=inttostr(mRect.Top)+#13+inttostr(mRect.Bottom)+#13+inttostr(mRect.left)+#13+inttostr(mRect.Right);
 label2.caption:=inttostr(mrect.bottom-mrect.top);

 if mrect.bottom-mrect.top<300 then
  begin
   form1.BorderStyle:=bsSingle;
   form1.BorderStyle:=bsSizeAble;
   form1.height:=300;                        //repaint
   form1.invalidate;
   beep;
  end;
 if mrect.right-mrect.left<300 then
  begin
   form1.BorderStyle:=bsSingle;
   form1.BorderStyle:=bsSizeAble;
   form1.width:=300;
   form1.invalidate;
   beep;
  end;
  form1.invalidate; //repaint; refresh;
end;
вроде работает, т.е. форма перестает изменять размеры при достижении одного из недопустимых параметров, но как это коряво все работает просто ужас

Код: Выделить весь код
form1.BorderStyle:=bsSingle;
 form1.BorderStyle:=bsSizeAble;
это чтобы мышка форму отпустила

Код: Выделить весь код
 form1.invalidate; //repaint; refresh;
это я пытаюсь все перерисовать, но все равно все коряво...

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 09:35, 30-11-2002 | #9


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
The WM_SIZING message is sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position.

Делается примерно так.
Во-первых, надо вызывать inherited;
Во-вторых, перед этим, если не надо ничего делать, просто возвращаешь 0 (в документации написано, что надо TRUE возвращать).

То же  для WM_MOVING.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 16:00, 02-12-2002 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Delphi | UpperCase на Delphi 7 Cognolio Программирование и базы данных 3 26-01-2006 15:42
Delphi - C++ vs Delphi BigMac Программирование и базы данных 76 13-01-2004 09:54
Delphi - Delphi Surround Программирование и базы данных 11 10-01-2004 22:13
Delphi - Delphi Zx Программирование и базы данных 3 27-08-2003 10:19
Delphi - Delphi Roman Go Программирование и базы данных 9 25-12-2002 15:48




 
Переход