Pegar o componente ativo no formulário?
Amigos
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
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
Curtidas 0
Melhor post
Renato Rubinho
31/07/2014
Ignore todo o detalhamento anterior (Atende ao que você precisa, mas totalmente desnecessário).
Como você já está no componente que deseja, é só utilizá-lo, assim como já utiliza pra pegar o nome.
Espero que seja isso.
Abraççç
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;
Eu já tinha entendido na anterior e respondi:
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:
Vou explicar melhor o comando anterior:
Abraççç,
Renato
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 1
Mais Respostas
Renato Rubinho
31/07/2014
Buenas,
Segue:
Screen.ActiveControl.Name;
Abraççç,
Renato
Segue:
Screen.ActiveControl.Name;
Abraççç,
Renato
GOSTEI 0
Itamar Souza
31/07/2014
Valeu rrubinho
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!
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
Renato Rubinho
31/07/2014
Foi mal...
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
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
Itamar Souza
31/07/2014
Agradeço!
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:
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
Renato Rubinho
31/07/2014
Eu já tinha entendido na anterior e respondi:
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:
Vou explicar melhor o comando anterior:
Abraççç,
Renato
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