Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 14 de Janeiro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
132 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Movendo componentes em run-time
Publicado por ActiveDelphi : Terça, Maio 08, 2007 - 12:22 GMT-3 (2235 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Gustavo Frassini Olá amigos, depois de procurar por algum tempo, consegui a seguinte dica para mover qualquer componente em run-time. Da forma abaixo, criamos três eventos que de forma dinâmica e recursiva, para ser utilizado para diversos componentes.

Coloque alguns componentes a exemplo da imagem abaixo:


 

Serão criados três procedimentos que serão utilizados por todos os objetos acima, são eles:
 
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);

 
Agora no Object Inspector, guia Events, relacione os métodos OnMouseMuve, OnMouseDown e OnMouseUp, com os respectivos eventos acima.

Segue código da Unit:

unit movecomponenteruntime;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls;
 
type
  TForm1 = class(TForm)
  Button1: TButton;
  Edit1: TEdit;
  Memo1: TMemo;
  Label1: TLabel;
  Image1: TImage;
  Image2: TImage;
  Label2: TLabel;
  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
  Form1: TForm1;
  moveX, moveY: Integer;
  mover: boolean;
implementation
 
{$R *.dfm}
 
type
  TMoveControle = class(TControl);
 
procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  moveX := X;
  moveY := Y;
  mover := True;
  TMoveControle(Sender).MouseCapture := True;
end;
 
procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if mover then begin
    with Sender As TControl Do
    Begin
      Left := X-moveX+Left;
      Top := Y-moveY+Top;
    End;
  end;
end;
 
procedure TForm1.ControlMouseUp(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if mover then begin
    mover := False;
    TMoveControle(Sender).MouseCapture := False;
  end;
end;
 
end.

 
Depois disso é só rodar, clicar no componente desejado e arrastar para qualquer área do formulário.
 

<o:p> </o:p>

 

Download do exemplo aqui.

Espero que seja útil!
Contato: gustavo@activedelphi.com.br
Abraço e até a próxima.



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados