![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение размера формы [D7, XP]
Grumd © (2010-04-25 16:42:00)Нужно сделать что бы можно было менять размер формы только за нижний правый угол (или еще за нижний и правый края). Подскажите, что делать, эксперты?)
Grumd (2010-04-25 18:32:00) [1]спасибо)
DVM (2010-04-25 18:31:00) [2]
> уже разобрался.
и что это?
вот так надо:
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:26:00) [3]уже разобрался.
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:24:00) [4]
> If Message.Result=HTBORDER then
> будет работать?
нет
Grumd (2010-04-25 18:10:00) [5]
If Message.Result=HTBORDER then
будет работать?
Grumd (2010-04-25 18:09:00) [6]теперь буду знать, как перехватывать сообщения ..
private
procedure OnNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
а определять, где курсор надо как? вытащить из WM_NCHITTEST всякие HTBORDER?..
DVM (2010-04-25 17:52:00) [7]И не забывай, сто бордюр окна вещь непостоянной ширины - его ширину надо получать (GetSystemMetrics вроде)
DVM (2010-04-25 17:50:00) [8]
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.
Grumd (2010-04-25 17:45:00) [9]в принципе это понятно, я просто не знаю как перехватить эти WM_NCHITTEST
DVM (2010-04-25 17:42:00) [10]
> Grumd © (25.04.10 17:35) [3]
все довольно просто: когда пользователь водит мышкой по бордюру окна, окну приходят многочисленные WM_NCHITTEST. Вот для определенных координат ты должен возвращать, например, HTCLIENТ, тогда в этих координатах не будет возможности начать изменение размеров окна.
Grumd (2010-04-25 17:35:00) [11]уф... жаль я в в нем не разбираюсь. но буду тогда гуглить по винапи
DVM (2010-04-25 17:31:00) [12]WM_NCHITTEST
sdrf (2010-04-25 17:05:00) [13]наверняка функции работы с элементами оформления есть в WinApi