DbEdit.SetFocus = Access Violation

07/11/2005

Coloquei a função dbEdit2.SETFOCUS, no ONCHANGE da DBEDIT1.
Mas ele gera um access violation.
Não estou conseguinmdo saber o por que.

Agradeço a Ajuda.
Obrigado;


Buck

Respostas

07/11/2005

Rafael Santana

os dois Edits estão no mesmo form???


Responder Citar

07/11/2005

Wiltonfenix

Tem certeza que o dbedit para onde você está enviando o foco existe?


Responder Citar

07/11/2005

Martins

Coloquei a função dbEdit2.SETFOCUS, no ONCHANGE da DBEDIT1. Mas ele gera um access violation. Não estou conseguinmdo saber o por que. Agradeço a Ajuda. Obrigado;


Verifique se esse edit está no mesmo local, pq caso ele esteja em outro form (pouco provavel), caso vc esteja usando PageControl ou se esse edit estiver invisivel, esse erro será apresentado.

verifique.

Boa sorte!!!


Responder Citar

07/11/2005

Martins

Tem certeza que o dbedit para onde você está enviando o foco existe?


Acredito q deva existir esse Edit2, caso contrário o código dele não compilaria, tá estranho isso, pq mesmo q estive invisivel para o controle o erro apresentado deveria ser outro, e não esse de violação de acesso.

Precisamos de mais detalhes para avaliar o paciente, hehehe!!!


Responder Citar

07/11/2005

Wiltonfenix

Quando eu disse ´existe´, entenda-se: criado, instanciado,...

Porque como o Martins disse, ele pode estar em outro Form ou outro componente que não foi criado.


Responder Citar

07/11/2005

Buck

Os dbEdits estão no mesmo Form, estão Visiveis, e Ativadas.
Mas a função está no OnChange da dbEdit1, pois há o Form da ´Consulta´ em cima. Ao Clicar no Grid do Form ´Consulta´, ele volta com o Nome na dbEDIT1.
É aí que o SetFocus tá dando pau...


Responder Citar

08/11/2005

Wiltonfenix

Já tentou form_do_edit.dbEdit2.Setfocus ?


Responder Citar

08/11/2005

Buck

sim, ja tentei...


Responder Citar

08/11/2005

Anfm

Esse erro está acontecendo qdo vc cria o form??


Responder Citar

08/11/2005

Buck

sim, mas aí ´cannot focus a invisible or disabled window´.
mas se colocar ´if form.showing = true then´, aí ele roda, mas dá aquele erro de access violation depois.


Responder Citar

08/11/2005

Anfm

pq vc está usando o evento onchange? Sempre q o usuário digitar uma letra vc quer q ele vá para o DBEdit2??? Não seria melhor vc colocar isto qdo o usuário pressionar enter?


Responder Citar

08/11/2005

Martins

Os dbEdits estão no mesmo Form, estão Visiveis, e Ativadas. Mas a função está no OnChange da dbEdit1, pois há o Form da ´Consulta´ em cima. Ao Clicar no Grid do Form ´Consulta´, ele volta com o Nome na dbEDIT1. É aí que o SetFocus tá dando pau...


Vc chama o form de consulta de onde? vamos supor.

form1 -> o q tem seus dbedits
form2 -> o q tem o dbgrid

vc chama o form2 através do form1? Se for, é só vc colocar assim.
  Form2.ShowModal;
  DBEdit1.Text := Form2.DBGrid1.Fields[0&93;.AsString;
Assim quando vc fechar o form de consulta ele trará o registro setado no dbgrid, sendo [b:6d40083ae8]0[/b:6d40083ae8] o primeiro campo, vc pode alterar para sua necessidade.

se vc estiver selecionando o campo com OnDbClick no grid, para q ele retorne para form1 com o valor e automaticamente vá para DbEdit2. tente assim
  Form1.Edit1.Text:= DbGrid1.Fields[0&93;.AsString;
  close;


Ou então pode o código q vc tá usando, fica bem mais fácil.


Responder Citar

08/11/2005

Martins

sim, mas aí ´cannot focus a invisible or disabled window´. mas se colocar ´if form.showing = true then´, aí ele roda, mas dá aquele erro de access violation depois.


Como vc está fazendo essa chamada dos forms, e carregando o valor nos DbEdit´s, entendo q o evento no OnChage é para ser disparado ao receber um valor, valor este q virá da consulta para DbEdit1, recebendo esse valor vá para DbEdit2, mesmo assim não sei se é bom negócio deixar desse jeito, pq vc poderia setar isso condicionalmente, mas vamos ao erro aos forms. Se vc puder postar o código aqui fica mais fácil de chagarmos a uma solução caso vc ainda não tenha encontrado.


Responder Citar

08/11/2005

Buck

fica meio dificil de postar os codigos, pois estão em outro pc, mas vamos lá.

no form1, ficam as DbEdits.
no Form2, fica o dbGrid.

onEnter da dbEdit1, ele chama o Form2 (consulta)

onCellClick do dbGrid, ele fecha o Form2 e preenche a dbEdit1.

OnChange dbEdit1 (Form1)
dbEdit2.SetFocus;

mas se colocar assim no ONChange ele nem roda,

então:
if form1.showing = true then
OnChange dbEdit1 (Form1)
dbEdit2.SetFocus;

........
é isso pessoal,
muito estranho esse erro.
Agradeço a cooperação de vocês...
Abraço !


Responder Citar

08/11/2005

Martins

fica meio dificil de postar os codigos, pois estão em outro pc, mas vamos lá. no form1, ficam as DbEdits. no Form2, fica o dbGrid. onEnter da dbEdit1, ele chama o Form2 (consulta) onCellClick do dbGrid, ele fecha o Form2 e preenche a dbEdit1. OnChange dbEdit1 (Form1) dbEdit2.SetFocus; mas se colocar assim no ONChange ele nem roda, então: if form1.showing = true then OnChange dbEdit1 (Form1) dbEdit2.SetFocus; ........ é isso pessoal, muito estranho esse erro. Agradeço a cooperação de vocês... Abraço !


Vc viu e testou o q eu postei, pq vc tem os dois forms do jeito q eu imaginei.

veja novamente.

form1 -> o q tem seus dbedits
form2 -> o q tem o dbgrid

Código:
procedure TForm1.DBEdit1Enter(Sender: TObject);
begin
  Form2.ShowModal;
  DBEdit1.Text:= Form2.DBGrid1.Fields[0&93;.AsString;
  DBEdit2.Text:= Form2.DBGrid1.Fields&91;1&93;.AsString;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  DBEdit2.SetFocus;
end;

Assim quando vc fechar o form de consulta ele trará o registro setado no dbgrid, sendo 0 o primeiro campo, vc pode alterar para sua necessidade.

Ao clicar em OnCellClick, será disparado o close, pq o registro é setado
no momento em q vc clicar sobre a célula.
  close; 


Qualquer coisa, te mando um exemplo por e-mail, posta aí teu e-mail q eu mando.


Responder Citar