Hoje, vamos aprender como movimentar (arrastar) qualquer objeto na tela do formulário, utilizando apenas o mouse. Para o objeto ser arrastado em qualquer direção, são necessários alguns ajustes.
Neste exemplo, vamos utilizar uma Label
Neste exemplo, vamos utilizar uma Label
(TLabel da Paleta Standart) e um Botão (TBitBtn da Paleta Additional).
Nome do formulário será: FMovObj.
>> Vamos precisar de três procedimentos: ControlMouseDown, ControlMouseUp, ControlMouseMove;
>> De uma classe TMoveControle do tipo TControl;
Observação: A classe TMoveControle será declarado em Type.
>> E de três variáveis: moveX, moveY do tipo Inteiro (integer) e mover do tipo (boolean). Essas variáveis são globais.
Definições:
>> Type -> com esta clausula podemos declarar Novos Tipos e/ou Classes.
>> Variáveis Globais -> declaradas da Interface da Unit. Podem ser acessadas por qualquer Unit usuária.
Como o entendimento desse código é um pouco mais complicado, colocarei aqui toda a Unit.
unit uMovObj;
interfaceuses
Classes, Controls, StdCtrls, Forms, Buttons;
type
TFMovObj = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
Label2: TLabel;
{Procedimentos para o objeto se mover}
procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FMovObj: TFMovObj;
{variáveis necessárias}
moveX, moveY: Integer;
mover: boolean;
implementation
{$R *.dfm}
{-----------------------------------------------------
{ Iniciando codificação de Movimentação de Objetos.
{----------------------------- ------------------------}
{Mover Componentes RunTime}
type
TMoveControle = class(TControl);
procedure TFMovObj.ControlMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
moveX := X;
moveY := Y;
mover := True;
TMoveControle(Sender).MouseCapture := True;
end;
procedure TFMovObj.ControlMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
Begin
Left := X-moveX+Left;
end;
end;
procedure TFMovObj.ControlMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if mover then begin
mover := False;
TMoveControle(Sender).MouseCapture := False;
end;
end;
{-----------------------------------------------------
{ Finalizando codificação de Movimentação de Objetos.
{-----------------------------------------------------}
Para que cada objeto que colocamos na tela (Label, Botão) funcione, é preciso linka-los com os procedimentos codificados.
-----------------------
Linkando a Label -> Selecione a Label, e em Eventos faça:
-> No Evento OnMouseDown, selecione a procedure ControlMouseDown.
-> No Evento OnMouseMove, selecione a procedure ControlMouveMove.
-> No Evento OnMouseUp, selecione a procedure ControlMouseUp.
-----------------------
Linkando o Botão -> Selecione o Botão, e em Eventos faça:
-> No Evento OnMouseDown, selecione a procedure ControlMouseDown.
-> No Evento OnMouseMove, selecione a procedure ControlMouveMove.
-> No Evento OnMouseUp, selecione a procedure ControlMouseUp.
*********************************************************************
"Só fazemos melhor aquilo que repetidamente insistimos em melhorar.
A busca da excelência não deve ser um objetivo e sim um hábito." Aristóteles.
Nome do formulário será: FMovObj.
>> Vamos precisar de três procedimentos: ControlMouseDown, ControlMouseUp, ControlMouseMove;
>> De uma classe TMoveControle do tipo TControl;
Observação: A classe TMoveControle será declarado em Type.
>> E de três variáveis: moveX, moveY do tipo Inteiro (integer) e mover do tipo (boolean). Essas variáveis são globais.
Definições:
>> Type -> com esta clausula podemos declarar Novos Tipos e/ou Classes.
>> Variáveis Globais -> declaradas da Interface da Unit. Podem ser acessadas por qualquer Unit usuária.
Como o entendimento desse código é um pouco mais complicado, colocarei aqui toda a Unit.
unit uMovObj;
interfaceuses
Classes, Controls, StdCtrls, Forms, Buttons;
type
TFMovObj = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
Label2: TLabel;
{Procedimentos para o objeto se mover}
procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FMovObj: TFMovObj;
{variáveis necessárias}
moveX, moveY: Integer;
mover: boolean;
implementation
{$R *.dfm}
{-----------------------------------------------------
{ Iniciando codificação de Movimentação de Objetos.
{----------------------------- ------------------------}
{Mover Componentes RunTime}
type
TMoveControle = class(TControl);
procedure TFMovObj.ControlMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
moveX := X;
moveY := Y;
mover := True;
TMoveControle(Sender).MouseCapture := True;
end;
procedure TFMovObj.ControlMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if mover then begin
with Sender As TControl DoBegin
Left := X-moveX+Left;
Top := Y-moveY+Top;
End;end;
end;
procedure TFMovObj.ControlMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if mover then begin
mover := False;
TMoveControle(Sender).MouseCapture := False;
end;
end;
{-----------------------------------------------------
{ Finalizando codificação de Movimentação de Objetos.
{-----------------------------------------------------}
Para que cada objeto que colocamos na tela (Label, Botão) funcione, é preciso linka-los com os procedimentos codificados.
-----------------------
Linkando a Label -> Selecione a Label, e em Eventos faça:
-> No Evento OnMouseDown, selecione a procedure ControlMouseDown.
-> No Evento OnMouseMove, selecione a procedure ControlMouveMove.
-> No Evento OnMouseUp, selecione a procedure ControlMouseUp.
-----------------------
Linkando o Botão -> Selecione o Botão, e em Eventos faça:
-> No Evento OnMouseDown, selecione a procedure ControlMouseDown.
-> No Evento OnMouseMove, selecione a procedure ControlMouveMove.
-> No Evento OnMouseUp, selecione a procedure ControlMouseUp.
Dica Importante: Ao selecionar a procedure no Evento do objeto, dê um duplo-clique na procedure selecionada até que seja exibido o código da procedure na janela da Unit, para que o Delphi reconheça o código a ser linkado.
Exemplo, ao selecionar no Evento OnMouseDown -> a procedure ControlMouseDown, dando um duplo-clique, aparece o código, na janela da Unit:
(selecionando na Janela de Eventos):
Exemplo, ao selecionar no Evento OnMouseDown -> a procedure ControlMouseDown, dando um duplo-clique, aparece o código, na janela da Unit:
(selecionando na Janela de Eventos):
*********************************************************************
Faça o download do arquivo: Movimentando Objetos.rar
*********************************************************************
*********************************************************************
"Só fazemos melhor aquilo que repetidamente insistimos em melhorar.
A busca da excelência não deve ser um objetivo e sim um hábito." Aristóteles.