Nome do Componente Clicado
09/03/2004
0
Muito Obrigado.
MSN: talisjonatas@hotmail.com
Talisjonatas
Posts
09/03/2004
Talisjonatas
Deu certo para componentes com ´OnClick´ mas estou na verdade ´no meio´ de um gerador de relatório ´tipo o QRDesign´ estou usando as técnicas dos componentes do quickrep como o ´QRDBtext´, como ele não tem onclick eu coloquei um hook (dll) para verificar todos os clicks do mouse, bem, quando clica ele chama a procedure que coloquei para o QRDBText aí ele vem com o sender da dll.
Gostaria muito se possivel de conseguir resolver esta questão.
Desde já
Meus Agradecimentos.
ICQ 209735908
09/03/2004
Nildo
09/03/2004
Talisjonatas
A Procedure Atualmente está assim:
FOR a:= 0 to ComponentCount-1 do
begin
if components[a] is TWinControl then
if (x >= TWinControl( Components[a] ).Left) and
((TWinControl( Components[a] ).Left + TWinControl( Components[a] ).width) < x) and
(y >= TWinControl( Components[a] ).top) and
((TWinControl( Components[a] ).top + TWinControl( Components[a] ).height) < y) then
showmessage(Components[a].Name);
end;
Muito Grato deste já!
10/03/2004
Nildo
TWinControl( Components[a] ).Parent.Left + TWinControl( Components[a] ).Left
E se tiver Dois parents você utiliza assim:
TWinControl( Components[a] ).Parent.Parent.Left + TWinControl( Components[a] ).Parent.Left + TWinControl( Components[a] ).Left
E assim por diante. Essa não é a melhor forma, mas é a que veio mais rapido na minha cabeça, pois estou um pouco sem tempo para fazer o procedimento completo
24/12/2021
Valdeir Frizzera
Pra quem quiser verificar se ira servi-lo, vou postar o código inteiro.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls, Vcl.Buttons;
type
TForm1 = class(TForm)
edtItem: TEdit;
lvItem: TListView;
pnlBotoes: TPanel;
btnDinamico: TSpeedButton;
procedure btnDinamicoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
i, tp, qtdP: integer;
procedure EventoCliqueDinamico(Sender: TObject); == Procedure que será o clique dinâmico ==
end;
var
Form1: TForm1;
btn : TButton; === Botão que será criado dinamicamente ===
implementation
{$R *.dfm}
=== Esse é um botão estático, o clique dele gera os botões dinâmicos ===
procedure TForm1.btnDinamicoClick(Sender: TObject);
begin
== Verificação pra criar no máximo 3 botões ==
if i < 4 then
begin
if i < 0 then
i := 0
else
i := i +1;
btn := TButton.Create(nil); == Cria o botão ==
btn.Name := nome + IntToStr(i); == Botão
btn.Parent := pnlBotoes; == Adiciona o botão dentro de um panel ==
btn.Align := alTop;
tp := tp + btn.Height;
pnlBotoes.Height := tp; == Aumenta o tamanho do panel de acordo com a quantidade de botões que for criado ==
btn.OnClick := EventoCliqueDinamico; == Atribui a procedure ao clique do botão criado ==
end;
end;
procedure TForm1.EventoCliqueDinamico(Sender: TObject);
var
nome: string;
begin
nome := TComponent(Sender).Name; == Obtém o nome do componente que foi acionado ==
if nome = 'B1' then
begin
ShowMessage('Clicou no botão 1');
end;
if nome = 'B2' then
begin
ShowMessage('Clicou no botão 2');
end;
if nome = 'B3' then
ShowMessage('Clicou no botão 3');
end;
end.
Clique aqui para fazer login e interagir na Comunidade :)