Duvidas com If, end, else, begin?
Boa tarde pessoal, eu estou em duvidas com esse codigo usando o if, end, else, begin.
Esta mostrando a mensagem [color=red:fb21bc3dac]messagedlg(´Atenção Usuário! Numero da sequencia digitada ´ + edit2.text + ´ não Localizada´,mterror,[mbOk],0);
if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes [/color:fb21bc3dac] e eu nao sei como fazer corretamente para mostrar a mensagem somente uma vez.
Agradeço a ajuda de todos
Adriano
procedure TForm8.Edit2Exit(Sender: TObject); begin if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then begin maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString; maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString; maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString; end else begin messagedlg(´Atenção Usuário! Numero da sequencia digitada ´ + edit2.text + ´ não Localizada´,mterror,[mbOk],0); if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then begin edit2.text:=´´; edit2.setfocus; end else begin maskedit1.enabled:=true; maskedit2.enabled:=true; maskedit3.enabled:=true; MASKedit1.SETFOCUS; end; end; end;
if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes [/color:fb21bc3dac] e eu nao sei como fazer corretamente para mostrar a mensagem somente uma vez.
Agradeço a ajuda de todos
Adriano
Adriano_servitec
Curtidas 0
Respostas
Campsoft
27/11/2006
Cara, eu criaria uma variavel booleana e deixaria ela TRUE no activate do form e definiria ela como false no OnExit do edit, junto com o primeiro erro.
GOSTEI 0
Campsoft
27/11/2006
so complementando...
dai bastaria vc checar antes do erro se esta variavel esta em true... se estiver, exibe... se nao..
dai bastaria vc checar antes do erro se esta variavel esta em true... se estiver, exibe... se nao..
GOSTEI 0
Adriano_servitec
27/11/2006
so complementando...
dai bastaria vc checar antes do erro se esta variavel esta em true... se estiver, exibe... se nao..
Olah amigo, primeiramente obrigado por responder minha duvida, mais como devo fazer para que nao repita a mensagem duas vezes?
Tipo eu fiz assim, criei uma variavel booleana global aki
var
Form8: TForm8;
Dt1, Dt2 : TDate;
[b:d9b952665f]Confirma : Boolean;[/b:d9b952665f]
ai no codigo para confirmar como devo fazer?
fiz assim, mais sem resultado
procedure TForm8.Edit2Exit(Sender: TObject);
begin
if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then begin
maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString;
maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString;
maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString;
end else begin
[b:d9b952665f]if confirma then begin[/b:d9b952665f]
messagedlg(´Atenção Usuário! Numero da sequencia digitada ´ + edit2.text + ´ não Localizada´,mterror,[mbOk],0);
if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then begin
edit2.text:=´´;
edit2.setfocus;
end else begin
maskedit1.enabled:=true;
maskedit2.enabled:=true;
maskedit3.enabled:=true;
MASKedit1.SETFOCUS;
end;
end;
end;
end;
Ou seja acrescentei essa linha em negrito. Mais continua repetindo.
Desculpe minha ignorancia em nao saber como fazer amigo.
GOSTEI 0
Campsoft
27/11/2006
Bom vamos lá... deixa eu tentar te explicar, não sei se é a melhor forma de se fazer isso, mais funciona:
La onde vc define as variaveis do form...
var
Form1: Tform1;
Exibiu : Boolean;
---------------------------
Lá no OnActivate do seu form, vc faz assim:
Exibiu := false; // << não exibiu ainda
-----------------------------
Lá no OnExit do seu edit vc faz assim:
If Not(Exibiu) then begin
Exibiu:=True;
..... todo o seu codigo
End;
Vê se funciona, ai no caso teoricamente seria pra funcionar da seguinte maneira... vc pode modificar isso...
Quando você abrir o form, ele ja vai setar a variavel exibiu para false (ainda não exibiu)
No onExit, ele vai testar se isso e false ou nao.. se for.. ele mostra a mensagem e seta ela pra True, como ja exibido.
Caso contrario, ele nao vai exibir..
La onde vc define as variaveis do form...
var
Form1: Tform1;
Exibiu : Boolean;
---------------------------
Lá no OnActivate do seu form, vc faz assim:
Exibiu := false; // << não exibiu ainda
-----------------------------
Lá no OnExit do seu edit vc faz assim:
If Not(Exibiu) then begin
Exibiu:=True;
..... todo o seu codigo
End;
Vê se funciona, ai no caso teoricamente seria pra funcionar da seguinte maneira... vc pode modificar isso...
Quando você abrir o form, ele ja vai setar a variavel exibiu para false (ainda não exibiu)
No onExit, ele vai testar se isso e false ou nao.. se for.. ele mostra a mensagem e seta ela pra True, como ja exibido.
Caso contrario, ele nao vai exibir..
GOSTEI 0
Emerson Nascimento
27/11/2006
olha, não sei se eu entendi o que você precisa, mas tente assim:
procedure TForm8.Edit2Exit(Sender: TObject); begin if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then begin maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString; maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString; maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString; end else begin if application.messagebox(pchar(´Atenção Usuário! Numero da sequencia digitada (´+ edit2.text+ ´) não Localizada´13´Digitar Novamente?´), ´Aviso´, MB_ICONEXCLAMATION + MB_APPLMODAL + MB_YESNO + MB_DEFBUTTON1)=idYes begin edit2.text:=´´; edit2.setfocus; end else begin maskedit1.enabled:=true; maskedit2.enabled:=true; maskedit3.enabled:=true; MASKedit1.SETFOCUS; end; end; end;
GOSTEI 0
Adriano_servitec
27/11/2006
Olah, se eu colocar a variavel boolenana e a confirmaçao for falsa, ele nao esta voltando no mesmo edit, ou seja esta pulando para o proximo setfocus.
Se eu deixo somente assim
ele me da esse aviso
Se eu deixo somente assim
procedure TForm8.Edit2Exit(Sender: TObject); begin //If Not(CONFIRMA) then begin //CONFIRMA:=True; if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then begin maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString; maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString; maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString; end else begin if application.messagebox(pchar(´Atenção Usuário! Numero da sequencia digitada ´ +EDIT2.TEXT+ ´, não Localizada´13´Digitar Novamente?´),´Aviso´, MB_ICONEXCLAMATION + MB_APPLMODAL + MB_YESNO + MB_DEFBUTTON1)=idYes then begin edit2.text:=´´; edit2.setfocus; end else begin maskedit1.enabled:=true; maskedit2.enabled:=true; maskedit3.enabled:=true; MASKedit1.SETFOCUS; end; end; end; //END;
if application.messagebox(pchar(´Atenção Usuário! Numero da sequencia digitada ´ +EDIT2.TEXT+ ´, não Localizada´#13´Digitar Novamente?´),´Aviso´, MB_ICONEXCLAMATION + MB_APPLMODAL + MB_YESNO + MB_DEFBUTTON1)=idYes
duas vezes, e eu queria que desse apenas uma vezGOSTEI 0
Adriano_servitec
27/11/2006
E usando um filtro no evento onexit tem como criar uma condiçao tambem?
Tipo assim
Gostaria de saber te tem como fazer um IF ai neste codigo, ou o LOCATE eh mais rapido?
Nao estou acertando fazer certo
olhe como fiz:
Tipo assim
DM.ibTable1.filtered := false; DM.ibTable1.filter := ´matricula = ´+ QuotedStr(Edit1.Text); DM.ibTable1.filtered := true; Label3.CAPTION:=DM.ibTable1.FieldByName(´associado´).AsString;
Gostaria de saber te tem como fazer um IF ai neste codigo, ou o LOCATE eh mais rapido?
Nao estou acertando fazer certo
olhe como fiz:
if DM.ibTable1.LOCATE(´Matricula´,(Edit1.text),[]) then begin Label3.caption:=DM.ibTable1.FieldByName(´associado´).AsString; end else begin messagedlg(´Código do associado não Localizado´,mterror,[mbOk],0); if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then begin edit1.text:=´´; edit1.setfocus; end else edit2.Enabled:=True; edit2.Setfocus; end; end;
GOSTEI 0
Emerson Nascimento
27/11/2006
creio que a mensagem esteja aparecendo duas vezes porque algum outro evento pode estar ´disparando´.
GOSTEI 0
Adriano_servitec
27/11/2006
creio que a mensagem esteja aparecendo duas vezes porque algum outro evento pode estar ´disparando´.
Sera que eh pq uso o comando APPEND antes?
Queria trabalhar com a tabela fechada e abri-la somente na hora de gravar, mais tive problemas com esse comando
procedure TForm3.DataSource1StateChange(Sender: TObject); var I: Integer; Perm: Boolean; begin //*****trata botoes enabled true ou false******* b1.Enabled := Datasource1.State in [dsBrowse]; b2.Enabled := Datasource1.State in [dsInsert,dsEdit]; b3.Enabled := Datasource1.State in [dsInsert,dsEdit]; b4.Enabled := Datasource1.State in [dsBrowse]; b5.Enabled := Datasource1.State in [dsBrowse]; //********pada deixar edit, jvedit,maskedit e memo com o enabled false***** Perm := (DataSource1.State in [dsInsert, dsEdit]); for I := 0 to Self.ComponentCount -1 do begin if (Self.Components[i] is TEdit) then (Self.Components[i] as TEdit).Enabled := Perm; if (Self.Components[i] is TMaskEdit) then (Self.Components[i] as TMaskEdit).Enabled := Perm; end; end;
A soluçao que eu achei eh abrir a tabela na hora de incluir os dados.
mais eu nao uso dbedits e sim edits simples, justamente para nao atrapalhar, mais nao sei se pode ser isso que esta ocorrendo.
GOSTEI 0
Adriano_servitec
27/11/2006
Ainda nao descobri uma maneira de NAO aparecer duas vezes a messageDLG
Pessoal Olha o codigo como eu deixei agora
Pessoal Olha o codigo como eu deixei agora
procedure TForm6.Edit5Exit(Sender: TObject);
begin
dm.qrylimpa.close;
dm.qrylimpa.sql.text := ´select * from corrente where sequencia = :psequencia´;
dm.qrylimpa.ParamByName(´psequencia´).AsString := Edit5.Text;
dm.qrylimpa.Open;
if not dm.qrylimpa.isEmpty then
begin
MaskEdit3.setfocus;
maskedit3.text:=DM.qrylimpa.FieldByName(´mespgto´).Value;
maskedit4.text:=DM.qrylimpa.FieldByName(´mesrefini´).Value;
maskedit5.text:=DM.qrylimpa.FieldByName(´mesreffim´).Value;
end
else
begin
[b:b33a90f0ae]messagedlg(´Sequencia digitada não Localizada´,mterror,[mbOk],0);[/b:b33a90f0ae]
dm.QryLimpa.close;
dm.qrylimpa.sql.text := ´select * from corrente´;
dm.QryLimpa.Open;
edit5.text:=´´;
edit5.setfocus;
end;
end;
A parte em negrito esta mostrando duas vezes, nao achei nada que estivesse atrapalhando este edit, soh tem essa mensagem no evento dele e tambem no onkeypress deste componente esta assimif key#=13 then
MaskEdit3.setfocus;
GOSTEI 0