Fórum Arro !! quot; cannot focus a disabled or invisible window´ #367782

19/01/2009

0

Fala Galeraaaa...

Então meu problema é curioso, eu tenho um sistema que estava rodando perfeitamente, derrepente ele começou a dar esse erro ´cannot focus a disabled or invisible window´ quando ai faço um cadastro e volto para meu dbgrid e clico no dbgrid ele da esse erro, pior que já fiz de tudo e não consigo achar o problema , alguem saberia me dizer oq seria esse erro e como solucionar.


Agredeço muito que me ajudar..


Cleiflavio

Cleiflavio

Responder

Posts

19/01/2009

Wdrocha

Boa tarde.....provalvemente vc está jogando o focus em algo q está desabilitado....

vc poderia postar o código da unit??


Responder

Gostei + 0

19/01/2009

Cleiflavio

Ai está minha UNIT, quando eu fecho esse form e cliclo em meu dbgrid ele da o erro.

unit U_inserir_produto;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, StdCtrls, Buttons, Mask, DBCtrls, ComCtrls, jpeg, ExtCtrls, MIDASLIB;

type
TF_inserirProduto = class(TForm)
btinserirProduto: TBitBtn;
codigoproduto: TDBEdit;
numeroregistro: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit8: TDBEdit;
DBMemo1: TDBMemo;
Image1: TImage;
Label17: TLabel;
Label8: TLabel;
Label5: TLabel;
Label2: TLabel;
Label3: TLabel;
Label6: TLabel;
BitBtn1: TBitBtn;
StatusBar1: TStatusBar;
Label4: TLabel;
Label1: TLabel;
data_alteracao: TDBEdit;
Venc_Registro: TEdit;
Label7: TLabel;
validade: TEdit;
Label9: TLabel;
tipodeUso: TEdit;
Label10: TLabel;
reprocessamento: TEdit;
Label11: TLabel;
esteril: TEdit;
Label12: TLabel;
qtd_embalagem: TEdit;
Label13: TLabel;
nometecnico: TEdit;
Label14: TLabel;
nomecomercial: TEdit;
Label15: TLabel;
endereco: TEdit;
Label16: TLabel;
fabricante: TEdit;
Label18: TLabel;
procedure btinserirProdutoClick(Sender: TObject);
procedure codigoProdutoKeyPress(Sender: TObject; var Key: Char);
procedure FormActivate(Sender: TObject);
//procedure numeroregistroClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure btinserirProdutoMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
procedure BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure numeroregistroEnter(Sender: TObject);
procedure numeroregistroExit(Sender: TObject);
// procedure numeroregistroExit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
F_inserirProduto: TF_inserirProduto;

implementation
uses U_DM;
{$R *.dfm}

procedure TF_inserirProduto.btinserirProdutoClick(Sender: TObject);
begin
if trim(codigoProduto.Text)= ´´ then begin
messagedlg(´Preencha o codigo do produto´, mtwarning, [mbok],0);
exit;
end;
if messagedlg(´Inserir Produto ?´, mtconfirmation, [mbYes, mbNo],0) = mrYes then begin
if DM.CDS_relacaoProduto.isempty then

DM.CDS_relacaoProduto.Open;
DM.CDS_relacaoProduto.Post;
DM.CDS_relacaoProduto.ApplyUpdates(1);
DM.CDS_relacaoProduto.Insert;
venc_registro.Text := ´´;
validade.Text := ´´;
tipodeuso.Text := ´´;
reprocessamento.Text := ´´;
esteril.Text := ´´;
nometecnico.Text := ´´;
nomecomercial.Text := ´´;
fabricante.Text := ´´;
endereco.Text := ´´;
qtd_embalagem.Text := ´´;

Application.MessageBox(´Produto inserido com sucesso !!!´,´Produto Inserido!´, MB_OK);
end;

end;

procedure TF_inserirProduto.codigoProdutoKeyPress(Sender: TObject;
var Key: Char);
begin
if (Key = #13) then begin
Key := 0;
Perform(Wm_NextDlgCtl,0,0);
end;
end;

procedure TF_inserirProduto.FormActivate(Sender: TObject);
Begin
DM.CDS_relacaoProduto.Insert;
DM.CDS_relacaoProduto.Open;
//data_alteracao.Text := DateToStr(now);
//data_alteracao.Text := DateToStr(now);

end;

procedure TF_inserirProduto.BitBtn1Click(Sender: TObject);
begin

//DM.CDS_relacaoProduto.refresh ;
F_inserirProduto.Close;

end;

procedure TF_inserirProduto.btinserirProdutoMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
btinserirProduto.Font.color := clGrayText;
BitBtn1.font.color := clblack ;
end;

procedure TF_inserirProduto.BitBtn1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
btinserirProduto.Font.color := clblack;
BitBtn1.font.color := clGrayText ;
end;

procedure TF_inserirProduto.Image1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
btinserirProduto.Font.color := clblack;
BitBtn1.Font.color := clblack ;
end;

procedure TF_inserirProduto.numeroregistroEnter(Sender: TObject);
begin
numeroregistro.Text := ´10229340´;
end;

procedure TF_inserirProduto.numeroregistroExit(Sender: TObject);
begin
DM.query_relacao.Close;
DM.query_relacao.SQL.Clear;
DM.query_relacao.SQL.Add(´ select NOME_TECNICO, NOME_COMERCIAL, VENCIMENTO_DO_REGISTRO, FABRICANTE, ENDERECO, VALIDADE, TIPO_DE_USO, ESTERIL, QTD_EMBALAGEM, REPROCESSAMENTO from TABELA_REGISTRO where N_REGISTRO =´´´ + numeroregistro.Text + ´´´´ );
DM.query_relacao.Open;
venc_registro.Text := DM.query_relacao.fieldByName(´VENCIMENTO_DO_REGISTRO´).AsString;
validade.Text := DM.query_relacao.fieldByName(´VALIDADE´).AsString;
tipodeuso.Text := DM.query_relacao.fieldByName(´TIPO_DE_USO´).AsString;
reprocessamento.Text := DM.query_relacao.fieldByName(´REPROCESSAMENTO´).AsString;
esteril.Text := DM.query_relacao.fieldByName(´ESTERIL´).AsString;
nometecnico.Text := DM.query_relacao.fieldByName(´NOME_TECNICO´).AsString;
nomecomercial.Text := DM.query_relacao.fieldByName(´NOME_COMERCIAL´).AsString;
fabricante.Text := DM.query_relacao.fieldByName(´FABRICANTE´).AsString;
endereco.Text := DM.query_relacao.fieldByName(´ENDERECO´).AsString;
qtd_embalagem.Text := DM.query_relacao.fieldByName(´QTD_EMBALAGEM´).AsString;
end;

end.


Responder

Gostei + 0

19/01/2009

Wdrocha

Boa tarde Ceiflavio.....primeiro uma dica a vc...
vc está trocando Enter pelo Tab...

procedure TF_inserirProduto.codigoProdutoKeyPress(Sender: TObject;
var Key: Char);
begin
if (Key = #13) then begin
Key := 0;
Perform(Wm_NextDlgCtl,0,0);
end;
end; 


ao invés d fazer isso....

tente esta função...a mesma ficará no seu form principal e interceptará todas mensagens do teclado em toda sua aplicação....inclusive em forms filhos...

private
    { Private declarations }
    procedure DoEnterAsTab(var Msg: TMsg; var Handled: Boolean);


Depois....

//Procedure que substitui Tab por Enter
  procedure TFormPrincipal.DoEnterAsTab(var Msg: TMsg; var Handled: Boolean);
  begin
    if Msg.Message = WM_KEYDOWN then
    begin
      if Msg.wParam = VK_RETURN then
        Keybd_event(VK_TAB, 0, 0, 0);
    end;
  end;


e no OnCreate do seu form principal...

procedure TfPrincipal.FormCreate(Sender: TObject);
  begin
    Application.OnMessage := DoEnterAsTab;
  end;



Referente ao erro q está acontecendo...

vc não está usando o método OnClose do form instanciado..

no OnClose do form faça assim..

Action := CaFree;


verifique tbm aba do Delphi...
[b:7f21af48e0]Project --> Options[/b:7f21af48e0] e deixe apenas o form principal em [b:7f21af48e0]Auto-Create Forms[/b:7f21af48e0]....e mova para o outro lado todos os forms filhos....

Como vc está fazendo para instanciar os forms?? Vc pod postar??


Flw..


Responder

Gostei + 0

27/01/2009

Bacalhau

Coloca as propriedades do form assim:

formStyle := fsNormal;
Visible := false;


Responder

Gostei + 0

28/01/2009

Cleiflavio

Ok, problema resolvido, atraves da dica do bacalhau.

Valeuu


Responder

Gostei + 0

01/02/2009

Bacalhau

Naice!! :wink:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar