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

Вниз

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

 
Grumd ©   (2010-04-25 16:42) [0]

Нужно сделать что бы можно было менять размер формы только за нижний правый угол (или еще за нижний и правый края). Подскажите, что делать, эксперты?)


 
sdrf   (2010-04-25 17:05) [1]

наверняка функции работы с элементами оформления есть в WinApi


 
DVM ©   (2010-04-25 17:31) [2]

WM_NCHITTEST


 
Grumd ©   (2010-04-25 17:35) [3]

уф... жаль я в в нем не разбираюсь. но буду тогда гуглить по винапи


 
DVM ©   (2010-04-25 17:42) [4]


> Grumd ©   (25.04.10 17:35) [3]

все довольно просто: когда пользователь водит мышкой по бордюру окна, окну приходят многочисленные WM_NCHITTEST. Вот для определенных координат ты должен возвращать, например, HTCLIENТ, тогда в этих координатах не будет возможности начать изменение размеров окна.


 
Grumd ©   (2010-04-25 17:45) [5]

в принципе это понятно, я просто не знаю как перехватить эти WM_NCHITTEST


 
DVM ©   (2010-04-25 17:50) [6]


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private
   procedure OnNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnNCHitTest(var Message: TWMNCHitTest);
begin
 Message.Result := HTCLIENT;
end;

end.



 
DVM ©   (2010-04-25 17:52) [7]

И не забывай, сто бордюр окна вещь непостоянной ширины - его ширину надо получать (GetSystemMetrics вроде)


 
Grumd ©   (2010-04-25 18:09) [8]

теперь буду знать, как перехватывать сообщения ..
   private
procedure OnNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;

а определять, где курсор надо как? вытащить из WM_NCHITTEST всякие HTBORDER?..


 
Grumd ©   (2010-04-25 18:10) [9]

If Message.Result=HTBORDER then
будет работать?


 
DVM ©   (2010-04-25 18:24) [10]


> If Message.Result=HTBORDER then
> будет работать?

нет


 
Grumd ©   (2010-04-25 18:26) [11]

уже разобрался.
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
   procedure FormActivate(Sender: TObject);
 private
   procedure OnNCHitTest(var Msg: TMsg; var Handled: Boolean);
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

procedure TForm1.OnNCHitTest(var Msg: TMsg; var Handled: Boolean);
 var i :integer;
begin
 Form1.Caption:=IntToStr(Msg.Message);
 //Msg.message:=HTCLIENT;
end;

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
 Application.OnMessage:=OnNCHitTest;
end;

end.


 
DVM ©   (2010-04-25 18:31) [12]


> уже разобрался.

и что это?

вот так надо:

procedure TForm1.OnNCHitTest(var Message: TWMNCHitTest);
var
 pt: TPoint;
begin
 pt.x := Message.XPos;
 pt.Y := Message.YPos;
 pt := ScreenToClient(pt);
 if pt.x < GetSystemMetrics(SM_CYBORDER) then
   Message.Result := HTCLIENT
 else
   inherited;
end;


 
Grumd ©   (2010-04-25 18:32) [13]

спасибо)



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
2-1272622374
slay64
2010-04-30 14:12
2010.08.27
Хранимая процедура


8-1204709161
IGray
2008-03-05 12:26
2010.08.27
Как создать объект DirectDraw на втором мониторе?


15-1274076594
Anatoly Podgoretsky
2010-05-17 10:09
2010.08.27
Выбор писалки DVD


2-1273477863
Elena
2010-05-10 11:51
2010.08.27
перенос exe-шника скомпилированный delphi 2009, на комп где delph


2-1265715158
webpauk
2010-02-09 14:32
2010.08.27
Проблема с отображением TLabel в TScrollBox