GARANTIR DESCONTO

Fórum Erro no ModalResult #446088

20/06/2013

0

Galera, seguinte...

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

Thiago Santos

Responder

Posts

20/06/2013

Jaime Junior

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.
Responder

Gostei + 0

20/06/2013

Thiago Santos

Então, com o Show, quando o FrmPesqCliF é mostrado, já exibe o AccessViolation.
Mas utilizando o Show, o ModalResult não irá funcionar, certo?
Responder

Gostei + 0

20/06/2013

Marco Salles

tire oAction := caFree;
e libere os recursos do Form após consumi-los

{sCod := FrmPesqCliF.dbgPesquisa.Columns[0].Field.AsString;


FrmPesqCliF.free;
Responder

Gostei + 0

21/06/2013

Thiago Santos

MARCO, tirei o caFree mas descobri o erro.
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 !
Responder

Gostei + 0

21/06/2013

Marco Salles

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:



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
Responder

Gostei + 0

24/06/2013

Thiago Santos

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 !
Responder

Gostei + 0

25/06/2013

Marco Salles

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
Responder

Gostei + 0

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

Aceitar