Fórum KeyPress - Saber qual o nome do Edit que estou posicionado #439034
05/04/2013
0
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
Curtir tópico
+ 0Post mais votado
05/04/2013
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
Marco Salles
Gostei + 1
Mais Posts
05/04/2013
William
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
05/04/2013
Joel Rodrigues
if Sender is TEdit then //ou if Sender is TMemo then
Gostei + 0
05/04/2013
Antônio Neto
Resolvida a questão
abraços a todos e saúde.
Neto
Gostei + 0
05/04/2013
Joel Rodrigues
Obrigado pelo retorno.
Estou encerrando o tópico.
Gostei + 0
06/04/2013
Antônio 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
06/04/2013
Marco Salles
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
07/04/2013
Antônio 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
07/04/2013
Marco Salles
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
08/04/2013
Antônio Neto
Ótimo vou considera-las...
Abraços e boa semana.
Neto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)