Fórum Escrever no proximo controle #372681
23/07/2009
0
Tenho num Form dois Edit´s
um para informar um codigo e outro seria para escrever uma descricão do codigo, tipo codigo do cliente e escrever na frente o nome do cliente.
No evento OnKeyDown do Formulario Padrao eu testo
se foi pressionado Enter conforme abaixo:
procedure [color=red:974e6e402c]TFrRelPadrao.DbEdit1KeyDown[/color:974e6e402c](Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then // enter
begin
if trim( TEdit(Sender).Text ) = ´´ then
begin
[color=blue:974e6e402c]TEdit(Sender).Text := ´T U D O´; >>> AQUI[/color:974e6e402c]
end;
end;
end;
Caso seja pressionado Enter e o Edit esteja vazio
preciso escrever alguma coisa no proximo edit que é o edit da
descricao.
Da maneira abaixo eu escrevo no Edit posicionado
[color=red:974e6e402c]TEdit(Sender).Text := ´T U D O´[/color:974e6e402c]
preciso escrever no proximo Edit como fazer isso??
Obrigado
Neto
Acneto
Curtir tópico
+ 0Posts
23/07/2009
Vand3rson
if key = 13 then // enter begin if trim( TEdit(Sender).Text ) = ´´ then begin if Sender = Edit1 then Edit2.Text := ´T U D O´; end; end;
Gostei + 0
24/07/2009
Osocram
pois vc esta testando o evento do TFrRelPadrao.DbEdit1KeyDown então ele só é disparado qdo precionar uma tecla no DBEdit1, então o sender sempre vai ser DBEdit1...
if key = 13 then // enter begin if trim( TEdit(Sender).Text ) = ´´ then begin TEdit(Sender).Text := ´T U D O´; >>> AQUI end; end; end;
Não se vc tentou fazer algo generico aqui... mas para usar o outro edit aqui vc tem q chamar ele Edit2.text := algo
Gostei + 0
24/07/2009
Acneto
Sim estou testando isso num Form Padrao, por isso não sei
o nome do proximo controle (edit) ´componente´
Penso que da mesma forma que conseguimos passar para o proximo edit
com a instrução [color=red:22b6e95a46]Perform(Wm_NextDlgCtl , 0 , 0 )[/color:22b6e95a46]
podemos também saber o proximo componente e enviar um texto
para ele
obrigado
Neto
Gostei + 0
24/07/2009
Acneto
Sim estou testando isso num Form Padrao, por isso não sei
o nome do proximo controle (edit) ´componente´
:idea: Penso que da mesma forma que conseguimos passar para o proximo edit
com a instrução [color=red:385bf69cef]Perform(Wm_NextDlgCtl , 0 , 0 )[/color:385bf69cef]
podemos também saber o proximo componente e enviar um texto
para ele
obrigado
Neto
Gostei + 0
24/07/2009
Osocram
Bom agora estamos nos entendendo melhor.
Mas é um pouco estranho isso que esta tentando fazer... mas vamos la.
vc pode fazer assim. Edit1 = Cod e Edit2 = Descrição
Primeiro vc tem que verificar quem é o sender
por exemplo
if TEdit(sender).name = ´Edit1´ then
Edit2.text := ´tudo´
Gostei + 0
24/07/2009
Acneto
Não posso testar assim porque estou no form padrao e não sei o nome dos edit´s que estão no formulario.
Sei que se caio neste evento sempre tenho depois desse edit um outro edit para escrever uma descricao, por isso tem que ser generico
:roll: Estou no compontente (controle/Edit) e quero escrever alguma coisa no proximo componente que será um controle do tipo edit.
Vamos lá, a luta continua
Neto
Gostei + 0
24/07/2009
Danielrsanches
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin (form1.Components[(Sender as TEdit).ComponentIndex + 1] as TEdit).Text:= ´TUDO´; end;
com esse código assima, vc modifica o texto do próximo edit ... é só adaptar o que deseja ...
abraços !!!
Gostei + 0
24/07/2009
Osocram
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin (form1.Components[(Sender as TEdit).ComponentIndex + 1] as TEdit).Text:= ´TUDO´; end;
Uma abordagem que eu sugiro então é o seguinte:
Faz um componente herdade do TEdit do tipo TEditDesc e nele cria um campo Descricao:TEdit;
dae no seu evento
if sender is TEditDesc then begin
if assigned(TEditDesc(sender).Descricao) then
TEditDesc(sender).Descricao.text := ´TUDO´
end;
Gostei + 0
24/07/2009
Emerson Nascimento
procedure TFrRelPadrao.DbEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Controle: TWinControl; begin if trim(TEdit(Sender).Text) = ´´ then begin Controle := Self.FindNextControl(TWinControl(Sender), True, True, False); repeat if (Controle is TEdit) then begin TEdit(Controle).Text := ´TUDO´; break; end; Controle := Self.FindNextControl(Controle, True, True, False); until Controle = TWinControl(Sender); end; end;
[b:5ea7b7282f]mas oberve um detalhe: para que essa rotina funcione corretamente será necessário acertar o TabOrder dos componentes.[/b:5ea7b7282f]
Gostei + 0
24/07/2009
Acneto
Este evento está num form Padrao e é disparado de diversos formularios
que o utilizam então não sabemos o nome do Form.
Testei com TForm(Sender) mas retorna vazio ´´
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin (form1.Components[(Sender as TEdit).ComponentIndex + 1] as TEdit).Text:= ´TUDO´; end;
Vamos continuar a estudar
Obrigado
Neto
Gostei + 0
24/07/2009
Acneto
tá resolvido
Abraço
Neto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)