KeyPress - Saber qual o nome do Edit que estou posicionado

05/04/2013

1

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
Responder

Posts

05/04/2013

William

Colega uma ideia inicial seria essa:

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!!!
Responder

05/04/2013

Joel Rodrigues

Bom, se você quiser saber quem disparou o evento, pode verificar:
if Sender is TEdit then
//ou 
if Sender is TMemo then

Responder

05/04/2013

Antônio Neto

ótimo

Resolvida a questão

abraços a todos e saúde.

Neto
Responder

05/04/2013

Joel Rodrigues

Valeu, Neto.
Obrigado pelo retorno.
Estou encerrando o tópico.
Responder

05/04/2013

Marco Salles

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

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
Responder

06/04/2013

Antônio Neto

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

Responder

06/04/2013

Marco Salles

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
Responder

07/04/2013

Antônio Neto

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
Responder

07/04/2013

Marco Salles

Ok neto .. As alteraçoes comentadas foram somente na procedure

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 Mesmo


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

Responder

08/04/2013

Antônio Neto

Olá.
Ótimo vou considera-las...

Abraços e boa semana.

Neto
Responder