Внешний вид сайта:

Перемещение компонентов на форме

Как можно перемещать компонент на форме? Все, что нужно сделать — переписать динамический метод 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.

Комментарии

Нет комментариев. Ваш будет первым!