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