Конференция "WinAPI" » как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST
 
  • Ruzzz © (14.10.08 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 © (14.10.08 02:54) [1]
    OnMouseMove?
  • Германн © (14.10.08 03:12) [2]
    Опять вопрос без задачи.
  • Ruzzz © (15.10.08 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} © (15.10.08 21:16) [4]
    > компонент который можно двигать

    Я те всю программу "там" уже написал :)
    И двигать можно.... и размеры менять...
    См тут:
    http://pda.delphimaster.net/?n=18&id=1223920451
    :)
 
Конференция "WinAPI" » как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST
Есть новые Нет новых   [134435   +33][b:0][p:0.002]