Ir para conteúdo
Fórum Script Brasil
  • 0

Evitar Abrir Duas Janelas Iguais


Kindelis

Pergunta

é o seguinte eu tenho um programa onde tem a janela principal do tipo MDIMain e formularios secundarios do tipo MDIChild ai para abrir os outros formulários eu utilizo o seguinte codigo

Application.CreateForm(Tform, form);

login.Show;

só que se eu já estiver com um form aberto e mandar abrir o mesmo de novo ele abre e acaba ficando duas janelas iguais abertas, eu queria evitar isto eu queria que quando a janela já estivesse aberta não pudesse abri-lá novamente.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

tem varias formas, se o form estiver no mesmo exe então

voce pode fazer referencia ao form exemplo

if not nomedoform.showing then

ou seja, se não estiver sendo mostrado então...

outra forma, é utilizando FindWindow, seria tipo assim,

if (findwindow('tnomedoform', nil) <= 0) then

ou seja, se for maior do que 0 ele achou a janela, sendo

menor ou igual a zero não achou ai ele faz o codigo

resumindo

você usa forms auto criáveis

sendo um form chamado Teste, a classe dele seria TTeste

então você chamaria assim

if (Teste = nil) then application.createform(tteste, teste);

teste.show;

agora se quiser impedir que ele seja aberto 2x

if (Teste = nil) then application.createform(tteste, teste);

if (not Teste.showing) then

teste.show;

entendeu mais ou menos auhahua

maior bagunça escrevi

abraço ai

Link para o comentário
Compartilhar em outros sites

  • 0

então Churc eu tentei usar as suas alternativas mais eu abro ele não deixa abrir outro mesmo, mais depois que eu fecho o formulario ele não deixa abrir mais, na verdade eu tenho um form MDIMain e vários MDIChild então eu queria que enquanto o formulario estiver em exibição ele não possa ser aberto novamente entendeu, já a sua solução não permite que eu o execute mais de uma vez mesmo ..

Link para o comentário
Compartilhar em outros sites

  • 0

Depois que o form é destruído a variável não é automaticamente igualada a nil, então a solução é a seguinte ->

Passe o ponteiro como parametro no método create do form ->

Type PForm = ^TForm;
TForm2 = Class(TForm)
.
.
.
Public
{Public declarations}
_inst : PForm;
constructor Create(AOwner : TComponent; inst : pointer);
.
.
.
implementation

constructor TForm2.Create(AOwner : TComponent; inst : pointer);
begin
  inherited Create(AOwner);
  _inst:=inst;
  show;
end;
Bom aí no form deve ter algum botão para fechar ele, então onde for pra fechar você coloca assim ->
hide;
_inst^:=nil;
free;
se for no botão fechar do form você coloca ->
procedure TForm2.FormClose(sender : tobject; var action : TCloseAction);
begin
  Action:=canone;
  hide;
  _inst^:=nil;
  free;
end;
aí quando você for chamar o form do programa principal você coloca ->
if (Form2 = nil) then Form2:=TForm2.Create(Application, @Form2);

Link para o comentário
Compartilhar em outros sites

  • 0

vlw todo mundo aí que me ajudou, finalmente consegui soluciona o problema de uma forma até mesmo "boba" eu só adicionei no onclose do form a linha "form:=nil" que a dica do churc funcionou perfeitamente, valeu todo mundo se dispois a me ajuda agora fica aí a dica pra quem precisar disso , quando for chamar o form coloca esses codigos no local de onde você está chamando o form:

if (Teste = nil) then application.createform(tteste, teste);

if (not Teste.showing) then

teste.show;

e no onClose do forme "Teste" você adiciona a linha "Teste:=nil" que funciona belezinha.

Link para o comentário
Compartilhar em outros sites

  • 0

Que idiota que eu sou, na verdade oque você fez foi amesma coisa que eu postei aqui, só que no meu caso a variavel Form2 não estava declarada na mesma unit que o tipo TForm2, estava declarada na unit principal, por isso eu tive que fazer essa volta toda de passar o ponteiro como parametro. E no seu caso eu não lembrei que você estava fazendo da maneira normal. :ph34r:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...