Главная страница
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.065 c
2-1267693170
00110011
2010-03-04 11:59
2010.08.27
раздел const


4-1237551600
mreg
2009-03-20 15:20
2010.08.27
Как отловить вызов WinApi функции?


15-1267230629
Юрий
2010-02-27 03:30
2010.08.27
С днем рождения ! 27 февраля 2010 суббота


15-1263814649
Делфиец
2010-01-18 14:37
2010.08.27
Заколебали спамеры, как защитьться


6-1216680107
flaxe
2008-07-22 02:41
2010.08.27
Winsock HTTP Auth.