KeyPress - Saber qual o nome do Edit que estou posicionado
Olá a todos.
Uso o evento KeyPress no formulário com muitos Edit´s e dois memos.
Quando algo é digitado o evento é disparado e dentro da procedure preciso saber se
estou posicionado num campo TEdit ou TMemo para definir o que fazer.
Mas quando testo o Sender vem o nome do formulário e não o nome do componente posicionado.
Abaixo parte dos códigos que já tentei mas nenhum deu resultado esperado.
Procedure TFrmLaudos.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
edit1.Text := >>>> definir o que fazer
end;
procedure TFrCadLaudos.FormKeyPress(Sender: TObject; var Key: Char);
var
nome, Tipo : string;
begin
tipo := sender.classname;
nome := (sender as TComponent).name;
nome := TEdit(self).Name;
if (TMemo(Sender).Name = 'MemObservacao') then
nome := TEdit(self).Name
end;
with (Sender as TEdit) do
>>> Ação;
end;
Abraços a todos.
Neto
Uso o evento KeyPress no formulário com muitos Edit´s e dois memos.
Quando algo é digitado o evento é disparado e dentro da procedure preciso saber se
estou posicionado num campo TEdit ou TMemo para definir o que fazer.
Mas quando testo o Sender vem o nome do formulário e não o nome do componente posicionado.
Abaixo parte dos códigos que já tentei mas nenhum deu resultado esperado.
Procedure TFrmLaudos.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
edit1.Text := >>>> definir o que fazer
end;
procedure TFrCadLaudos.FormKeyPress(Sender: TObject; var Key: Char);
var
nome, Tipo : string;
begin
tipo := sender.classname;
nome := (sender as TComponent).name;
nome := TEdit(self).Name;
if (TMemo(Sender).Name = 'MemObservacao') then
nome := TEdit(self).Name
end;
with (Sender as TEdit) do
>>> Ação;
end;
Abraços a todos.
Neto
Antônio Neto
Curtidas 0
Melhor post
Marco Salles
05/04/2013
Então Neto , como objetos descendentes de Tedit e TMemo são descendentes de TWinControl vc pode utilizar o ActetiveControl
para determinar qual ocontrole Ativo
mais ou menos assim
[]sds
para determinar qual ocontrole Ativo
mais ou menos assim
procedure TSeuForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if ActiveControl is Tedit then
Showmessage(TEdit(ActiveControl).Name)
else
if ActiveControl is TMemo then
Showmessage(TMemo(ActiveControl).Name)
[]sds
GOSTEI 1
Mais Respostas
William
05/04/2013
Colega uma ideia inicial seria essa:
Mas tenho que alertar, dependendo da quantidade de componentes no form, essa prática pode ser um "suicídio". Imagine que todas vez que for disparando o evento OnKeyPress do form será executado um loop entre todos os componentes desse form!!!
procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
var
i : integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TEdit) and (TEdit(Components[i]).Focused) then
ShowMessage('TEdit');
if (Components[i] is TMemo) and (TMemo(Components[i]).Focused) then
ShowMessage('TMemo');
end;
end;
Mas tenho que alertar, dependendo da quantidade de componentes no form, essa prática pode ser um "suicídio". Imagine que todas vez que for disparando o evento OnKeyPress do form será executado um loop entre todos os componentes desse form!!!
GOSTEI 0
Joel Rodrigues
05/04/2013
Bom, se você quiser saber quem disparou o evento, pode verificar:
if Sender is TEdit then //ou if Sender is TMemo then
GOSTEI 0
Antônio Neto
05/04/2013
ótimo
Resolvida a questão
abraços a todos e saúde.
Neto
Resolvida a questão
abraços a todos e saúde.
Neto
GOSTEI 0
Joel Rodrigues
05/04/2013
Valeu, Neto.
Obrigado pelo retorno.
Estou encerrando o tópico.
Obrigado pelo retorno.
Estou encerrando o tópico.
GOSTEI 0
Antônio Neto
05/04/2013
Olá a todos.
Marco, obrigado mais uma vez pela valiosa dica.
Como estava eu já conseguia selecionar TEdit de TMemo mas agora posso
indentificar cada um deles. Ótimo.
Abraços a todos e obrigado.
Neto
Marco, obrigado mais uma vez pela valiosa dica.
Como estava eu já conseguia selecionar TEdit de TMemo mas agora posso
indentificar cada um deles. Ótimo.
Abraços a todos e obrigado.
Neto
GOSTEI 0
Marco Salles
05/04/2013
Muito bom Neto..
Mudando de assunto se assim o permite , teve uma pequena alteração no exemplo do ApplyUpdate do Cds que vc estava vendo
ok?
[]sds
Mudando de assunto se assim o permite , teve uma pequena alteração no exemplo do ApplyUpdate do Cds que vc estava vendo
ok?
[]sds
GOSTEI 0
Antônio Neto
05/04/2013
Olá Marco.
Vi sobre o assunto nos e-mails automaticos do seu Blog. Mas só vi.
As alterações estão disponíveis onde??
Abraços
Neto
Vi sobre o assunto nos e-mails automaticos do seu Blog. Mas só vi.
As alterações estão disponíveis onde??
Abraços
Neto
GOSTEI 0
Marco Salles
05/04/2013
Ok neto .. As alteraçoes comentadas foram somente na procedure
class procedure TClientAllApplyUpdates.Execute(
ObjClassProx: TObject;FColectionsCds: array of TClientDataSet);
conforme solicitação do Guilherme Rezende em
http://marcosalles.wordpress.com/2011/07/09/applyupdate-aplicacao-de-atualizacoes-para-mais-de-um-clientdataset-em-uma-unica-transacao-com-datasnap/
[]sds
class procedure TClientAllApplyUpdates.Execute(
ObjClassProx: TObject;FColectionsCds: array of TClientDataSet);
Lem:integer;
begin
Lem:=length(FColectionsCds);
i:=0;
executar:=false;
while i < Lem do
begin
if FColectionsCds[i].State in [DsEdit,DsInsert] then
FColectionsCds[i].Post;
i:=i+1;
end;
i:=0;
j:=0;
while J < Lem do
begin
if FColectionsCds[j].changecount > 0 then
begin
Setlength(Dados, length(Dados)+2);
Dados[i]:=FColectionsCds[j].ProviderName;
i:=i+1;
Dados[i]:=FColectionsCds[j].Delta;
i:=i+1;
executar:=true;
end;
j:=j+1;
end;
if not executar then
//O Resto do código continua o Mesmoconforme solicitação do Guilherme Rezende em
http://marcosalles.wordpress.com/2011/07/09/applyupdate-aplicacao-de-atualizacoes-para-mais-de-um-clientdataset-em-uma-unica-transacao-com-datasnap/
[]sds
GOSTEI 0
Antônio Neto
05/04/2013
Olá.
Ótimo vou considera-las...
Abraços e boa semana.
Neto
Ótimo vou considera-las...
Abraços e boa semana.
Neto
GOSTEI 0