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

Вниз

Изменение размеров формы   Найти похожие ветки 

 
EvgeniyR   (2005-03-15 15:06) [0]

Есть форма BorderStyle := bsNone, как сделать, что бы можно было менять размеры формы? Скрывать заголовок стандартной формы не выход. Заранее спасибо.


 
Юрий Зотов ©   (2005-03-15 15:18) [1]

Обрабатывать WM_NCHITTEST и возвращать нужный результат, когда мышь находится на краях формы.


 
_1   (2005-03-15 15:29) [2]

type
 TForm1 = class(TForm)
 private
   procedure CreateParams(var Params: TCreateParams); override;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.Style:= params.Style or WS_SIZEBOX;
end;


 
EvgeniyR   (2005-03-15 16:18) [3]

Прошу прощения за неточность, на форме лежит Panel и надо что бы не было видно Border"a формы, т.е. что бы панель создавала видимость, что она и есть форма.
Спасибо за ответы.


 
_1   (2005-03-15 16:36) [4]


> EvgeniyR   (15.03.05 16:18) [3]


- а зачем, можно же панель сделать совершенно плоской (BevelOuter = brNone, BorderStyle = bsNone). (И тогда, если панель только для того чтобы иммитировать Border формы, то в сочетании с [2] панель вообще не нужна).


 
Antonn ©   (2005-03-15 16:47) [5]

Вот пожалста, один из моих велосипедов:) Cуть такова - если схватить форму(или панель) за правый нижний угол, то она будет менять размеры(см плейлист вынампа)
isFormRES:boolean;

procedure TForm1.Form1MouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ((x<= Form1.clientWidth) and (x>=Form1.clientWidth-25)) and ((y<=Form1.clientHeight) and (y>=Form1.clientHeight-25) )  then
isFormRES:=true else isFormRES:=false;
end;

procedure TForm1.Form1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var   CoorMouse: TMouse;
begin
if isformres then begin
               if ((((CoorMouse.CursorPos.y-Form1.top) div 28)*28+28)>25) then
                 Form1.Height:=(((CoorMouse.CursorPos.y-Form1.top) div 28)*28+28) else  Form1.Height:=25;

               if  ((((CoorMouse.CursorPos.x-Form1.left) div 25)*25+25)>25) then
                 Form1.Width:=(((CoorMouse.CursorPos.x-Form1.left) div 25)*25+25) else Form1.Width:=25;
               end;
end;

procedure TForm1.form1MouseUp(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
isFormRES:=false;
end;


 
EvgeniyR   (2005-03-16 09:18) [6]

>_1   (15.03.05 16:36) [4]
В том-то все и дело, что Border вообще не нужен.

>Antonn ©   (15.03.05 16:47) [5]
Спасибо, но хотелось бы, что б как в стандартной форме.


 
Юрий Зотов ©   (2005-03-16 10:33) [7]

> EvgeniyR   (16.03.05 09:18) [6]

Итак, плоская панель с Align=alClient лежит на плоской форме с BorderStyle=bsNone.

Сразу возникает вопрос - а зачем вообще нужна такая панель? Ведь она ровно ничего не дает, только бесполезно съедает ресурсы.

Вывод - выкинуть эту панель, и все становится элементарно:

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
var
 W: integer;
 P: TPoint;
begin
 W := GetSystemMetrics(SM_CXSIZEFRAME);
 with Message do
 begin
   P := ScreenToClient(SmallPointToPoint(Pos));
   if PtInRect(Rect(0, 0, W, W), P) then
     Result := HTTOPLEFT else
   if PtInRect(Rect(W, 0, Width - W, W), P) then
       Result := HTTOP else
   if PtInRect(Rect(Width - W, 0, Width, W), P) then
       Result := HTTOPRIGHT else
   if PtInRect(Rect(Width - W, W, Width, Height - W), P) then
       Result := HTRIGHT else
   if PtInRect(Rect(Width - W, Height - W, Width, Height), P) then
       Result := HTBOTTOMRIGHT else
   if PtInRect(Rect(W, Height - W, Width - W, Height), P) then
       Result := HTBOTTOM else
   if PtInRect(Rect(0, Height - W, W, Height), P) then
       Result := HTBOTTOMLEFT else
   if PtInRect(Rect(0, W, W, Height -W), P) then
       Result := HTLEFT else
   inherited
 end
end;


 
Юрий Зотов ©   (2005-03-16 10:38) [8]

> EvgeniyR   (16.03.05 09:18) [6]

А уж если без панели никак не обойтись, то просто не ставить ей Align=alClient, а поставить Align=alNone, выставить размеры чуть меньше размеров формы и привязать к краям формы через Anchors.


 
EvgeniyR   (2005-03-16 12:50) [9]

> Юрий Зотов ©   (16.03.05 10:33) [7]
Спасибо большое, то, что я хотел.


 
Юрий Зотов ©   (2005-03-16 14:51) [10]

> EvgeniyR   (16.03.05 12:50) [9]

Эх, Евгений... об этом же сразу, еще в [1] было сказано. Наверное ведь, не просто так.
:-(



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

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

Наверх





Память: 0.47 MB
Время: 0.04 c
1-1110529251
Georji
2005-03-11 11:20
2005.03.27
Состояние файла


3-1109362678
ali_tash
2005-02-25 23:17
2005.03.27
как войти в базу FireBird если не знаеш пароля ?


3-1109434120
Mortal
2005-02-26 19:08
2005.03.27
Как создать Indexы для dBase?


14-1110301938
SomeMan
2005-03-08 20:12
2005.03.27
Задачка


3-1109543338
serko
2005-02-28 01:28
2005.03.27
Выбор принтера при печати!





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