Главная страница
    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.055 c
14-1110159314
Doxygen
2005-03-07 04:35
2005.03.27
Посоветуйте утилиту


14-1109861683
Хинт
2005-03-03 17:54
2005.03.27
Не могу удалить файл. Всё очень странно.


1-1110547461
Zilog
2005-03-11 16:24
2005.03.27
Можно ли писать приложения для Win CE .Net в среде Dlelphi 2005?


3-1109686597
juice
2005-03-01 17:16
2005.03.27
Индикатор долгого SQL-запроса


3-1109834628
Arnold
2005-03-03 10:23
2005.03.27
Как узнать индекс записи выбранной из DBGrid





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