Как можно перемещать компонент на форме? Все, что нужно сделать — переписать динамический метод MouseDown основного класса TControl и вызывать событие WM_SYSCOMMAND с «волшебным» ключом $F012
unit HREdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
THREdit = class(TEdit)
private
fDragable:Boolean;
protected
procedure MouseDown(Button: TMouseButton;Shift: TShiftState;
X, Y: Integer);override;
public
Constructor Create(AOwner:TComponent);override;
Destructor Destroy;override;
published
property Dragable:Boolean read fDragable write fDragable;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('HEADROOM DEVELOPMENT', [THREdit]);
end;
{ THREdit }
constructor THREdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor THREdit.Destroy;
begin
inherited;
end;
procedure THREdit.MouseDown(Button: TMouseButton;
Shift: TShiftState; X,
Y: Integer);
const
SC_DragMove = $F012; // Важный ключ !!
begin
inherited;
if assigned(onMouseDown)then
OnMouseDown(self,Button,Shift,x,y);
if fDragable then
begin
ReleaseCapture;
(self as TControl).perform(WM_SysCommand, SC_DragMove, 0);
end;
end;
end.
Комментарии