![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как "ловить мышку" после ответа 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?