Карта сайтаСсылкиКонтакты

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

PDF Печать
Статьи

Как можно перемещать компонент на форме?

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

По материалам http://delphi.3000.com


 

Добавить комментарий


Защитный код
Обновить