Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизИзменение размера формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.07 c