Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: 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 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
15-1254408944
БарЛог
2009-10-01 18:55
2009.11.29
Чёрное пятно на ЖК мониторе


1-1225831632
lemur
2008-11-04 23:47
2009.11.29
Поиск слова в RichEdit


2-1255588435
RDen
2009-10-15 10:33
2009.11.29
LIKE в ADOQuery без учёта регистра


15-1254342609
Юрий
2009-10-01 00:30
2009.11.29
С днем рождения ! 1 октября 2009 четверг


2-1253455939
antonn
2009-09-20 18:12
2009.11.29
процедура возвращающая параметр заполняемые в потоке