Aplicação não abrir duas vezes

28/03/2010

Colegas,   Preciso fazer com que minha aplicação não abra duas vezes, caso o usuário por engano tente abri novamente... Gostaria que o form principal maximizasse mediante a tentativa de abrir novamente...     Aguardo     Um abraço   Irenildo Carvalho
Irenildo Carvalho

Irenildo Carvalho

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

28/03/2010

Olá amigo, implemente o código abaixo no DPR de sua aplicação. para isso vá ao menu Projetct / View Source .

Provavelmente ele estará mais ou menos da sgeuinte forma.


program xptp;

uses
  Forms,
  Unit1 in 'Unit1.pas' ;

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Altere o mesmo para que fique

program xptp;

uses
  Forms,
  Unit1 in 'Unit1.pas', Windows, Dialogs ;

{$R *.res}

var
  Hwnd: Thandle;
begin
  Hwnd := FindWindow ('TForm1', 'Form1');
  if Hwnd = 0 then
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end
  else
  begin
    MessageDlg ('Já existe uma instãncia deste programa, verifique por favor!!',mtinformation,[mbok], 0);
    SetForegroundWindow (Hwnd);
  end;
end.



Faça as alterações e veja o resultado.

Um abraço

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

28/03/2010

Olá amigo, consegui implementar o exemplo que lhe passei ?  Existe mais alguma dúvida ? Estamos aguardando para fecharmos o chamado.
 
Um abraço

Wesley
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Ei,     Desculpa a demora, precisei me ausentar...   Olha só implementei como vc me passou, mas deum erro, segue abaixo     [Error] SysErp.dpr(150): Incompatible types: 'Class reference' and 'PAnsiChar'       aguardo   um abraço     Irenildo
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Ei,     Desculpa, eu tinha feito errado... Mas agora ta como vc me passou, mas continua abrindo várias instâncias...   V meu código como ficou:         var
  Hwnd: Thandle;
begin
  Hwnd := FindWindow ('TfrmMenu', 'frmMenu');
  if Hwnd = 0 then
  begin
    Application.Initialize;
    Application.Title := 'SysErp';
    Application.CreateForm(TdmAdo, dmAdo);
    Application.CreateForm(TfrmMenu, frmMenu);
    Application.Run;
  end
  else
  begin
    MessageDlg ('Já existe uma instância deste programa aberta, verifique por favor!!',mtinformation,[mbok], 0);
    SetForegroundWindow (Hwnd);
  end;
end.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

28/03/2010

Olá amigo,

 Fiz um exemplo com os mesmos nomes de forms que você e funcionou, faça uma exemplo de teste e me mande, pois aqui esta funcionando.
Veja o codigo abaixo :

program Project1;

uses
  Forms,
  Windows,
  Dialogs,
  Unit1 in 'Unit1.pas' ,
  Unit2 in 'Unit2.pas' {dmAdo: TDataModule};

{$R *.res}

var
  Hwnd: Thandle;
begin
  Hwnd := FindWindow ('TfrmMenu', 'frmMenu');
  if Hwnd = 0 then
  begin
    Application.Initialize;
    Application.Title := 'SysErp';
  Application.CreateForm(TdmAdo, dmAdo);
  Application.CreateForm(TfrmMenu, frmMenu);
  Application.Run;
  end
  else
  begin
    MessageDlg ('Já existe uma instância deste programa aberta, verifique por favor!!',mtinformation,[mbok], 0);
    SetForegroundWindow (Hwnd);
  end;
end.



Um abraço

Wesley Y
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Olha,   Continua abrindo várias instâncias... V aí mano... Valeu...   program SysErp; uses
  Forms,
  Windows,
  Dialogs,
  XPMan,
  Funcao in 'Funcao.pas',
  Padrao in 'Padrao.pas' ,
  dadADO in 'dadADO.pas' {dmAdo: TDataModule},
  RelPadrao in 'RelPadrao.pas' ,
  CadPadrao in 'CadPadrao.pas' ,
  FilRelPadrao in 'FilRelPadrao.pas' ,
  CadPadraoDetalhe in 'CadPadraoDetalhe.pas' ,
  Menu in 'Menu.pas',
  CadGrupo in 'CadGrupo.pas' ,
  CadGrupoDetalhe in 'CadGrupoDetalhe.pas' ,
  CadEstado in 'CadEstado.pas' ,
  CadEstadoDetalhe in 'CadEstadoDetalhe.pas' ,
  Endereco in 'Endereco.pas' {fraEndereco: TFrame},
  CadRepresentante in 'CadRepresentante.pas' ,
  CadRepresentanteDetalhe in 'CadRepresentanteDetalhe.pas' ,
  CadCliente in 'CadCliente.pas' ,
  CadClienteDetalhe in 'CadClienteDetalhe.pas' ,
  CadProduto in 'CadProduto.pas' ,
  CadProdutoDetalhe in 'CadProdutoDetalhe.pas' ,
  FilRelComissaoVendedor in 'FilRelComissaoVendedor.pas' ,
  RelComissaoVenda in 'RelComissaoVenda.pas' ,
  FilRelVenda in 'FilRelVenda.pas' ,
  RelVendaPeriodo in 'RelVendaPeriodo.pas' ,
  CadEmpresa in 'CadEmpresa.pas' ,
  CadCodigoFiscal in 'CadCodigoFiscal.pas' ,
  CadCodigoFiscalDetalhe in 'CadCodigoFiscalDetalhe.pas' ,
  Sobre in 'Sobre.pas' ,
  Permissao in 'Permissao.pas' ,
  CadOrdemServico in 'CadOrdemServico.pas' ,
  CadOrdemServicoDetalhe in 'CadOrdemServicoDetalhe.pas' ,
  FilRelListaPreco in 'FilRelListaPreco.pas' ,
  RelListaPreco in 'RelListaPreco.pas' ,
  Extenso in 'Extenso.pas',
  RelOrdemServico in 'RelOrdemServico.pas' ,
  login in 'login.pas' ,
  CadUsuarioDetalhe in 'CadUsuarioDetalhe.pas' ,
  CadUsuario in 'CadUsuario.pas' ,
  CadParametro in 'CadParametro.pas' ,
  ReajustePreco in 'ReajustePreco.pas' ,
  CadFornecedor in 'CadFornecedor.pas' ,
  CadFornecedorDetalhe in 'CadFornecedorDetalhe.pas' ,
  CadNotaFiscalFornec in 'CadNotaFiscalFornec.pas' ,
  CadNotaFiscalFornecDetalhe in 'CadNotaFiscalFornecDetalhe.pas' ,
  CadTipoTitulo in 'CadTipoTitulo.pas' ,
  CadTipoTituloDetalhe in 'CadTipoTituloDetalhe.pas' ,
  CadFormaPagamento in 'CadFormaPagamento.pas' ,
  CadFormaPagamentoDetalhe in 'CadFormaPagamentoDetalhe.pas' ,
  FilCadPadrao in 'FilCadPadrao.pas' ,
  CadTituloPagar in 'CadTituloPagar.pas' ,
  CadTituloPagarDetalhe in 'CadTituloPagarDetalhe.pas' ,
  FilCadTituloPagar in 'FilCadTituloPagar.pas' ,
  CadTituloReceber in 'CadTituloReceber.pas' ,
  FilCadTituloReceber in 'FilCadTituloReceber.pas' ,
  CadTituloReceberDetalhe in 'CadTituloReceberDetalhe.pas' ,
  CadAcertoEstoqueProduto in 'CadAcertoEstoqueProduto.pas' ,
  CadAcertoEstoqueProdutoDetalhe in 'CadAcertoEstoqueProdutoDetalhe.pas' ,
  InscE32 in 'InscE32.pas',
  FilRelInventarioEstoqueProdutos in 'FilRelInventarioEstoqueProdutos.pas' ,
  RelInventarioEstoqueProduto in 'RelInventarioEstoqueProduto.pas' ,
  FilRelMovimentacaoProduto in 'FilRelMovimentacaoProduto.pas' ,
  RelMovimentacaoProduto in 'RelMovimentacaoProduto.pas' ,
  FilRelFluxoCaixa in 'FilRelFluxoCaixa.pas' ,
  RelFluxoCaixa in 'RelFluxoCaixa.pas' ,
  RelTituloReceber in 'RelTituloReceber.pas' ,
  RelTituloPagar in 'RelTituloPagar.pas' ,
  CadBoletoBancario in 'CadBoletoBancario.pas' ,
  CadBoletoBancarioDetalhe in 'CadBoletoBancarioDetalhe.pas' ,
  CadPedidoProdutoDetalhe in 'CadPedidoProdutoDetalhe.pas' ,
  CadPedidoProduto in 'CadPedidoProduto.pas' ,
  CadCompraProdutoDetalhe in 'CadCompraProdutoDetalhe.pas' ,
  CadCompraProduto in 'CadCompraProduto.pas' ,
  CadRamoAtividade in 'CadRamoAtividade.pas' ,
  CadRamoAtividadeDetalhe in 'CadRamoAtividadeDetalhe.pas' ,
  CadFormaPagamentoCaixa in 'CadFormaPagamentoCaixa.pas' ,
  CadFormaPagamentoCaixaDetalhe in 'CadFormaPagamentoCaixaDetalhe.pas' ,
  CadTerminal in 'CadTerminal.pas' ,
  CadTerminalDetalhe in 'CadTerminalDetalhe.pas' ,
  ConfereCaixa in 'ConfereCaixa.pas',
  ConsultaPadrao in 'ConsultaPadrao.pas' ,
  ImpPadrao in 'ImpPadrao.pas' ,
  ConsultaTransacaoParcela in 'ConsultaTransacaoParcela.pas' ,
  ConsultaTransacao in 'ConsultaTransacao.pas' ,
  ConsultaTransacaoItem in 'ConsultaTransacaoItem.pas' ,
  CadCheque in 'CadCheque.pas' ,
  CadChequeDetalhe in 'CadChequeDetalhe.pas' ,
  RelProduto in 'RelProduto.pas' ,
  CadNotaFiscalDetalhe in 'CadNotaFiscalDetalhe.pas' ,
  CadNotaFiscal in 'CadNotaFiscal.pas' ,
  CadVenda in 'CadVenda.pas' ,
  CadVendaDetalhe in 'CadVendaDetalhe.pas' ,
  FilCadNotaFiscal in 'FilCadNotaFiscal.pas' ,
  FilCadVenda in 'FilCadVenda.pas' ,
  FilReltipovenda in 'FilReltipovenda.pas' ,
  RelTipovenda in 'RelTipovenda.pas' ,
  FilRelExtratoComissao in 'FilRelExtratoComissao.pas' ,
  CadClienteHistorico in 'CadClienteHistorico.pas' ,
  CadFabricante in 'CadFabricante.pas' ,
  CadFabricanteDetalhe in 'CadFabricanteDetalhe.pas' ,
  CadProdutoHistorico in 'CadProdutoHistorico.pas' ,
  CadFornecedorHistorico in 'CadFornecedorHistorico.pas' ,
  CadFabricanteHistorico in 'CadFabricanteHistorico.pas' ,
  RelVenda in 'RelVenda.pas' ,
  CadGrupoContaFinanceira in 'CadGrupoContaFinanceira.pas' ,
  CadGrupoContaFinanceiraDetalhe in 'CadGrupoContaFinanceiraDetalhe.pas' ,
  CadContaFinanceira in 'CadContaFinanceira.pas' ,
  CadContaFinanceiraDetalhe in 'CadContaFinanceiraDetalhe.pas' ,
  MovimentacaoFinanceira in 'MovimentacaoFinanceira.pas' ,
  CadMovimentacaoFinanceiraDetalhe in 'CadMovimentacaoFinanceiraDetalhe.pas' ,
  RelExtrato in 'RelExtrato.pas' ,
  FilRelDre in 'FilRelDre.pas' ,
  RelDre in 'RelDre.pas' ,
  FilRelResumoReceitaDespesa in 'FilRelResumoReceitaDespesa.pas' ,
  RelResumoReceitaDespesa in 'RelResumoReceitaDespesa.pas' ,
  CadPedido in 'CadPedido.pas' ,
  CadPedidoDetalhe in 'CadPedidoDetalhe.pas' ,
  RelPedido in 'RelPedido.pas' ,
  FilRelResumoMovimento in 'FilRelResumoMovimento.pas' ,
  RelResumoMovimento in 'RelResumoMovimento.pas' ,
  FilRelCustoApuradoCaixa in 'FilRelCustoApuradoCaixa.pas' ,
  RelCustoApuradoCaixa in 'RelCustoApuradoCaixa.pas' ,
  CadKitProduto in 'CadKitProduto.pas' ,
  CadKitProdutoDetalhe in 'CadKitProdutoDetalhe.pas' ,
  ResultadoOs in 'ResultadoOs.pas' ,
  ConsultaCaixaOs in 'ConsultaCaixaOs.pas' ,
  FilrelDescricao in 'FilrelDescricao.pas' ,
  RelResultado in 'RelResultado.pas' ,
  RelResultadoOs in 'RelResultadoOs.pas' ,
  RelTituloReceber2 in 'RelTituloReceber2.pas' ,
  RelDescricao in 'RelDescricao.pas' ,
  RelExtratoComissao in 'RelExtratoComissao.pas' ,
  CadServico in 'CadServico.pas' ,
  CadServicoDetalhe in 'CadServicoDetalhe.pas' ,
  RelPedidoCompra in 'RelPedidoCompra.pas' ,
  RelVendaServico in 'RelVendaServico.pas' ,
  Cadveiculo in 'Cadveiculo.pas' ,
  CadVeiculoDetalhe in 'CadVeiculoDetalhe.pas' ,
  uAguarde in 'uAguarde.pas' ; {$R *.res} var
  Hwnd: Thandle;
begin
  Hwnd := FindWindow ('TfrmMenu', 'frmMenu');
  if Hwnd = 0 then
  begin
    Application.Initialize;
    Application.Title := 'SysErp';
    Application.CreateForm(TdmAdo, dmAdo);
    Application.CreateForm(TfrmMenu, frmMenu);
    Application.Run;
  end
  else
  begin
    MessageDlg ('Já existe uma instância deste programa aberta, verifique por favor!!',mtinformation,[mbok], 0);
    SetForegroundWindow (Hwnd);
  end;
end.  
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

28/03/2010

Olá amigo,
  Faça um exemplo, somente com dois forms, e me mande para poder analisar, os fontes desta forma não adiantam pois esta igual ao meu.

Um abraço

Wesley Y
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Então mano
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Olha só, eu fiz outro exemplo com dois forms, funcionou, te mandei o meu código pra vc ver se tem algo errado, porque não funciona...     agradecido   Irenildo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

28/03/2010

Olá amigo, infelizmente não consegui notar nada de diferente ou errado no seu código. Recomendo :

  1 - Remover todos estes forms da tua aplicação, e ir adicionando um por um, e testando, pode ser algum form que esta dando erro.
  2 - Me mande seus fontes caso consiga, para testar e analisar.

Um abraço

Wesley Y
GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

28/03/2010

Ei mano,   Fiz assim, funcionou, o que vc acha?     {$R *.res}
var
Instancia: THandle;
begin
Instancia:= CreateMutex(nil, false, 'SysErp');
if WaitForSingleObject(Instancia, 0) = wait_Timeout then
begin
Application.MessageBox('Atenção... O programa já está aberto!!!','Atenção',MB_ICONINFORMATION);
Exit;
end;
    Application.Initialize;
    Application.Title := 'SysErp';
    Application.CreateForm(TdmAdo, dmAdo);
    Application.CreateForm(TfrmMenu, frmMenu);
    Application.Run;
end.     aguardo valeu
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

28/03/2010

Olá amigo, não esta errado não, pelo contrário está certinho.

Estamos fechando o chamado.

Um abraço

Wesley Y
GOSTEI 0
POSTAR