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

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

как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST


Ruzzz ©   (2008-10-14 02:49:00) 

нужно следить за мышкой, пока не отпущена кнопка мыши! Как это сделать?

Делаю так:

procedure WMNCHITTEST(var Message : TMessage); message  WM_NCHITTEST;

...

procedure TMoveControl.WMNCHITTEST(var Message: TMessage);
begin
 if not (csDesigning in ComponentState) then begin
   Message.Result := HTCAPTION;
   if Assigned(FOnMove) then begin
     FOnMove(Self);
   end;
 end else
   Message.Result := HTCLIENT;
end;


но OnMove вызывается только после того как отпустили кнопку мышки :(


{RASkov}   (2008-10-15 21:16:00) [1]

> компонент который можно двигать

Я те всю программу "там" уже написал :)
И двигать можно.... и размеры менять...
См тут:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1223920451
:)


Ruzzz   (2008-10-15 20:37:00) [2]

все оказалось просто! :)

вот что я писал:

unit MoveControl;

interface

uses
 SysUtils, Classes, Controls, Messages, WinProcs, Graphics;

type
 TMoveEvent = procedure(Sender: TObject; const X, Y: Integer) of object;
 TPaintEvent = procedure(Sender: TObject; Canvas: TCanvas) of object;

 TMoveControl = class(TCustomControl)
 private
   FOnMove: TMoveEvent;
   FOnPaint: TPaintEvent;
   { Private declarations }
 protected
   { Protected declarations }
   procedure Paint; override;
   procedure WMNCHITTEST(var Message : TMessage); message  WM_NCHITTEST;
   procedure WMMOVE(var Message : TMessage); message WM_MOVE;
 public
   { Public declarations }
   constructor Create(AOwner: TComponent); override;
 published
   { Published declarations }
   property OnMove: TMoveEvent read FOnMove write FOnMove;
   property OnPaint: TPaintEvent read FOnPaint write FOnPaint;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('Samples', [TMoveControl]);
end;

{ TMoveControl }

constructor TMoveControl.Create(AOwner: TComponent);
begin
 inherited;
 Cursor := crSizeNWSE;
end;

procedure TMoveControl.Paint;
begin
 inherited;
 if not (csDesigning in ComponentState) and Assigned(OnPaint) then begin
   FOnPaint(Self, Canvas);
 end else begin
   Canvas.Brush.Style := bsSolid;
   Canvas.Brush.Color := clRed;
   Canvas.Pen.Color := clRed;
   Canvas.FillRect(ClientRect);
 end;
end;

procedure TMoveControl.WMMOVE(var Message: TMessage);
begin
 if Assigned(FOnMove) then begin
   FOnMove(Self, message.LParamLo, Message.LParamHi);
 end;
end;

procedure TMoveControl.WMNCHITTEST(var Message: TMessage);
begin
 if not (csDesigning in ComponentState) then begin
   Message.Result := HTCAPTION;
 end else
   Message.Result := HTCLIENT;
end;

end.


компонент который можно двигать


Германн   (2008-10-14 03:12:00) [3]

Опять вопрос без задачи.


Eraser   (2008-10-14 02:54:00) [4]

OnMouseMove?


Наверх

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