Fórum Erro no ModalResult #446088
20/06/2013
0
Tenho um form que busca um determinado cadastro e no código do botão de pesquisa está:
if FrmPesqCliF.ModalResult = mrOK then // Debug marcado
begin
{sCod := FrmPesqCliF.dbgPesquisa.Columns[0].Field.AsString;
if sCod = '' then
begin
...
end;
Aí é aberto o form de pesquisa. Faço a pesquisa normalmente. Quando clicado no botão OK(ModalResult = mrOK) ou no Cancelar(ModalResult = mrCancel), a minha aplicação exibe um AccessViolation.
No form de pesquisa é herdado o seguinte código:
OnClose:
Action := caFree;
OnCreate:
ShowModal;
E no OnDestroy do FrmPesqCliF
FrmPesqCliF := nil;
Usando debug na linha, ele apresenta erro. Se comento, nada de erro.
Thiago Santos
Curtir tópico
+ 0Posts
20/06/2013
Jaime Junior
Sei que as vezes usamos o showmodal para bloquear os outros form, mas como trabalhamos com Janelas pais e filho dar este erro e utilizo o show para chamar o form que quero e o bloqueio faço manualmente, lembrando é claro de liberar na hora que morre.
Gostei + 0
20/06/2013
Thiago Santos
Mas utilizando o Show, o ModalResult não irá funcionar, certo?
Gostei + 0
20/06/2013
Marco Salles
e libere os recursos do Form após consumi-los
{sCod := FrmPesqCliF.dbgPesquisa.Columns[0].Field.AsString;
FrmPesqCliF.free;
Gostei + 0
21/06/2013
Thiago Santos
Na minha aplicação, tenho uma procedure de criação de Form.
procedure CriarForm(FormClass: TFormClass; Form: TForm);
begin
if Assigned(Form) then
begin
Form.WindowState := wsNormal;
Form.BringToFront;
end
else
Application.CreateForm(FormClass, Form);
end;
E no no onExecute do ActionManager do FrmPesqCliF tinha o código:
procedure TFrmPrincipal.amFuncoesCargosExecute(Sender: TObject); begin // Criar Form de Funções -> Cargo CriarForm(TFrmPesqCliF,FrmPesqCliF); end;
Substitui por:
if Assigned(FrmPesqCliF) then
begin
FrmPesqCliF.WindowState := wsNormal;
FrmPesqCliF.BringToFront;
end
else
Application.CreateForm(TFrmPesqCliF, FrmPesqCliF);
Parou de exibir o AccessViolation. Mas ainda queria continuar utilizando uma procedure, para a criação de Form.
Mas obrigado a todos !
Gostei + 0
21/06/2013
Marco Salles
existe alguma coisas pequenas por trás
eu não entendi .. vc trocou
E no no onExecute do ActionManager do FrmPesqCliF tinha o código:
procedure TFrmPrincipal.amFuncoesCargosExecute(Sender: TObject); begin // Criar Form de Funções -> Cargo CriarForm(TFrmPesqCliF,FrmPesqCliF); end;
procedure TFrmPrincipal.amFuncoesCargosExecute(Sender: TObject);
begin
if Assigned(FrmPesqCliF) then
begin
FrmPesqCliF.WindowState := wsNormal;
FrmPesqCliF.BringToFront;
end
else
Application.CreateForm(TFrmPesqCliF, FrmPesqCliF);
quer dizer que o Action:=cafrre Não fez nenhuma diferença ???? é isto ???
como e onde esta definido a Variavel FrmPesqCliF ?????????
[]sds
Gostei + 0
24/06/2013
Thiago Santos
Então, eu tenho um Form Padrão, e o Action := caFree está no OnClose do Form Padrão.
Estava dando erro se eu utilizar o a procedure CriarForm.
Tinha criado esta procedure para não ficar digitando "if Assigned..." em todos os eventos OnExecute as Actions.
Mas não até hoje, não conseguir criar uma procedure padrão para criação dos forms.
Se souber de algum jeito, ficarei feliz em saber. :]
Mas obrigado pela ajuda !
Gostei + 0
25/06/2013
Marco Salles
se quiser fazer um exemplo e enviar para mim
marcosalles.wordpress.com
Agora quando a procedures e funções para criar método eu aconselho o uso de Padrões
veja um bom exemplo em
http://forum.devmedia.com.br/viewtopic.php?t=74823&highlight=form+nome
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)