Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

J. L. Gregorio

Detectando nome do componente clicado.

Recommended Posts

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Saudações galera IMasters, estou desenvolvendo um controle de permissão muito personalizado. Preciso de uma forma, de detectar o nome do componente que eu cliquei naquele momento, verificar se o usuário tem permissão para clicar ali e, caso não tenha permissão, cancelar a ação do clique. Tentei usar o ApplicationEvents, não não consegui entender como devo fazer. :unsure:

Se alguém tem alguma forma de detectar o nome do componente clicado, esteja onde estiver, resolveria meu problema...! :unsure:

 

Estou aguardando.... obrigado! http://forum.imasters.com.br/public/style_emoticons/default/excl.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá !!

 

olha!! não posso te dizer como fazer isso que deseja, pois desconheço uma forma ...

 

posso te dar uma dica:

 

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
		if msg.message = 513 then //click do mouse
		begin
			  ..comandos..
		end;
end;

 

espero que isso ajude !!

 

abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria mais simples, na hora que você carregar seu form, testar as permissões do usuário no evento onshow do form e desabilitar tudo o que ele não puder acessar dando um enabled = false nos componentes?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria mais simples, na hora que você carregar seu form, testar as permissões do usuário no evento onshow do form e desabilitar tudo o que ele não puder acessar dando um enabled = false nos componentes?

 

[]'s

Sim, seria mais fácil, mas eu teria que programar em todos os forms, eu quero fazer algo global, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou te mostrar como faz o que você quer fazer...

 

Para clicar no componente e você ter nome dele, o comando é ActiveControl.Name

 

testa ae... coloco no onclick de um button o seguinte codigo

 

showmessage(Pchar(ActiveControl.Name))

esse codigo nao funciona no evento OnClick de componentes estáticos(Labels, Panels, etc...)... aí você teria q colocar o codigo em outro evento...

 

testa ae, ve se é isso q você quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou te mostrar como faz o que você quer fazer...

 

Para clicar no componente e você ter nome dele, o comando é ActiveControl.Name

 

testa ae... coloco no onclick de um button o seguinte codigo

 

showmessage(Pchar(ActiveControl.Name))

esse codigo nao funciona no evento OnClick de componentes estáticos(Labels, Panels, etc...)... aí você teria q colocar o codigo em outro evento...

 

testa ae, ve se é isso q você quer.

 

Certo... mas aí não adianta muita coisa, visto que tenho que sair implementando em todos os botões....! Mais alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não amigo... nao precisa implementar mais do que uma vez...

 

cria uma procedure com esse código

 

showmessage(Pchar(ActiveControl.Name))

 

e liga o onclick de todos os buttons a essa procedure...

 

ou implementa o codigo em um botão apenas e liga o onclick dos outros ao on click deste botão...

 

você só implementa uma vez!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não amigo... nao precisa implementar mais do que uma vez...

 

cria uma procedure com esse código

 

showmessage(Pchar(ActiveControl.Name))

 

e liga o onclick de todos os buttons a essa procedure...

 

ou implementa o codigo em um botão apenas e liga o onclick dos outros ao on click deste botão...

 

você só implementa uma vez!!!

Amigo, não deu certo, mas consegui encontrar esse código na Web:

 

procedure TFMenu.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  Componente : TWinControl;
begin
  Case Msg.message of
	WM_LBUTTONUP:
	begin
	  Componente := FindVCLWindow(Mouse.CursorPos);
		Showmessage('Classe: ' + Componente.ClassName + ' - Nome: ' + Componente.Name  );
	end;
  end;
end;

Como você pode perceber, usei o evento onMessage do ApplicationEvents para detectar se a mensagem é o botão do mouse subindo, se for capturo o Controle ativo através da função FindVCLWindow e coloquei dentro de uma variável do Tipo TWinControl chamada Componente. Então dou um showMessage mostrando a classe e o nome do componente.

 

Funcionou em partes. Mas tipo, eu uso na minha aplicação o componente TPNGSpeedButton do componente "PNGComponents" e esse componente ele não detecta. o PNGSpeedButton herda de TControl e não consegui um método que retorna a posição de um TControl pelo mouse como o código acima. então ainda estou parado. Mas estamos quase lá...

 

Aguardando sugestões... Abraços galera e muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tive este mesmo problema...
...resolvi na ignorância... os objetos que ApplicationEvents não reconhecia, eu informei manualmente no onClick.
No meu caso eram uns 40... Não encontrei outra solução.
Vc conseguiu resolver este problema ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.