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

Вниз

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

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

Наверх




Память: 0.49 MB
Время: 0.059 c
3-1109686597
juice
2005-03-01 17:16
2005.03.27
Индикатор долгого SQL-запроса


3-1108920324
SMT
2005-02-20 20:25
2005.03.27
SQL-запрос на создание вычисляемого поля


3-1109682373
Mishenka
2005-03-01 16:06
2005.03.27
Как узнать индекс выделенной строки в DBGrid?


9-1104846353
Trof
2005-01-04 16:45
2005.03.27
glscene


3-1109325756
prosoft
2005-02-25 13:02
2005.03.27
ODAC и Oracle Objects проблема