Você está na página 1de 13

Delphi 7 Aula 04 Bloco de Notas MDI

Prof. Gilbert Azevedo da Silva

I. Objetivos
Desenvolver uma aplicao MDI,
Utilizar mtodos para recortar, copiar e colar textos de/para a rea de transferncia,
Utilizar os componentes de dilogo: OpenDialog, SaveDialog e FontDialog,
Utilizar mtodos para criar e destruir formulrios em tempo de execuo.

II. Teoria

1. Variveis Estticas
As variveis utilizadas no desenvolvimento de aplicativos podem ser classificadas em variveis estticas e
dinmicas.
As variveis estticas, normalmente de tipos primitivos, como caracteres, inteiros e reais, so declarados
numa clusula Var. Tais variveis permanecem na memria do computador durante toda a execuo do
programa onde so declaradas. Ao executar um programa, o sistema operacional reserva endereos de
memria para suas variveis estticas, protegendo-as de forma que nenhum outro programa tenha acesso
a estas variveis. Ao fechar o aplicativo, os endereos de memria alocados so liberados para serem
utilizados por outros processos.
A declarao abaixo mostra a alocao de trs variveis estticas: A, B e X. Na memria, so reservados 8
bytes para as variveis A e B (do tipo double) e 4 bytes para a varivel X (do tipo integer). A quantidade de
bytes de memria alocados varia de acordo com o tipo da varivel, devido necessidade de maior ou
menor quantidade de bits para representar os valores que cada varivel pode assumir. Os nomes dados as
variveis, como A, B e X, neste exemplo, so identificadores dados aos endereos de memria alocados.
Seria extremamente inconveniente se referir aos valores armazenados na memria atravs de seus
endereos.
Memria
var A, B : double;
X : integer;
A

Voc pode aprender muito mais sobre os diversos tipos de variveis, a quantidade de memria reservada
para cada tipo e a forma como os valores das variveis so representados na memria, utilizando o help do
Delphi. Execute o comando Delphi Help, no menu Help do Delphi. Selecione o tpico Delphi Language e em
seguida o tpico Data types, variables and constants conforme mostrado a seguir. Este tpico apresentar
tudo sobre variveis, detalhadamente. As janelas a seguir mostram como chegar, por exemplo, ao help para
variveis inteiras.
2. Variveis Dinmicas
As variveis so dinmicas quando controlamos a sua existncia na memria, ou seja, quando utilizamos
comandos para coloc-las e remov-las da memria em qualquer instante durante a execuo de um
programa.
O termo criar uma varivel refere-se operao de colocar uma varivel dinmica na memria, isto , de
alocar endereos na memria para a varivel. De forma anloga, o termo destruir uma varivel est
relacionado operao de remover a varivel dinmica da memria. Podemos afirmar que as variveis
estticas so criadas no incio da execuo de um programa e destrudas no seu fechamento, enquanto que
as variveis dinmicas so criadas e destrudas a qualquer momento durante a execuo.
As variveis dinmicas so utilizadas para o gerenciamento da memria do computador, pois permitem ao
programador racionalizar o uso da memria, alocando e liberando endereos quando necessrio. So
tambm utilizadas para a criao de estruturas de dados como pilhas e listas.
No Delphi, os formulrios utilizados para o desenvolvi mento de aplicativos so variveis dinmicas. Isto
significa que as janelas dos programas somente existem na memria, e conseqentemente na tela, aps
serem criadas. Na verdade, todos os objetos do Delphi, a includos os Forms, so variveis dinamicamente
alocadas.
As janelas dos aplicativos so construdas no projeto, programa principal de cada aplicao. O comando
Application.CreateForm, mostrado abaixo, o responsvel pela criao da janela Form1 dos aplicativos
desenvolvidos em Delphi.

A varivel Form1, declarada na Unit1, mostrada a seguir, um tipo especial de varivel (esttica) que tem a
potencialidade de referenciar um objeto (dinmico), quando este objeto criado. As referncias de objetos
so tipos especiais de ponteiros, pois, apontam para endereos de memria onde esto alocados objetos.
Esta operao ilustrada abaixo.

Memria (Incio do Programa) Memria (Aps o comando CreateForm)

Form1 Form1
Janela
A figura abaixo mostra o projeto de um aplicativo em Delphi com 5 formulrios. Voc pode perceber que
todas as janelas, por default, so criadas no projeto. A primeira janela na lista, o Form1, torna-se a janela
principal do programa. Se esta janela for fechada, o aplicativo encerrado.

3. Aplicaes SDI e MDI


Em todos os exemplos vistos at o momento, os formulrios das aplicaes so do tipo fsNormal.
Aplicaes que utilizam este tipo de formulrio so conhecidas por aplicaes SDI (Simple Document
Interface). A janela principal destas aplicaes apresenta uma nica interface de interao com o usurio.
Um outro tipo de aplicao Windows, conhecido por MDI (Multiple Document Interface), utiliza janelas do
tipo fsMDIForm e fsMDIChild. Nestas aplicaes, a janela principal do aplicativo (do tipo fsMDIForm) permite
que outras janelas (do tipo fsMDIChild) sejam inseridas em seu interior. O Microsoft Excel, visto abaixo,
um exemplo de aplicao MDI. A janela principal do Excel que apresenta o menu e a barra de ferramentas
permite que vrias janelas de planilhas sejam abertas em seu interior. A janela principal do tipo
fsMDIForm e cada uma das planilhas abertas do tipo fsMDIChild. As aplicaes MDI apresentam portanto
vrias interfaces de interao com o usurio.
O tipo de uma janela pode ser alterado atravs da propriedade FormStyle do Formulrio.

4. Visibilidade dos Formulrios


Os formulrios comuns (fsNormal) tornam-se visveis quando o mtodo Show chamado. Ao executar o
Show, a propriedade Visible do Form, que por padro inicia com o valor False, recebe o valor True e a
janela torna-se visvel. Por outro lado, o mtodo Hide pode ser usado para esconder uma janela fsNormal,
tornado a propriedade Visible igual a False. Veja abaixo:
Este dois comandos so equivalentes: mostram a janela Form2
Form2.Show;
Form2.Visible := True;
Este dois comandos so equivalentes: escondem a janela Form2
Form2.Hide;
Form2.Visible := False;

Em aplicaes MDI, a janela principal do aplicativo, normalmente chamada de janela me, deve ser do tipo
fsMDIForm e as janelas apresentadas em seu interior, chamadas de janelas filhas, devem ser do tipo
fsMDIChild.
Quando o tipo de uma janela alterado para fsMDIChild, sua propriedade Visible automaticamente
alterada para o valor True. Isto significa dizer que as janelas filhas de uma aplicao MDI so sempre
visveis, ou seja, as janelas filhas no podem ser escondidas atravs do mtodo Hide ou da atribuio do
valor False propriedade Visible.
importante tambm no confundir a visibilidade de uma janela com sua existncia. Criar uma janela
(atravs do comando CreateForm) colocar toda informao a seu respeito na memria do computador:
posio, cor, ttulo, etc. Mostrar uma janela simplesmente fazer com que a janela existente na memria
torne-se visvel na tela, ou seja, fazer a propriedade Visible verdadeira.
Muitas vezes, porm, necessrio controlar o momento de criao das janelas em um aplicativo. Quando a
quantidade de janelas em um programa comea a aumentar, se faz necessrio controlar o momento em que
as janelas vo para a memria. Se voc criar todas as janelas no projeto da aplicao, ou seja, no incio do
programa, voc estar alocando uma quantidade de memria considervel do computador. Esta atitude
possivelmente diminuir a performance do computador devido a grande quantidade de memria requerida
pela aplicao.
O dilogo de Opes de Projeto (Menu Project | Options) permite ao programador selecionar quais janelas
sero criadas no incio do programa no projeto (Auto-Create Forms) e quais sero criadas durante a
execuo do programa (Available Forms). Neste dilogo, possvel tambm definir qual a janela principal
da aplicao (Main Form), necessariamente uma janela da lista Auto-Create.

5. Criao e Destruio de Formulrios em Tempo de Execuo

Os dois comandos abaixo podem ser utilizados para criar uma janela:

Application.CreateForm(TForm1, Form1);
Form1 := TForm1.Create(Application);

O primeiro comando um mtodo do objeto Application. Este objeto representa o seu aplicativo e realiza
todas as tarefas necessrias de conversao entre o seu programa e o Windows.
O segundo comando a forma comumente utilizada para a criao de qualquer objeto no Delphi, possuindo
a seguinte sintaxe:

Referncia_de_Objeto := Classe_do_Objeto.Create(Proprietrio_do_Objeto);
A referncia do objeto a varivel esttica que controlar todo o seu funcionamento. Se um objeto for
criado sem referncia, teremos na memria uma varivel dinmica inacessvel, ou seja, sem nenhuma
funcionalidade prtica. A classe do objeto indica qual o seu tipo, por exemplo, janela, boto, caixa de texto,
etc. O proprietrio de um objeto o indivduo responsvel pela sua destruio. Muitas vezes, tomamos o
objeto Application como proprietrio dos demais objetos, isto significa que os objetos criados sero
destrudos quando o objeto Application for destrudo, ou seja, quando o programa for encerrado.
Se voc precisa controlar tanto a criao quanto a destruio de um objeto, ter de usar comandos
semelhantes aos mostrados abaixo:

Form1 := TForm1.Create(nil);
Form1.Free;

O primeiro comando cria a janela Form1, indicando que ningum (nil) seu proprietrio. Quando esta janela
no mais for necessria, o mtodo Free pode ser chamado, removendo-a da memria. Desta forma, os
momentos de criao e destruio do objeto so controlados. O comando Create um mtodo de classe.
Todas as classes no Delphi possuem este mtodo que o responsvel por colocar os objetos desta classe
(ou deste tipo) na memria.
tambm importante zerar a referncia (ou ponteiro) de um objeto, aps a sua destruio. Isto impedir a
ocorrncia de um erro bastante comum: Access Violation (violao de acesso), o qual ocorre quando se
utiliza uma referncia que aponta para um endereo de memria no mais reservado. Para zerar um
ponteiro basta atribuir nil a ele. O comando FreeAndNil, includo a partir do Delphi 5, pode ser utilizado para
destruir um objeto e zerar a sua referncia, simultaneamente. Veja abaixo:

Form1 := nil; // Zera a referncia Form1.


FreeAndNil(Form1); // Destri o objeto apontado por Form1, zerando a referncia.

Apreenda muito mais sobre classes e objetos no help do Delphi. O tpico Classes and objects do Delphi
Language Guide apresenta tudo a respeito de classes e objetos da linguagem Delphi.
III. Exemplo

1. Objetivo
O exemplo desta aula mostra como criar uma aplicao MDI e como utilizar alguns componentes da paleta
Dialogs: OpenDialog, SaveDialog e FontDialog.
O objetivo desenvolver uma aplicao semelhante ao bloco de notas do Windows, onde seja possvel
editar de vrios textos simultaneamente. Cada texto deve ser apresentado em uma janela filha de uma
aplicao MDI.

2. Configurando o Formulrio Form1


2.1. Inserindo Objetos no Formulrio Form1
Insira no formulrio um objeto MainMenu da paleta Standard, um OpenDialog, um SaveDialog e um
FontDialog, todos da paleta Dialogs.
Configure o MainMenu de acordo com a tabela abaixo. O Form1 deve ficar conforme visto na figura.

Menu Arquivo Editar Janela Opes


Novo Recortar Lado a Lado Fonte
Abrir Arquivo... Copiar Em Cascata
Abrir Diretrio... Colar Minimizar Todas
Comandos
Salvar
Salvar Como...
-
Sair

2.2. Alterando Propriedades do Formulrio Form1


Altere as propriedades do Form1 de acordo com a tabela abaixo:

Objeto Propriedade Valor Comentrio


Form1 Caption Bloco de Notas MDI Ttulo da janela.
Form1 FormStyle fsMDIForm Define a janela como Janela-Me em uma aplicao MDI.
Form1 WindowState wsMaximized Define o estado da janela como maximizado.
3. Configurando o Formulrio Form2
3.1. Inserindo Objetos no Formulrio Form2
Selecione o comando File | New | Form para incluir um novo formulrio na aplicao. Insira no formulrio um
objeto Memo da paleta Standard.
3.2. Alterando Propriedades dos Objetos do Form2
Altere as propriedades dos objetos de acordo com a tabela abaixo:

Objeto Propriedade Valor Comentrio


Form2 FormStyle fsMDIChild Define a janela como Janela-Filha em uma aplicao MDI.
Memo1 Align AlClient Disposio do objeto na janela.
Memo1 Lines vazio Texto digitado no memorando.
Memo1 ScrollBars ssVertical Barra de rolagem vertical.

O formulrio deve ficar conforme mostrado na figura.

4. Definindo a Lista de Criao dos Formulrios


Selecione o comando Options no menu Project do Delphi. Remova o Form2 da lista Auto-Create Forms. As
janelas filhas sero criadas ao selecionar os comandos: Novo, Abrir Arquivo e Abrir Diretrio da aplicao.
5. Programando os Comandos do Menu Arquivo
O cdigo dos comandos: Novo, Abrir Arquivo e Abrir Diretrio mostrado abaixo.
O comando Novo (NovoClick) cria uma janela Form2, iniciando seu ttulo (propriedade Caption) com a string
Sem Nome:
O comando Abrir Arquivo (AbrirArquivoClick) executa o dilogo OpenDialog. Se a operao de abertura for
confirmada, uma janela Form2 criada de forma anloga ao comando anterior. O ttulo da janela recebe o
nome do arquivo selecionado no OpenDialog e o contedo do arquivo lido atravs do mtodo
LoadFromFile da propriedade Lines do Memo1.
O comando Abrir Diretrio (AbrirDiretorioClick) executa uma funo de seleo de diretrio
(SelectDirectory). Se a operao de seleo for confirmada, o aplicativo buscar todos os arquivos com
extenso txt no diretrio selecionado, criando uma janela para cada arquivo encontrado. Os procedimentos
e funes FindFirst, FindNext e FindClose so usados para verificar os arquivos existentes no diretrio
selecionado. Os dados de cada arquivo so recuperados em um registro do tipo TSearchRec. Consulte o
help do Delphi para maiores esclarecimentos a respeito destas informaes.

A figura a seguir mostra o cdigo dos comandos: Salvar, Salvar Como e Sair.
O comando Salvar (SalvarClick) verifica se existe alguma janela filha ativa. Se existir e a propriedade
Caption da janela for a string Sem Nome, o comando SalvarComoClick chamado. Isto acontece quando
um arquivo novo salvo pela primeira vez, sendo necessrio fornecer um nome ao arquivo. Neste caso, o
nome do arquivo fornecido no comando SalvarComo. Se a propriedade Caption for diferente de Sem
Nome, o arquivo salvo atravs do mtodo SaveToFile da propriedade Lines do Memo1. Neste caso, o
nome do arquivo dado pela propriedade Caption da janela.
O comando SalvarComo (SalvarComoClick) verifica tambm se alguma janela filha est ativa. Caso
afirmativo, o dilogo SaveDialog executado. Neste dilogo, um novo nome para o arquivo deve ser
informado. Se a operao de salvamento for confirmada, o contedo do Memo salvo para o arquivo
atravs do mtodo SaveToFile da propriedade Lines do Memo1. Em seguida, o nome do arquivo atribudo
propriedade Caption da janela.
O comando Sair (SairClick) executa o mtodo Close da janela Form1, fechando a janela principal da
aplicao e, conseqentemente, o programa.

6. Programando os Comandos do Menu Editar


A janela abaixo mostra os comandos do menu Editar. Aqui, os mtodos do Memo1: CutToClipboard,
CopyToClipboard e PasteFromClipboard so usados para recortar, copiar e colar o contedo do Memo
de/para a rea de transferncia.
7. Programando os Comandos do Menu Janela
A janela abaixo mostra os comandos do menu Janela. Aqui, os mtodos Tile e Cascade do Form1 so
usados para colocar as janelas filhas lado a lado e em cascata, respectivamente. Para minimizar todas as
janelas filhas, o comando MinimizarTodas alterar a propriedade WindowState de cada uma das janelas para
wsMinimized.

8. Programando o Comando do Menu Opes


A janela abaixo mostra o comando Fonte do menu Opes. Neste comando, o dialgo FontDialog
executado e abre uma janela de seleo de fontes de texto. A fonte selecionada no dilogo ento
atribuda fonte de cada janela filha.
9. Permitindo o Fechamento de uma Janela Filha.
Conforme citado anteriormente, as janelas filhas presentes na memria do computador so sempre visveis.
Deste modo, a nica forma de permitir o fechamento de uma janela filha forar sua destruio no
momento em que o usurio tentar fech-la. Voc pode programar esta funcionalidade no evento OnClose
do formulrio. A figura abaixo mostra o cdigo para este evento. O parmetro Action de OnClose pode
assumir 4 valores distintos indicando qual a operao realizada quando o usurio tentar fechar a janela:

Action := caNone; // No realiza nenhuma ao ao tentar fechar uma janela.


Action := caHide; // Torna a janela invisvel.
Action := caFree; // Destri a janela.
Action := caMinimize; // Minimiza a janela.

10. Executando e Salvando o Aplicativo.


Execute e salve o aplicativo.

Você também pode gostar