Trabalhar com diversas Classes

Delphi

15/06/2011

Dica nº 164 retirada do DTDelphi 2.8 O código abaixo tem três métodos, para um componente, eu queria fazer O.O. e aplicar a n componentes da tela de diversas classes, TEdit, TBitBtn, TButton, etc... apenas uma vez, visto que a herança é diferente, mas todos possuem Top e Left. att..  
unit uMoverBotao;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type
  TfrmMoverBotao = class(TForm)
    btnSair: TBitBtn;
    BitBtn1: TBitBtn;
    procedure FormShow(Sender: TObject);
    procedure btnSairClick(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
  public
    MouseDownSpot: TPoint;
    Capturing: bool;
  end;
var
  frmMoverBotao: TfrmMoverBotao;
implementation
{$R *.dfm}
procedure TfrmMoverBotao.FormShow(Sender: TObject);
begin
  ShowMessage('Mantenha a tecla <ctrl> Pressionada e mova o botão');
end;
procedure TfrmMoverBotao.btnSairClick(Sender: TObject);
begin
  Self.Close;
end;
procedure TfrmMoverBotao.FormMouseMove(Sender: TObject; Shift: TShiftState;  X, Y: Integer);
begin
  if Capturing then
  begin
    BitBtn1.Left := BitBtn1.Left - (MouseDownSpot.x - x);
    BitBtn1.Top := BitBtn1.Top - (MouseDownSpot.y - y);
  end;
end;
procedure TfrmMoverBotao.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ssCtrl in Shift then
  begin
    SetCapture(BitBtn1.Handle);
    Capturing := True;
    MouseDownSpot.X := x;
    MouseDownSpot.Y := Y;
  end;
end;
procedure TfrmMoverBotao.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then
  begin
    ReleaseCapture;
    Capturing := False;
    BitBtn1.Left := BitBtn1.Left - (MouseDownSpot.x - x);
    BitBtn1.Top := BitBtn1.Top - (MouseDownSpot.y - y);
  end;
end;
end.
Nigro

Nigro

Curtidas 0

Respostas

Marco Salles

Marco Salles

15/06/2011

O seu exemplo comigo não funcionou. .... ??? O BitBtn simplesmente some 
GOSTEI 0
Nigro

Nigro

15/06/2011

Uso Delphi 7
GOSTEI 0
Marco Salles

Marco Salles

15/06/2011

Nen no Delphi 7 eu consegui .. Se quiser eu lhe passo o projeto.

Algume mais podia testar

utilizo Vista
GOSTEI 0
Nigro

Nigro

15/06/2011

Resolvido:
procedure Tfrm1.FormCreate(Sender: TObject);
var
  iContador: Integer;
begin
  for iContador := 0 to Self.ComponentCount - 1 do
  begin
    THackControl(Self.Components[iContador]).OnMouseDown := BitBtn1MouseDown;
    THackControl(Self.Components[iContador]).OnMouseUp := BitBtn1MouseUp;
    THackControl(Self.Components[iContador]).OnMouseMove := BitBtn1MouseMove;
  end;
end;
GOSTEI 0
José

José

15/06/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR