Erro no ModalResult
Galera, seguinte...
Tenho um form que busca um determinado cadastro e no código do botão de pesquisa está:
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:
OnCreate:
E no OnDestroy do FrmPesqCliF
Usando debug na linha, ele apresenta erro. Se comento, nada de erro.
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
Curtidas 0
Respostas
Jaime Junior
20/06/2013
Tenta substituir o ShowModal por simplesmente show.
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.
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
Thiago Santos
20/06/2013
Então, com o Show, quando o FrmPesqCliF é mostrado, já exibe o AccessViolation.
Mas utilizando o Show, o ModalResult não irá funcionar, certo?
Mas utilizando o Show, o ModalResult não irá funcionar, certo?
GOSTEI 0
Marco Salles
20/06/2013
tire oAction := caFree;
e libere os recursos do Form após consumi-los
{sCod := FrmPesqCliF.dbgPesquisa.Columns[0].Field.AsString;
FrmPesqCliF.free;
e libere os recursos do Form após consumi-los
{sCod := FrmPesqCliF.dbgPesquisa.Columns[0].Field.AsString;
FrmPesqCliF.free;
GOSTEI 0
Thiago Santos
20/06/2013
MARCO, tirei o caFree mas descobri o erro.
Na minha aplicação, tenho uma procedure de criação de Form.
E no no onExecute do ActionManager do FrmPesqCliF tinha o código:
Substitui por:
Parou de exibir o AccessViolation. Mas ainda queria continuar utilizando uma procedure, para a criação de Form.
Mas obrigado a todos !
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
Marco Salles
20/06/2013
calma , que a sua dúvida é conceitual
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:
quer dizer que o Action:=cafrre Não fez nenhuma diferença ???? é isto ???
como e onde esta definido a Variavel FrmPesqCliF ?????????
[]sds
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
Thiago Santos
20/06/2013
Troquei e funcionou.
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 !
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
Marco Salles
20/06/2013
Bem ainda não entendi direito ..
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
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