Ir para conteúdo
  • Cadastre-se

dev botao

MDI no Lazarus


Ver Solução Respondido por adilsonpazzini,
  • Este tópico foi criado há 2037 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde,

Estou tentando trabalhar com MDI no Lazarus, mas pelo que pesquisei ele não dá suporte a isso, em minhas pesquisas vi um componente que aparentemente simulava janelas MDI que é o MultiDoc, quando instalo esse componente não acusa erro nenhum, mas quando eu coloco ele no formulário aparece a mensagem "Access Violation".

 

Alguém sabe como posso utilizar MDI no Lazarus? Ou como eu Uso esse componente (MultiDoc)?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Como autor do TDI, fico contente pela indicação... :)

Hoje em dia interfaces TDI são mais amigáveis aos usuários do que a MDI

Mas se você realmente quer um MDI, tenho notado nos commits da Rx da CCR, que eles estão implementando um componente para MDI

  • Curtir 4
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Apenas para deixar o tópico atualizado... Essa é a Página do TDI, na Wiki do Lazarus

http://wiki.freepascal.org/TTDINotebook

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Agora tenho um dúvida sobre o TDI

 

Eu uso o comando

TdiPrincipal.CreateFormInNewPage(TfrmNovaCon, 3);

 

Para criar um novo form dentro do meu form pai, mas como eu faria para, caso ele já tivesse sido criado, abrir a tela que ele está (sem criar um novo form)?

 

eu vi o código de exemplo do TDI e ele está assim (para o Form 2 que não cria um novo formulário e fica em foco):

procedure TfMainForm.miForm2Click(Sender : TObject) ;
begin
  if not Assigned( Form2 ) then
    Form2 := TForm2.Create(Self);
  TDINoteBook1.ShowFormInPage( Form2, 4 );
end;      

 

Como eu faria esse "Assigned" no formulário ficar como true?

Acho que me expressei mal

 

Eu adaptei aquele trecho de código ao meu, mas eu não entendi pq ele funciona (tinha tentado fazer de outro jeito e dava erro). Gostaria de saber como funciona essa propriedade assigned.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você precisa usar o   TDINoteBook.ShowFormInPage( ) e passar um TForm, já instanciado a ele...

Como você cria os seus formulários, hoje em dia ? poderia dar um exemplo do

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Eu estava criando com aquele comando que descrevi

TdiPrincipal.CreateFormInNewPage(TfrmNovaCon, 3);

 

mas no código de exemplo (só para ver se eu entendi):

  if not Assigned( Form2 ) then
    Form2 := TForm2.Create(Self);  <----- Aqui você estância a classe e o Assigned se torna true, além de criar o formulário filho;
  TDINoteBook1.ShowFormInPage( Form2, 4 ); <------------ o Comando showforminpage é executado quando a condição não é verdadeira, voltando o foco para o formulário.
end;      

 

É isso?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Me referia a como você cria um Formulário, usando o MDI ou Show, ShowModal

o Assigned() verifica se o Objeto aponto para uma área de memória não nula (O Objeto existe ?)

O If verifica se o Form já foi o não instanciado.. para não criar um novo Formulário a cada interação...

O ShowFormInPage, procura em sua lista de abas, se aquele formulário já existe... e se existir, ele apenas "sobe" a aba, ao invés de criar uma nova aba

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...
  • 1 ano depois...
  • Fundadores
1 hora atrás, xyberx disse:

 E ao criador da criança :-P

Obrigado... ;)

 

23 horas atrás, adilsonpazzini disse:

existe algum forma de eu conseguir dar um  " Form2.Free;  Form2 := nil; 

é da mesma maneira de um Form tradicional... ou seja, vc pode usar o evento OnClose.. exemplo:

procedure TForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction := caFree;
end;

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Valeu Daniel .. putz desconhecia esse recurso no pascal .. mais valeu mesmo ...

 

Adilson Pazzini .

Daniel . to chamando assim :

       if not Assigned(veig04) then
         veig04 := Tveig04.Create(Self);
        TDINoteBook.ShowFormInPage( veig04, 4 );

 

e no on-close do veig04 .. inclui o codigo que vc postou

procedure TVEIG04.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
 CloseAction := caFree; //****esse comando deve ser feito no form que foi pro TDINotebook ou tem ser jogado no formmenu principal ... ai fiz no form que foi pro TDI . e deu o erro abaixo : na hora de chama-lo novamente ;
end;

 

 

Desde ja agradeço

 

Adilson PAZZINI

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O problema que você expõem, não está ligado diretamente ao TDI... mas sim a com o ObjectPascal interpreta o Assigned

O fato do objeto ser liberado (Free), não faz com que a variável que apontava para ele, seja Nula... Ou seja, o teste "Assigned( veig04 )" resulta em True, pois a variável tem a referencia para uma posição de memória... Mas como essa posição agora aponta para um Objeto que foi eliminado (pelo caFree do Form), então você receberá um A.V.

Tente o seguinte (P.O.G.)

procedure TVEIG04.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
 CloseAction := caFree;
  veig04 := nil;
end; 
  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Tem algum evento que ocorre logo apos excluir uma Aba ? tenho uma imagem de fundo no form principal, então, quando não tiver nenhuma aba no TDI, quero colocar ele como visible=false para que mostre a imagem de fundo...

coloquei um TImage na propriedade background.. porém quando removo todas as abas, a imagem some..

 

obrigao..

 

icone.png.a9a9834f5d376de0caa4952ae2bbf8ce.pngAggille Sistemas de Gestão

Leandro do Couto
(51) 99105.1600
Novo Hamburgo / RS
[email protected]
www.aggille.com.br

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O BackgroundImage é desenhado dentro de uma aba ativa... Ele é útil apenas, quando o Form da aba tem "MaxConstrains" definidas e não ocupará toda a tela..... conforme exemplo no Demo...

Acho que você pode manter uma imagem de fundo, no próprio Form... (mas um TImage diferente da que você atribuiu ao componente)

 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2037 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.