Olá amigos delphianos! Como tem andado os estudos? Bom, nesse artigo irei abordar o uso de frame em aplicações MDI, e para começar, veremos um pouco sobre esta tecnologia.
Sobre MDI
MDI - Multiple Document Interface: Sobre este conceito, podemos ressaltar
que:
- Existe uma janela MDI Mãe (propriedade FormStyle = fsMDIForm), que é a
janela principal do projeto, a qual armazenará dentro de si as outras
janelas do projeto (janelas filhas).
- Uma janela MDIForm (mãe) deve ter apenas menu, barra de ferramentas
e barra de status, alinhadas nas bordas da janela.
- Ela deve obrigatoriamente possuir um menu.
- A área interna do Form (Cliente) , é destinada as janelas
filhas (propriedade FormStyle = fsMDIChild), que serão exibidas dentro
da janela mãe.
- Em um projeto MDI, podem existir N janelas filhas, que
serão exibidas dentro da janela mãe.
- As janelas filhas, devem ser criadas no momento que serão exibidas, e liberadas
da memória ao serem fechadas.
- Podem existir também janelas normais, porém o sua exibição
deve ser feita com o ShowModal.
Como já aprendemos um pouco sobre o conceito MDI, vamos
para a prática.
Criando uma aplicação exemplo
Crie uma pasta onde vamos salvar os fontes desse exemplo e crie uma nova aplicação
win32 no Delphi, pelo menu File, New, Application.
Defina o nome do form que é criado junto com o projeto para FrmPrincipal,
e salve-o com o nome de UfrmPrincipal. Salve o projeto como prjMDI.
Vamos alterar algumas propriedades do FrmPrincipal:
- FormStyle: fsMDIForm:
- Position: poDesktopCenter.
Ainda no form Principal, adicione um componente MainMenu1 para criamos o
menu do projeto. Coloque sua propriedade name como mmMdi e faça o menu como abaixo:
| Arquivo |
Cadastro |
Sistema |
| Sair |
Listagem |
Sobre |
| |
Novo Registro |
|
Agora vamos criar a nossa tela de cadastro de Cliente. Para isso, crie um
frame no menu File, New, Frame.
Logo depois da seção Public, declare
a seguinte variável:
var
FrmCliente: TFrame; // Declarar o frame como da classe TFrame.
Lembrando que a nossa tela de cadastro será criada no frame, que por
sua vez será criada em um form temporário. Não vamos
criar um form para cada frame de cadastro.
Altere o nome do frame para frmCliente e coloque alguns componentes para simular
uma tela de cadastro.
Obs: Não iremos ligar nada a banco de dados. Essa tela serve
somente como
ilustração para o exemplo.
Vamos declarar uma variável e uma função no form Principal.Para
isso, logo
após a declaração do form, coloque:
var
FrmPrincipal: TFrmPrincipal;
Janela: TForm; //Código Adicionado
Função na seção Public
function FormTemp(nome: string; parent: TForm; altura, altMin, altMax,
largura, largMin, largMax: Integer): TForm;
Para criar o seu corpo, pressione ctrl + shift + c
function TFrmPrincipal.FormTemp(nome: string; parent: TForm; altura,
altMin, altMax, largura, largMin, largMax: Integer): TForm;
var
FORM : TForm;
begin
FORM := TForm.Create(nil);
FORM.Height := altura;
FORM.Width := largura;
FORM.Constraints.MinHeight := altMin;
FORM.Constraints.MaxHeight := altMax;
FORM.Constraints.MinWidth := largMin;
FORM.Constraints.MaxWidth := largMax;
FORM.Caption := nome;
FORM.FormStyle := fsMDIChild;
FORM.AutoSize := False;
FORM.Show;
Result := FORM;
end;
Criando o form Temporário e o frame dentro dele
No menu Cadastro, escolha a opção novo e realize a chamada para
a função:
Janela := FormTemp('Cadastro de Clientes',FrmPrincipal,261,0,0,483,0,483);
// A variável declarada acima do tipo TForm recebe o retorno da nossa função
FrmCliente := TFrmCliente.Create(Janela); //o Frame é criado como filho de Janela
FrmCliente.Parent := Janela;
FrmCliente.Show; //da um show no form
Se testarmos nossa aplicação, veremos que já esta funcionando
corretamente. Não vou explicar passo a função, pois a
mesma já está bem auto explicativa.
Para fecharmos o nosso form e o liberarmos da memória, adicione um
Botão
ao Frame FrmCliente e coloque o seguinte código:
procedure TFrmCliente.BtnFecharClick(Sender: TObject);
var
Temp: TForm;
begin
{-> Armazena TForm criado dinâmicamente }
{-> Libera Tela (TFrame) }
{-> Libera Form armazenado. }
Temp := TForm(FrmCliente.Parent);
FrmCliente.Free;
Temp.Free;
end;
Conclusão
Nesse exemplo falamos um pouco sobre aplicações MDI, como trabalhar
com Frame e como criar um form dinamicamente.
Bom amigos, por essa semana e só! Estarei dando continuidade aos meus
artigos sempre falando sobre novas tecnologias, mas com artigos
simples e de fácil entendimento, voltado para usuários iniciantes.
Espero que todos tenham gostado
e ate a próxima.
Obs.: Estou esperando dicas para os próximos artigos! Sua participação
é muito importante.
Sérgio de C. Guedes
Contato: sergio_rj45@yahoo.com.br
www.sistemasmais.net
|