ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Reutilização de código em eventos diferentes [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
GustavoASC
Novato
Novato


Registrado: Domingo, 8 de Mai de 2011
Mensagens: 18

MensagemEnviada: Qui Jun 16, 2011 2:43 pm    Assunto: Reutilização de código em eventos diferentes [RESOLVIDO] Responder com Citação

Boa tarde pessoal,


Na minha aplicação, eu preciso movimentar panels pelo form.

Eu tenho um Panel, com o nome Panel1, que possui estes códigos:


Código:
procedure TFrm_Principal.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FDownX := X;
  FDownY := Y;
  FDragging := True;
  TMoveCracker(Sender).MouseCapture := True;
end;

procedure TFrm_Principal.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FDragging then
    with Sender as TControl do
    begin
      Left := X - FDownX + Left;
      Top  := Y - FDownY + Top;
    end;
end;


procedure TFrm_Principal.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FDragging then
  begin
    FDragging := False;
    TMoveCracker(Sender).MouseCapture := False;
  end;
end;


Porém, eu desejo reutilizar este código em eventos de outros panels, mas eu não sei como fazer. Sou iniciante em Delphi.

Obrigado Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Jun 16, 2011 2:53 pm    Assunto: Responder com Citação

basta colocar o nome da mesma procedure em todos panels, assim:

Panel2.OnMouseDown := frmPrincipal.Panel1MouseDown
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Qui Jun 16, 2011 2:53 pm    Assunto: Re: Reutilização de código em eventos diferentes Responder com Citação

Boa tarde,

do jeito que estão os métodos, é só você selecionar os outros Panels, e selecionar estes métodos já existente para o Panel1, de acordo com cada evento.

GustavoASC escreveu:
Boa tarde pessoal,


Na minha aplicação, eu preciso movimentar panels pelo form.

Eu tenho um Panel, com o nome Panel1, que possui estes códigos:


Código:
procedure TFrm_Principal.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FDownX := X;
  FDownY := Y;
  FDragging := True;
  TMoveCracker(Sender).MouseCapture := True;
end;

procedure TFrm_Principal.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FDragging then
    with Sender as TControl do
    begin
      Left := X - FDownX + Left;
      Top  := Y - FDownY + Top;
    end;
end;


procedure TFrm_Principal.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FDragging then
  begin
    FDragging := False;
    TMoveCracker(Sender).MouseCapture := False;
  end;
end;


Porém, eu desejo reutilizar este código em eventos de outros panels, mas eu não sei como fazer. Sou iniciante em Delphi.

Obrigado Smile

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoASC
Novato
Novato


Registrado: Domingo, 8 de Mai de 2011
Mensagens: 18

MensagemEnviada: Qui Jun 16, 2011 3:13 pm    Assunto: Responder com Citação

@joemil

Infelizmente, não deu certo.

Acusa o erro " E2035 Not enough actual parameters"

Coloquei assim:


Código:

procedure TFrm_Principal.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   TFrm_Principal.ControlMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
end;

procedure TFrm_Principal.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   TFrm_Principal.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
   Y: Integer);
end;


procedure TFrm_Principal.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TFrm_PrincipalControlMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
end;



Se eu ponho TFrm_Principal ou Frm_Principal dá erro igual =/



@BrunoMoreyra

Eu não consigo fazer isso pois também existirão panels criados em tempo de execução.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Qui Jun 16, 2011 3:42 pm    Assunto: Responder com Citação

boa tarde,

tente assim

Código:

Panel2.OnMouseDown := Panel1MouseDown;


GustavoASC escreveu:
@joemil

Infelizmente, não deu certo.

Acusa o erro " E2035 Not enough actual parameters"

Coloquei assim:


Código:

procedure TFrm_Principal.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   TFrm_Principal.ControlMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
end;

procedure TFrm_Principal.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   TFrm_Principal.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
   Y: Integer);
end;


procedure TFrm_Principal.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TFrm_PrincipalControlMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
end;



Se eu ponho TFrm_Principal ou Frm_Principal dá erro igual =/



@BrunoMoreyra

Eu não consigo fazer isso pois também existirão panels criados em tempo de execução.

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoASC
Novato
Novato


Registrado: Domingo, 8 de Mai de 2011
Mensagens: 18

MensagemEnviada: Qui Jun 16, 2011 4:15 pm    Assunto: Responder com Citação

BrunoMoreyra escreveu:
boa tarde,

tente assim

Código:

Panel2.OnMouseDown := Panel1MouseDown;


GustavoASC escreveu:
@joemil

Infelizmente, não deu certo.

Acusa o erro " E2035 Not enough actual parameters"

Coloquei assim:


Código:

procedure TFrm_Principal.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   TFrm_Principal.ControlMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
end;

procedure TFrm_Principal.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   TFrm_Principal.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
   Y: Integer);
end;


procedure TFrm_Principal.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TFrm_PrincipalControlMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
end;



Se eu ponho TFrm_Principal ou Frm_Principal dá erro igual =/



@BrunoMoreyra

Eu não consigo fazer isso pois também existirão panels criados em tempo de execução.


@Bruno,

o problema é que esse Panel1 está sendo utilizado, por enquanto, apenas para testes. Então, quando eu criar algum panel em tempo de execução, não existirá este Panel1 nem nenhum outro para eu fazer referência, como você fez com o código:
Código:
Panel2.OnMouseDown := Panel1MouseDown;


O problema é que eu, basicamente, não estou conseguindo chamar uma procedure de maneira diferente da linha de código que você acabou de escrever.

Eu precisava de alguma coisa como:

Código:
procedure TFrm_Principal.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   TFrm_Principal.ControlMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
end;


porém está acusando o erro "E2035 Not enough actual parameters"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Qui Jun 16, 2011 4:18 pm    Assunto: Responder com Citação

Boa tarde,

Crie esses eventos com nome genéricos, crie somente os métodos, e na hora de criar os componentes vincule com esses eventos.
_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoASC
Novato
Novato


Registrado: Domingo, 8 de Mai de 2011
Mensagens: 18

MensagemEnviada: Qui Jun 16, 2011 4:35 pm    Assunto: Responder com Citação

Bruno,

Eu estou tentando fazer isso com esse pedaço de código, porém está acusando o erro "E2035 Not enough actual parameters". Este pedaço de código representa a criação de um novo Panel em tempo de execução.
Nas linhas que possuem o OnMouseDown, OnMouseMove e OnMouseUp está aparecendo este erro.

Código:
   Panel := TPanel.Create(Frm_Principal);
   With Panel do
   Begin
      Parent := Frm_Principal;
      Height := 129;
      Width := 209;
      Left := 150;
      Top := 150;
      Name := Nome;

      OnMouseDown := ControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

      OnMouseMove := ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);

      OnMouseUp := ControlMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
   End;





No início do meu form, as procedures estão declaradas desta forma:

Código:
    procedure ControlMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ControlMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);





O código destas procedures são estes:

Código:
procedure TFrm_Principal.ControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FDownX := X;
  FDownY := Y;
  FDragging := True;
  TMoveCracker(Sender).MouseCapture := True;
end;

procedure TFrm_Principal.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FDragging then
    with Sender as TControl do
    begin
      Left := X - FDownX + Left;
      Top  := Y - FDownY + Top;
    end;
end;

procedure TFrm_Principal.ControlMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FDragging then
  begin
    FDragging := False;
    TMoveCracker(Sender).MouseCapture := False;
  end;
end;



O que estou fazendo de errado?
Desculpe por tantas perguntas.

Obrigado Laughing
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Jun 16, 2011 4:46 pm    Assunto: Responder com Citação

tente assim:

Código:
Panel := TPanel.Create(Frm_Principal);
   With Panel do
   Begin
      Parent := Frm_Principal;
      Height := 129;
      Width := 209;
      Left := 150;
      Top := 150;
      Name := Nome;

      OnMouseDown := ControlMouseDown;

      OnMouseMove := ControlMouseMove;

      OnMouseUp := ControlMouseUp;
   End;

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoASC
Novato
Novato


Registrado: Domingo, 8 de Mai de 2011
Mensagens: 18

MensagemEnviada: Qui Jun 16, 2011 5:28 pm    Assunto: Responder com Citação

joemil escreveu:
tente assim:

Código:
Panel := TPanel.Create(Frm_Principal);
   With Panel do
   Begin
      Parent := Frm_Principal;
      Height := 129;
      Width := 209;
      Left := 150;
      Top := 150;
      Name := Nome;

      OnMouseDown := ControlMouseDown;

      OnMouseMove := ControlMouseMove;

      OnMouseUp := ControlMouseUp;
   End;



Joemil, era exatamente isso que eu precisava!!!!!!!!!!!!!!!!

Valeu mesmo Smile


E Bruno, as suas dicas também foram interessantes e me ajudaram Smile
Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Sex Jun 17, 2011 9:10 am    Assunto: Responder com Citação

Bom dia,

Era isso que eu tinha falado para fazer.

Edita o seu primeiro post, adicionando no Assunto (Título) a palavra Resolvido.

GustavoASC escreveu:
joemil escreveu:
tente assim:

Código:
Panel := TPanel.Create(Frm_Principal);
   With Panel do
   Begin
      Parent := Frm_Principal;
      Height := 129;
      Width := 209;
      Left := 150;
      Top := 150;
      Name := Nome;

      OnMouseDown := ControlMouseDown;

      OnMouseMove := ControlMouseMove;

      OnMouseUp := ControlMouseUp;
   End;



Joemil, era exatamente isso que eu precisava!!!!!!!!!!!!!!!!

Valeu mesmo Smile


E Bruno, as suas dicas também foram interessantes e me ajudaram Smile
Obrigado.

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoASC
Novato
Novato


Registrado: Domingo, 8 de Mai de 2011
Mensagens: 18

MensagemEnviada: Sáb Jun 18, 2011 6:53 pm    Assunto: Responder com Citação

Bruno,

é que eu sou iniciante em delphi e estava com dúvidas em relação a como chamar a procedure genérica Wink

Obrigado Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB