Problema com foco.

Delphi

06/11/2006

Bom tenho um campo dbedit.text e no evento On Exit tenho este codigo

if DBEdit1.Text = ´ ´ then
FrmListaLinhas.Showmodal;

Explicando se o dbedit1.text estiver em branco ele chama o form com a lista pra eu escolher, mais o problema e se eu resolver cancelar, vou no botão cancelar dai em vez de cancelar ele abre o form de lista pq o dbedit1.text perdeu o foco. dai tenho que escolher um da lista pra depois cancelar. tem como resolver isso?


Digital_man

Digital_man

Curtidas 0

Respostas

Macario

Macario

06/11/2006

Ola.

Uma maneira:

if(ActiveControl = BotaoCancelar) then
exit;



Mas atente que so serve para componentes descendentes de TWinControl.

Espero que lhe ajude.


GOSTEI 0
Marco Salles

Marco Salles

06/11/2006

outra maneira.. No evento onexit acrescente:

if not BotaoCancelar.setfocus Then if DBEdit1.Text = ´ ´ then FrmListaLinhas.Showmodal;



GOSTEI 0
Digital_man

Digital_man

06/11/2006

Ola. Uma maneira:
if(ActiveControl = BotaoCancelar) then
exit;
Mas atente que so serve para componentes descendentes de TWinControl. Espero que lhe ajude.


Amigos funcionou assim.

procedure TFrmCadPro.DBEdit1Exit(Sender: TObject);
begin
if(ActiveControl = btnCancelar) then
ADOQProdutos.Cancel
else
//if not btnCancelar. Then
if DBEdit1.Text = ´´ then
FrmListaLinhas.Showmodal;

end;


GOSTEI 0
Digital_man

Digital_man

06/11/2006

Ola. Uma maneira:
if(ActiveControl = BotaoCancelar) then
exit;
Mas atente que so serve para componentes descendentes de TWinControl. Espero que lhe ajude.


[b:e73d0416ac]Amigos funcionou assim.

procedure TFrmCadPro.DBEdit1Exit(Sender: TObject);
begin
if(ActiveControl = btnCancelar) then
ADOQProdutos.Cancel
else
//if not btnCancelar. Then
if DBEdit1.Text = ´´ then
FrmListaLinhas.Showmodal;

end;[/b:e73d0416ac]


GOSTEI 0
Digital_man

Digital_man

06/11/2006

Ola. Uma maneira:
if(ActiveControl = BotaoCancelar) then
exit;
Mas atente que so serve para componentes descendentes de TWinControl. Espero que lhe ajude.


[b:1eef082e92]Amigos funcionou assim.

procedure TFrmCadPro.DBEdit1Exit(Sender: TObject);
begin
if(ActiveControl = btnCancelar) then
ADOQProdutos.Cancel
else
//if not btnCancelar. Then
if DBEdit1.Text = ´´ then
FrmListaLinhas.Showmodal;

end;[/b:1eef082e92]


GOSTEI 0
Rodc

Rodc

06/11/2006

Ou usa u SpeedButton para o botão Cancelar


GOSTEI 0
Carlos Bernardo

Carlos Bernardo

06/11/2006

if (dbedit1.text = ´´) and (not btnCancelar.focused) then
FrmListaLinhas.Showmodal;


GOSTEI 0
Marco Salles

Marco Salles

06/11/2006

independente do que voce uses:

1)
procedure TFrmCadPro.DBEdit1Exit(Sender: TObject); begin if(ActiveControl = btnCancelar) then ADOQProdutos.Cancel else if DBEdit1.Text = ´´ then FrmListaLinhas.Showmodal;


2)
if not BotaoCancelar.setfocus Then if DBEdit1.Text = ´ ´ then FrmListaLinhas.Showmodal;


3)
if (dbedit1.text <> ´´) or( btnCancelar.focused) then ADOQProdutos.Cancel else FrmListaLinhas.Showmodal;


emfim, uma outras tantas series de modos que analisam de certo modo o proximo foco do outro controle...Porém Nenhuma delas , funciona corretamente , se no programa possuir teclas de atalho.....

Em situaçoes assim , tem que se garantir a mudança efetiva do foco , o que não ocorre usando a tecla de atalho..


GOSTEI 0
POSTAR