 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
GustavoASC Novato

Registrado: Domingo, 8 de Mai de 2011 Mensagens: 18
|
Enviada: Qui Jun 16, 2011 2:43 pm Assunto: Reutilização de código em eventos diferentes [RESOLVIDO] |
|
|
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  |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Jun 16, 2011 2:53 pm Assunto: |
|
|
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 |
|
 |
BrunoMoreyra Colaborador

Registrado: Quinta-Feira, 26 de Novembro de 2009 Mensagens: 1398 Localização: Goiânia - GO / Brasília - DF
|
Enviada: Qui Jun 16, 2011 2:53 pm Assunto: Re: Reutilização de código em eventos diferentes |
|
|
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  |
_________________ Atencisamente,
Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta |
|
Voltar ao Topo |
|
 |
GustavoASC Novato

Registrado: Domingo, 8 de Mai de 2011 Mensagens: 18
|
Enviada: Qui Jun 16, 2011 3:13 pm Assunto: |
|
|
@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 |
|
 |
BrunoMoreyra Colaborador

Registrado: Quinta-Feira, 26 de Novembro de 2009 Mensagens: 1398 Localização: Goiânia - GO / Brasília - DF
|
Enviada: Qui Jun 16, 2011 3:42 pm Assunto: |
|
|
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 |
|
 |
GustavoASC Novato

Registrado: Domingo, 8 de Mai de 2011 Mensagens: 18
|
Enviada: Qui Jun 16, 2011 4:15 pm Assunto: |
|
|
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 |
|
 |
BrunoMoreyra Colaborador

Registrado: Quinta-Feira, 26 de Novembro de 2009 Mensagens: 1398 Localização: Goiânia - GO / Brasília - DF
|
Enviada: Qui Jun 16, 2011 4:18 pm Assunto: |
|
|
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 |
|
 |
GustavoASC Novato

Registrado: Domingo, 8 de Mai de 2011 Mensagens: 18
|
Enviada: Qui Jun 16, 2011 4:35 pm Assunto: |
|
|
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  |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Jun 16, 2011 4:46 pm Assunto: |
|
|
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 |
|
 |
GustavoASC Novato

Registrado: Domingo, 8 de Mai de 2011 Mensagens: 18
|
Enviada: Qui Jun 16, 2011 5:28 pm Assunto: |
|
|
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
E Bruno, as suas dicas também foram interessantes e me ajudaram
Obrigado. |
|
Voltar ao Topo |
|
 |
BrunoMoreyra Colaborador

Registrado: Quinta-Feira, 26 de Novembro de 2009 Mensagens: 1398 Localização: Goiânia - GO / Brasília - DF
|
Enviada: Sex Jun 17, 2011 9:10 am Assunto: |
|
|
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
E Bruno, as suas dicas também foram interessantes e me ajudaram
Obrigado. |
_________________ Atencisamente,
Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta |
|
Voltar ao Topo |
|
 |
GustavoASC Novato

Registrado: Domingo, 8 de Mai de 2011 Mensagens: 18
|
Enviada: Sáb Jun 18, 2011 6:53 pm Assunto: |
|
|
Bruno,
é que eu sou iniciante em delphi e estava com dúvidas em relação a como chamar a procedure genérica
Obrigado  |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|