Fórum Pegar o componente ativo no formulário? #487523
31/07/2014
0
Estou querendo pegar o componente ativo, no momento consigo pegar a resposta em uma variável, mais que gostaria de passar este resultado para uma nova instrução, veja um exemplo. Agradeço a ajuda
procedure TfrmPrincipal.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012;
var
sValor : string; //receber o nome do componente
begin
sValor := (Sender as TComponent).Name;
ShowMessage('Este é o componente ativo /clicado : ' + sValor);
ReleaseCapture;
//como eu posso passar o componente deste forma
//sValor + '.' +Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Panel3.Perform (WM_SYSCOMMAND, SC_DragMove, 0);
end;
Itamar Souza
Curtir tópico
+ 0Post mais votado
31/07/2014
Como você já está no componente que deseja, é só utilizá-lo, assim como já utiliza pra pegar o nome.
Espero que seja isso.
Abraççç
procedure TfrmPrincipal.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012;
var
sValor : string; //receber o nome do componente
begin
//aqui eu pego o nome do componente que foi clicado
sValor := (Sender as TComponent).Name;
//este é o nome do componente clicado
ShowMessage('Este é o componente ativo /clicado : ' + sValor);
ReleaseCapture;
//aqui eu quero passar o nome do componente desta forma
//tem alum tipo variável que consiga receber os componentes para que eu possa fazer isso
// Opção 1 se o Perform funcionar com TComponent obs: tanto faz usar (Sender as TComponent) ou TComponent(Sender)
(Sender as TComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0);
// Opção 2 se o Perform funcionar apenas identificando a classe
if Sender is TPanel then
TPanel(Sender).Perform (WM_SYSCOMMAND, SC_DragMove, 0)
else if Sender is TButton then
TButton(Sender).Perform (WM_SYSCOMMAND, SC_DragMove, 0)
else if Sender is TEdit then
TEdit(Sender).Perform (WM_SYSCOMMAND, SC_DragMove, 0)
else if...
.
. // outros
.
end;
TPanel(Self.FindComponent(Screen.ActiveControl.Name)).Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Se é pra qualquer componente, altere o comando que mandei substituindo o TPanel pela classe dos demais componentes:
Qual o intuito do "Perform(WM_SYSCOMMAND, SC_DragMove, 0);" ? Se "Perform" funcionar para TComponent, é só chamar como TComponent:
TComponent(Self.FindComponent(Screen.ActiveControl.Name)).Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Vou explicar melhor o comando anterior:
// Componente Focado - Tanto faz deste jeito ou como você já fazia sValor := Screen.ActiveControl.Name; // Localiza o componente através do nome que você salvou na sValor e aponta para a variável compComponent --- // Declarar variável "compComponent : TComponent;" na sua procedure compComponent := Self.FindComponent( sValor ); // Para cada tipo de componente que você utilizar, caso venham de hierarquias diferentes, você deverá fazer um tratamento a mais na sua procedure if compComponent is TPanel then TPanel(compComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0) else if compComponent is TButton then TButton(compComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0) else if compComponent is TEdit then TEdit(compComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0) else . . // outros .
Abraççç,
Renato
Renato Rubinho
Gostei + 1
Mais Posts
31/07/2014
Renato Rubinho
Segue:
Screen.ActiveControl.Name;
Abraççç,
Renato
Gostei + 0
31/07/2014
Itamar Souza
Você chegou a ler o que eu descrevi na minha dúvida?
O que você me passou:
Screen.ActiveControl.Name;
Não seria a mesma coisa que :
sValor := (Sender as TComponent).Name;
O problema é como eu faria isso:
//como eu posso passar o componente deste forma
//sValor + '.' +Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Agradeço!
Gostei + 0
31/07/2014
Renato Rubinho
Quando li, entendi que você queria capturar o componente ativo sem utilizar o sender.
Segue:
TPanel(Self.FindComponent(Screen.ActiveControl.Name)).Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Abraççç,
Renato
Gostei + 0
31/07/2014
Itamar Souza
Vou explicar melhor:
Tenho uma procedure :
MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Ela estará ligada a vários componentes no evento OnMouseDow,
no click eu preciso pegar o nome do componente que foi clicado
ex:
procedure TfrmPrincipal.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012;
var
sValor : string; //receber o nome do componente
begin
//aqui eu pego o nome do componente que foi clicado
sValor := (Sender as TComponent).Name;
//este é o nome do componente clicado
ShowMessage('Este é o componente ativo /clicado : ' + sValor);
ReleaseCapture;
//aqui eu quero passar o nome do componente desta forma
//tem alum tipo variável que consiga receber os componentes para que eu possa fazer isso
sValor + '.' +Perform (WM_SYSCOMMAND, SC_DragMove, 0);
end;
Gostei + 0
31/07/2014
Renato Rubinho
TPanel(Self.FindComponent(Screen.ActiveControl.Name)).Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Se é pra qualquer componente, altere o comando que mandei substituindo o TPanel pela classe dos demais componentes:
Qual o intuito do "Perform(WM_SYSCOMMAND, SC_DragMove, 0);" ? Se "Perform" funcionar para TComponent, é só chamar como TComponent:
TComponent(Self.FindComponent(Screen.ActiveControl.Name)).Perform (WM_SYSCOMMAND, SC_DragMove, 0);
Vou explicar melhor o comando anterior:
// Componente Focado - Tanto faz deste jeito ou como você já fazia sValor := Screen.ActiveControl.Name; // Localiza o componente através do nome que você salvou na sValor e aponta para a variável compComponent --- // Declarar variável "compComponent : TComponent;" na sua procedure compComponent := Self.FindComponent( sValor ); // Para cada tipo de componente que você utilizar, caso venham de hierarquias diferentes, você deverá fazer um tratamento a mais na sua procedure if compComponent is TPanel then TPanel(compComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0) else if compComponent is TButton then TButton(compComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0) else if compComponent is TEdit then TEdit(compComponent).Perform (WM_SYSCOMMAND, SC_DragMove, 0) else . . // outros .
Abraççç,
Renato
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)