Um jeito diferente de ao invés de abrir janelas modais(SDI) ou multiplos documentos(MDI) é abrir usando tabs, método conhecido como TDI. A Interface TDI geralmente é usada de dois modos: (1) com varias tabs, similar ao Google Chrome ou Firefox onde cada tab representa uma janela diferente e independente e o TDINotebook já vem pronto para usar de modo, para quem estava acostumado com a interface MDI talvez este método seja o mais aproximado ou (2) manter uma unica tab com a “orelhinha” invisivel e fazer forms serem embutidos dentro delas e então com as “orelhinhas” invisiveis podemos trocar de tab onde cada uma delas (ou apenas uma) terá seu próprio form.
O vídeo abaixo mostra o que é uma interface TDI e como instalar o componente TDINotebook:
Repare que o aplicativo esta sempre se aproveitando da janela principal ao inves de criar uma nova janela sobre esta.
Você pode usar método similar a opção #2 através da criação de um form dentro de um panel ou PageControl, mas se o fizer deverá lembrar-se também de destruí-lo manualmente e é aí que o TDINotebook ajuda, pois ao fechar uma tab o que estiver dentro dela(um form) será destruido também. Também haverá menos código quando precisar retornar a uma janela anterior.
Inclusive os aplicativos mobile usam este conceito de tabs, mas nenhum aplicativo se parece com o Google Chrome ou Firefox porque apenas uma única tab fica visivel e a mesma é chaveada entre os forms, mostrando apenas um form por vez.
Se você gostou dessa abordagem então instale este componente.
Maiores informações em:
TTDINotebook – Lazarus wiki (freepascal.org)
Escrevi uma demo onde você poderá ver na prática a simplicidade de criar programas dessa forma:
https://github.com/gladiston/lazdemos_gsl
Basicamente, você inclui o componente TDINotebook na sua janela principal e para o aplicativo não ter a cara de navegador Gooogle Chrome ou Firefox, você inclui essas linhas no OnCreate do seu form principal:
// Um TDINotebook não funciona sem um MainMenu para associar.
// Isso é estranho, mas tenho que aceitar. A instrução abaixo
// é inóqua, você tem de fazer a associação abaixo em tempo
// de design
TDINoteBook1.MainMenu:=MainMenu1;
// TDINoteook cobrirá a área inteira, remova os comentários para
// deixar sua aplicação não ter a cara de navegador de google chrome
// caso contrário, ao deixá-las ficará pratico, mas com cara de google chrome
TDINoteBook1.Align:=alClient;
// Se as suas janelas tiver um botão de fechar ou sair então é bom
// esconder o botão de fechar "X" na tab com tbNone, caso contrário
// use tbMenu ou tbButtom para representar uma opção ed fechamento
//TDINoteBook1.CloseTabButtom:=tbButtom; // tbNone, tbMenu, tbButtom
// nboHidePageListPopup: Não tem popup para mostrar as tabs(paginas)
//TDINoteBook1.Options:=TDINoteBook1.Options+[nboHidePageListPopup];
// nboShowAddTabButton: Não mostra opção para adicionar nova tab
//TDINoteBook1.Options:=TDINoteBook1.Options+[n
boShowAddTabButton];
// nboShowCloseButtons: Botões de fechar não serão exibidos
//TDINoteBook1.Options:=TDINoteBook1.Options+[nboShowCloseButtons];
// Mostra ou não as orelhinha nas tabs
TDINoteBook1.ShowTabs:=false;
// Como se trata de um aplicativo comercial e não um navegador então
// é melhor esconder outros botões
TDINoteBook1.TDIActions.CloseAllTabs.Visible:=false;
TDINoteBook1.TDIActions.CloseTab.Visible:=false;
TDINoteBook1.TDIActions.NextTab.Visible:=false;
TDINoteBook1.TDIActions.PreviousTab.Visible:=false;
TDINoteBook1.TDIActions.TabsMenu.Visible:=false;
procedure TForm1.actClientesExecute(Sender: TObject);
var
i:Integer;
begin
i:=TDINoteBook1.FindFormInPages(fmClientes);
if i<0 then
fmClientes:=TfmClientes.Create(Self);
TDINoteBook1.ShowFormInPage(fmClientes, i);
O codigo acima é para ser didático, você pode acrescentar muito mais.
Ainda ficou com duvida? Assista ao vídeo de como criar uma aplicação TDI, ao estilo “mãos na massa”:
Claro que usar o componente TDINotebook pode facilitar a criação de uma aplicação TDI, porém não é o único meio de fazê-lo, podemos criar uma aplicação TDI usando o componente TPageControl. Como? Veja o vídeo a seguir onde demonstro como fazê-lo: