Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

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)?

  • Fundadores
Postado

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.

Postado

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.

  • Fundadores
Postado

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.

Postado

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?

  • Fundadores
Postado

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.

  • 4 meses depois ...
Postado (editado)

Boa tarde.

Sou iniciante e venho agradecer ao criador do componente TDI, estudei o demo e adicionei aos testes.

Foi de grande ajuda.

Obs.: meus brinquedos: lázarus, firebird, postgresql e openSUSE. :-D

Editado por Jeison dos Santos Reis
  • Curtir 1
  • 1 ano depois...
Postado

Boa tarde , existe algum forma de eu conseguir dar um  " Form2.Free;  Form2 := nil;  " controlando ele ao clicar num Botao do proprio FORM2 . ou tentar fazer um controle em algum Evento pra eu identificar que o Form2 foi fechado e eu matar ele da memoria ?

 

Desde ja agradeço .

 

Adilson Pazzini

  • Fundadores
Postado
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.

Postado

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

  • Fundadores
Postado

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.

  • 1 ano depois...
Postado

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

 

AGGILLE-LOGO-500x180_fw.jpg.07c79ceacf0537ee105c0bbf0139435f.jpg

Aggille Sistemas de Gestão
Leandro do Couto
(51) 99105.1600
Novo Hamburgo / RS
[email protected]
www.aggille.com.br

  • Fundadores
Postado

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.

  • Este tópico foi criado há 2269 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.