Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение размера формы [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо