FOCUS???

Delphi

01/09/2009

Amigos,
boa tarde.

Lá vai outra duvida...

Como funciona o foco de um campo?
Por exemplo:
Um cadastro de nomes: SOmente um campo...
Informo o nome, enquanto não pressionar TAB, a minha função envia msg de campo vazio....
Como se já foi digitado?


Lenasi

Lenasi

Curtidas 0

Respostas

.lg.

.lg.

01/09/2009

Pelo que eu entendi...
No evento OnExit do componente
[TEdit como Exemplo]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if (TEdit(Sender).Text = EmptyStr) then
    ShowMessage(´Campo não pode ser nulo ou vazio´);
end;
É isso sua dúvida!?

.LG.


GOSTEI 0
Lenasi

Lenasi

01/09/2009

Pelo que eu entendi... No evento OnExit do componente [TEdit como Exemplo]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if (TEdit(Sender).Text = EmptyStr) then
    ShowMessage(´Campo não pode ser nulo ou vazio´);
end;
É isso sua dúvida!? .LG.


BOM DIA AMIGO.
DESCULPE, MAS EXPLIQUEI ERRADO.

É O SEGUINTE:
APÓS DIGITADO A INFORMAÇÃO E TENTAR GRAVAR SEM SAIR DO CAMPO, A MINHA FUNÇÃO É CHAMADA AVISANDO SOBRE O CAMPO VAZIO... SÓ FUNCIONA SE PRESSIONAR TAB(ISSO É SAINDO DO CAMPO)...


GOSTEI 0
.lg.

.lg.

01/09/2009

pois bem...
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_TAB) then
  begin
    Key := #0;
    Perform(WM_NEXTDLGCTL,0,0);
  end;
end;
Isso irá pular para o próximo componente na ordem do [b:f9fe29b71b]TabStop[/b:f9fe29b71b] ao precionar a tecla Tab. Tambem com o TEdit como Exemplo. Desta vez é isso ? rs

.LG.


GOSTEI 0
Lenasi

Lenasi

01/09/2009

pois bem...
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_TAB) then
  begin
    Key := #0;
    Perform(WM_NEXTDLGCTL,0,0);
  end;
end;
Isso irá pular para o próximo componente na ordem do [b:6c39e2488f]TabStop[/b:6c39e2488f] ao precionar a tecla Tab. Tambem com o TEdit como Exemplo. Desta vez é isso ? rs .LG.



NÃO AMIGO...
O TAB ESTÁ FUNCIONANDO, O QUE EU QUERO DIZER É QUE,
SEM PRESSIONAR O TAB OU ENTER PARA SAIR DO CAMPO, AO TENTAR GRAVAR, DEVIDO A MINHA FUNCÃO O CAMPO CONTINUA VAZIO, MESMO JÁ TER DIGITADO ALGUMA COISA, ENTENDEU? A FUNÇÃO ESTÁ CORRETA, VERIFICA SE O CAMPO É NULL OU VAZIO, MAS O PROBLEMA É QUE, FOI DIGITADO ALGUMA COISA...


GOSTEI 0
.lg.

.lg.

01/09/2009

Poderia ver o seu código!?
Ajudaria a entender.

.LG.


GOSTEI 0
Facc

Facc

01/09/2009

Como vc tá fazendo para jogar os dados do Edit no banco?

O botão para gravar é um SpeedButton? Lembrando que os SpeedButtons não recebem foco, por isso ainda fica ´preso´ o edit.


GOSTEI 0
Lenasi

Lenasi

01/09/2009

AMIGOS,

ACHO QUE NÃO ESTOU EXPLICANDO BEM...

OS CAMPOS SÃO DBEDIT..

NÃO TEM NADA A VER COM O BOTÃO...

É SIMPLES...

SÓ ESTOU QUERENDO DIZER QUE A VALIDAÇÃO DO CAMPO (SE VAZIO OU NÃO) ESTÁ SENDO VALIDADA MESMO QUE EU TENHA DIGITADO ALGO NESTE CAMPO...

VMS DETALHADAMENTE:
CADASTRO: BOTÃO INCLUIR, ABRE-SE OS CAMPOS PARA DIGITAÇÃO, OK?

INFORMEI NO CAMPO NOME, É CLARO, UM NOME QUALQUER.OK?

AGORA QUERO GRAVAR, BLZ, CLICO NO BOTÃO GRAVAR, OK?

AGORA QUE PEGA:
DIGITEI A INFORMAÇÃO, NÃO DEI ENTER E NEM TAB
(ESTOU DANDO COMO EXEMPLO UM CADASTRO DE APENAS UM CAMPO ´NOME´), FUI DIRETO AO BOTÃO GRAVAR...

A FUNÇÃO ENTENDE QUE O CAMPO ESTÁ VAZIO.. É ISTO !!!

AGORA APÓS DIGITADO, PRESSIONE TAB, PARA SAIR DESTE CAMPO (TIRANDO O FOCO DO MESMO), CONSIGO GRAVAR....


GOSTEI 0
Facc

Facc

01/09/2009

Amigo não precisa gritar.
Como vc está fazendo essa validação? Está comparando o DBEdit ou o Campo??

AMIGOS, ACHO QUE NÃO ESTOU EXPLICANDO BEM... OS CAMPOS SÃO DBEDIT.. NÃO TEM NADA A VER COM O BOTÃO... É SIMPLES... SÓ ESTOU QUERENDO DIZER QUE A VALIDAÇÃO DO CAMPO (SE VAZIO OU NÃO) ESTÁ SENDO VALIDADA MESMO QUE EU TENHA DIGITADO ALGO NESTE CAMPO... VMS DETALHADAMENTE: CADASTRO: BOTÃO INCLUIR, ABRE-SE OS CAMPOS PARA DIGITAÇÃO, OK? INFORMEI NO CAMPO NOME, É CLARO, UM NOME QUALQUER.OK? AGORA QUERO GRAVAR, BLZ, CLICO NO BOTÃO GRAVAR, OK? AGORA QUE PEGA: DIGITEI A INFORMAÇÃO, NÃO DEI ENTER E NEM TAB (ESTOU DANDO COMO EXEMPLO UM CADASTRO DE APENAS UM CAMPO ´NOME´), FUI DIRETO AO BOTÃO GRAVAR... A FUNÇÃO ENTENDE QUE O CAMPO ESTÁ VAZIO.. É ISTO !!! AGORA APÓS DIGITADO, PRESSIONE TAB, PARA SAIR DESTE CAMPO (TIRANDO O FOCO DO MESMO), CONSIGO GRAVAR....



GOSTEI 0
.lg.

.lg.

01/09/2009

Olha se o campo do DBEdit a gravação é direta... pra que vc quer regrava-lo!? Ele já o faz quando vc sai do campo.

Ao sair ele atribui o valor ao campo do DataSet.
Porem você pode pegar o valor digitado usando a propriedade [b:d9885d3cbc]Text[/b:d9885d3cbc].
DBEdit.Text
Este tem a informação digitada, porem no Campo do DataSet ainda não tera a informação enquanto vc não sair do campo.

Espero que isso ajude. rsrs, Agora é isto.
:lol:

.LG.


GOSTEI 0
Osocram

Osocram

01/09/2009

Enqto vc não sair do DBEdit ele não atualiza oq vc modificou no dataSet.


GOSTEI 0
Lenasi

Lenasi

01/09/2009

Enqto vc não sair do DBEdit ele não atualiza oq vc modificou no dataSet.


Então não tem jeito, enquanto não sair do campo (com TAB ou ENTER) vai sempre estar vazio?


Obrigado...


GOSTEI 0
Osocram

Osocram

01/09/2009

Pode tentar validar no OnChange mas cuida p não usar rotinas pesadas neste evento, pois pode deixar o sistema lento.

[quote:cf49c8723c=´osocram´]Enqto vc não sair do DBEdit ele não atualiza oq vc modificou no dataSet.


Então não tem jeito, enquanto não sair do campo (com TAB ou ENTER) vai sempre estar vazio?


Obrigado...[/quote:cf49c8723c]


GOSTEI 0
Facc

Facc

01/09/2009

[quote:c91967447a=´osocram´]Enqto vc não sair do DBEdit ele não atualiza oq vc modificou no dataSet.


Então não tem jeito, enquanto não sair do campo (com TAB ou ENTER) vai sempre estar vazio?


Obrigado...[/quote:c91967447a]

isso mesmo, esses componentes (DBEdits, entre outros) só efetivam após vc sair do campo. Para isso no momento que vc está gravando compare o que foi digitado no DBEdit
if Trim(DbEdit.Text) = ´´ then
  Mensagem de Erro;



GOSTEI 0
Facc

Facc

01/09/2009

[quote:de2b7c0171=´osocram´]Enqto vc não sair do DBEdit ele não atualiza oq vc modificou no dataSet.


Então não tem jeito, enquanto não sair do campo (com TAB ou ENTER) vai sempre estar vazio?


Obrigado...[/quote:de2b7c0171]

isso mesmo, esses componentes (DBEdits, entre outros) só efetivam após vc sair do campo. Para isso no momento que vc está gravando compare o que foi digitado no DBEdit
if Trim(DbEdit.Text) = ´´ then
  Mensagem de Erro;



GOSTEI 0
Osocram

Osocram

01/09/2009

Uma maneira de resolver isso é
so fazer um SetFocus no botão salvar
.
Assim sempre vai tirar o foco de onde estiver antes de salvar.

Ja tive esse problema qdo o usuario editar um DBEdit e tenta salvar usando um atalhoa Alt+S, pois o foco ainda não saiu do DBEdit e não pegava o valor correto.

Com um simples SetFocus resolvi o problema.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

01/09/2009

antes de efetuar a gravação, tente um DataSet.UpdateRecord.

algo como:
procedure TformX.BotaoGravarClick(Sender: TObject);
begin
  SeuDataSet.UpdateRecord;
  TClientDataset(SeuDataSet).ApplyUpdates(0); // no caso de ser um CDS
end;



GOSTEI 0
POSTAR