Вниз
Скачать: CL | DM;

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

 
Ruzzz ©   (2008-10-14 02:49) [0]

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

Делаю так:

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 вызывается только после того как отпустили кнопку мышки :(


 
Eraser ©   (2008-10-14 02:54) [1]

OnMouseMove?


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

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


 
Ruzzz ©   (2008-10-15 20:37) [3]

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

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

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.


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


 
{RASkov} ©   (2008-10-15 21:16) [4]

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

Я те всю программу "там" уже написал :)
И двигать можно.... и размеры менять...
См тут:
http://delphimaster.net/view/2-1223920451/
:)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
15-1254496978
Германн
2009-10-02 19:22
2009.11.29
Название контакта датчика


4-1223290644
zensan
2008-10-06 14:57
2009.11.29
WindowHook WH_CALLWNDPROCRET


2-1255360512
Johnnnnn
2009-10-12 19:15
2009.11.29
убрать выскакивающее окно asynchronous socket error?


2-1255601111
xyz
2009-10-15 14:05
2009.11.29
где ошибка в запросе?


2-1255347243
Alex4555
2009-10-12 15:34
2009.11.29
Как работает assignfile




   Наверх