Escrever no proximo controle

Delphi

23/07/2009

Olá a todos.
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

Acneto

Curtidas 0

Respostas

Vand3rson

Vand3rson

23/07/2009

  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
Osocram

Osocram

23/07/2009

eu acho q nesse seu exemplo nunca vai funcionar....
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
Acneto

Acneto

23/07/2009

Obrigado pela intensão em ajudar
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
Acneto

Acneto

23/07/2009

Obrigado pela intensão em ajudar
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
Osocram

Osocram

23/07/2009

ah tah...
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
Acneto

Acneto

23/07/2009

:) Devagar vamos nos entendedo Osocram
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
Danielrsanches

Danielrsanches

23/07/2009

não entendi bem o que deseja, mas...

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
Osocram

Osocram

23/07/2009

O problema é que se tiver algum outro controle entre esses componentes ja não funciona.

não entendi bem o que deseja, mas...
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
Emerson Nascimento

Emerson Nascimento

23/07/2009

você pode tentar assim:
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
Acneto

Acneto

23/07/2009

Quase lá Daniel
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
Acneto

Acneto

23/07/2009

:lol: Ótimo Emerson
tá resolvido

Abraço

Neto


GOSTEI 0
POSTAR