Sei sulla pagina 1di 48

ndice

1. O QUE DELPHI?.................................................................................................................................3
2. COMO FORMADO UMA APLICAO EM DELPHI..................................................................3
2.1 ARQUIVOS QUE COMPEM UM APLICAO..............................................................................................3
2.2 CDIGO FONTE DO ARQUIVO PROJECT(.DPR)..........................................................................................3
2.3 CDIGO FONTE DO ARQUIVO UNIT (.PAS)...............................................................................................3
3. JANELAS.................................................................................................................................................3
3.1 CODE EDITOR (EDITOR DE CDIGO)........................................................................................................3
3.2 FORM (FORMULRIO)...............................................................................................................................3
3.3 OBJECT INSPECTOR (INSPETOR DE OBJETOS)...........................................................................................3
3.4 COMPONENT PALETTE( PALHETA DE COMPONENTES).............................................................................3
3.5 ALIGNMENT PALETTE(PALHETA DE ALINHAMENTO)...............................................................................3
4. ORIENTAO A OBJETOS..................................................................................................................3
4.1 EVENTOS...................................................................................................................................................3
4.2 PROPRIEDADES.........................................................................................................................................3
4.3 MTODOS.................................................................................................................................................3
5. APPLICATION........................................................................................................................................3
5.1 MTODOS:................................................................................................................................................3
5.2 PROPRIEDADES:........................................................................................................................................3
6. MDI APPLICATION...............................................................................................................................3
6.1 USANDO O MODELO DE APLICAO MDI...............................................................................................3
6.2 EXEMPLO MDI.........................................................................................................................................3
7. TRABALHANDO COM BANCO DE DADOS....................................................................................3
7.1 BDE..........................................................................................................................................................3
7.2 ARQUITETURA DO BANCO DE DADOS DO DELPHI....................................................................................3
7.3 ARQUITETURA DOS COMPONENTES DE BANCO DE DADOS......................................................................3
7.4 PALETA DE COMPONENTES DA PGINA DE ACESSO DE DADOS...............................................................3
7.5 PALETA DE COMPONENTES DA PGINA DE CONTROLE DE DADOS..........................................................3
7.6 USANDO DATASETS..................................................................................................................................3
8. A LINGUAGEM SQL..............................................................................................................................3
8.1 COMANDOS DE MANIPULAO DE DADOS..............................................................................................3
8.2 OPERADORES............................................................................................................................................3
8.3 EXPRESSES.............................................................................................................................................3
8.4 FUNES...................................................................................................................................................3
8.5 EXEMPLOS................................................................................................................................................3
8.6 CONSTRUINDO UMA CONSULTA DINAMICAMENTE...................................................................................3
9. CONSTRUINDO RELATRIOS COM O QUICKREPORT............................................................3
9.1 QUICKREPORT BSICO..............................................................................................................................3
9.2 CRIANDO RELATRIOS.............................................................................................................................3
10. ARQUIVOS DE INICIALIZAO.....................................................................................................3
10.1 O OBJETO TINIFILE................................................................................................................................3
10.2 CRIANDO UM ARQUIVO DE CONFIGURAO..........................................................................................3
10.3 LENDO O ARQUIVO DE CONFIGURAO.................................................................................................3
10.4 MODIFICANDO UM ARQUIVO .INI..........................................................................................................3
10.5 OUTRAS OPERAES COM ARQUIVOS .INI............................................................................................3
10.6 MANIPULAO DE ARQUIVOS................................................................................................................3
11. CRIANDO HELP.................................................................................................................................3
11.1 VISO GERAL.........................................................................................................................................3
11.2 ESCRENDO OS TPICOS...........................................................................................................................3
11.3 INSERINDO NOTAS DE RODAP................................................................................................................3
11.4 ADICIONANDO UM HOTSPOT AO TPICO................................................................................................3
11.5 CRIANDO UM HOTSPOT PARA UMA JANELA POP-UP................................................................................3

11.6 SE FOR USAR UM TPICO DE OUTRO ARQUIVO DE HELP:........................................................................3


11.7 ESCREVENDO ARQUIVO DE PROJETO:.....................................................................................................3
11.8 COMPILANDO O ARQUIVO DE HELP:.......................................................................................................3
11.9 INSERINDO GRFICOS EM UM TPICO:....................................................................................................3
11.10 CRIANDO UM HOT SPOT PARA UMA JANELA SECUNDRIA...................................................................3
11.11 TORNANDO O ARQUIVO DE HELP SENSVEL AO CONTEXTO..................................................................3
11.12 CHAMADAS AO ARQUIVO DE HELP.......................................................................................................3
12. EXCEES............................................................................................................................................3
12.1 A ESTRUTURA TRYFINALLYEND....................................................................................................3
12.2 A ESTRUTURA TRYEXCEPTEND......................................................................................................3
12.3 EXCEES SILENCIOSAS.........................................................................................................................3
13. DICAS.....................................................................................................................................................3
13.1 CRIAO DE MDICHILD........................................................................................................................3
13.2 FORM EXISTE..........................................................................................................................................3
13.3 CRIAO SHOWMODAL.........................................................................................................................3
13.4 FECHAR TODAS......................................................................................................................................3
13.5 RELGIO E TECLADO..............................................................................................................................3
13.6 INFORMAES SISTEMA.........................................................................................................................3

UNIT
TESTEN
FORM
ROTINAS
21 N
212

.EXE
.DCU
.PAS
.DFM

1. O que Delphi?
O Delphi um ambiente de desenvolvimento de aplicaes, orientado a objeto, que permite o
desenvolvimento de aplicaes para os Sistemas operacionais Windows 3.11, Windows 95 e Windows
NT, com pouca codificao.
O Delphi tem ferramentas de desenvolvimento, como templates e experts de aplicaes e
formulrios, que aumentam muito a produtividade, facilitando a programao da aplicao.

Como formado uma Aplicao em Delphi


Quando voc abre um projeto no Delphi, ele j mostra uma UNIT com vrias linhas de cdigo.
Este texto tem como objetivo explicar um pouco desta estrutura que o ele usa. Um projeto Delphi tem,
inicialmente, duas divisrias: uma UNIT, que associada a um Form, e outra Project, que engloba todos
os FORM e UNITs da aplicao.
Em Delphi temos: o Project, os Forms e as Units. Para todo Form temos pelo menos uma Unit
(Cdigo do Form), mas temos Units sem form (cdigos de procedures, funes, etc).

.DPR

1.1

Arquivos que Compem um Aplicao

1.1.1

Arquivos Gerados no desenvolvimento

Extenso Arquivo Definio

Funo

.DPR

Arquivo do Projeto

.PAS

Cdigo fonte da Unit( Object


Pascal)

.DFM

Arquivo grfico do formulrio

.OPT

Arquivo de opes do projeto

.RES

Arquivo de Recursos do
Compilador
Arquivo de Backup do Projeto
Arquivo de Backup da Unit
Backup do Arquivo grfico do
formulrio

Cdigo fonte em Pascal do arquivo principal do


projeto. Lista todos os formulrios e units no
projeto, e contm cdigo de inicializao da
aplicao. Criado quando o projeto salvo.
Um arquivo .PAS gerado por cada formulrio que
o projeto contm. Seu projeto pode conter um ou
mais arquivos .PAS associados com algum
formulrio. Contem todas as declaraes e
procedimentos incluindo eventos de um formulrio.
Arquivo binrio que contm as propriedades do
desenho de um formulrio contido em um projeto.
Um .DFM gerado em companhia de um
arquivo .PAS para cada formulrio do projeto.
Arquivo texto que contm a situao corrente das
opes do projeto. Gerado com o primeiro
salvamento e atualizado em subsequentes
alteraes feitas para as opes do projeto.
Arquivo binrio que contm o cone, mensagens da
aplicao e outros recursos usados pelo projeto.
Gerado quando o projeto salvo pela segunda vez.
Se um .PAS alterado, este arquivo gerado.
Se voc abrir um .DFM no editor de cdigo e fizer
alguma alterao, este arquivo gerando quando
voc salva o arquivo.
Este arquivo armazena informaes sobre a
situao da rea de trabalho especifica para o
projeto em opes de ambiente( Options
Environment).

.~DP
.~PA
.~DF
.DSK

Situao da rea de Trabalho

Obs.: .~DF, .~PA , .~DP so arquivos de backup( Menu Options, Enviroment, Guia Editor Display, Caixa
de Grupo Display and file options, opo Create Backup Files, desativa o seu salvamento).
Devido a grande quantidade de arquivos de uma aplicao, cada projeto deve ser montado em
um diretrio especfico.

1.1.2

Arquivos Gerados pela Compilao

Extenso Arquivo Definio

Funo

.EXE

Arquivo compilado executvel

.DCU

Cdigo objeto da Unit

Este um arquivo executvel distribuivel de sua


aplicao. Este arquivo incorpora todos os arquivos
.DCU gerados quando sua aplicao compilada.
O Arquivo .DCU no necessrio distribuir em sua
aplicao.
A compilao cria um arquivo .DCU para cada
.PAS no projeto.

Obs.: Estes arquivos podem ser apagados para economizar espao em disco.

Cdigo fonte do arquivo Project(.DPR)


Nesta arquivo est escrito o cdigo de criao da aplicao e seus formulrios. O arquivo Project
tem apenas uma seo.
Esta seo formada pelo seguinte cdigo:
4

PROGRAM - Define o Projeto;


USES - Clusula que inicia uma lista de outras unidades.
Forms = a unidade do Delphi que define a forma e os componentes do aplicativo
In = A clausula indica ao compilador onde encontrar o arquivo Unit.
Unit1 = A unidade que voc criou
{$R *.RES} - Diretiva compiladora que inclui o arquivo de recursos.
Abaixo veja como fica o Project quando voc abre um projeto novo:
programProject1;
uses
Forms,
Unit1in'UNIT1.PAS'{Form1};
{$R*.RES}
begin
Application.CreateForm(TForm1,Form1);
Application.Run;
end.

Cdigo fonte do arquivo Unit (.PAS)


Nesta divisria sero escritos os cdigos dos seus respectivos forms (Unit1 = Form1). Aqui
sero definidos os cdigos de cada procedimento dos componentes que voc colocar no form.

1.1.3

Seo Unit

Declara o nome da unit.

1.1.4

Seo Uses

Contm as units acessadas por este arquivo.

1.1.5

Seo Interface

Nesta seo esto as declaraes de constantes, tipos de variveis, funes e procedures gerais
da Unit/Form. As declaraes desta seo so visveis por qualquer Unit. Esta seo formada pelo
seguinte cdigo:
INTERFACE - Palavra que inicia a seo;
USES - Clusula que inicia uma lista de outras unidades compiladas (units) em que se basea:
SysUtils = utilitrios do sistema (strings, data/hora, gerar arquivos)
WinProcs = acesso a GDI, USER e KERNEL do Windows
Wintypes= tipos de dados e valores constantes
Messages=constantes com os nmeros das mensagens do Windows e tipos de dados das
Mensagens
Classes=elementos de baixo nvel do sistema de componentes
Graphics=elementos grficos
Controls=elementos de nvel mdio do sistema de componentes
Forms=componentes de forma e componentes invisveis de aplicativos
Dialogs=componentes de dilogo comuns

1.1.6

Seo Type

Declara os tipos definidos pelo usurio. Subsees: Private, declaraes privativas da Unit.
Public declaraes publicas da Unit.

1.1.7

Seo Var
Declara as variveis privadas utilizadas.

1.1.8

Seo Implementation

Contm os corpos das funes e procedures declaradas nas sees Interface e Type. Nesta seo
tambm esto definidos todos os procedimentos dos componentes que esto includos no Form. As
declaraes desta seo so visveis apenas por ela mesma. Esta seo formada pelo seguinte cdigo:
{$R*.DFM} - Diretiva compiladora que inclui toda a interface, propriedades da forma e
componentes do arquivo *.DFM
{$S+} - Diretiva compiladora que ativa verificao de pilha.

1.1.9

Seo uses adicional

Serve para declarar Units que ativam esta.

1.1.10 Inicialization
Nesta seo, que opcional, pode ser definido um cdigo para proceder as tarefas de
inicializao da Unit quando o programa comea. Ela consiste na palavra reservada inicialization seguida
por uma ou mais declaraes para serem executadas em ordem.

1.1.11 Exemplo
Abaixo veja como fica a unit quando voc abre um projeto novo:
unitUnit1;
interface
uses
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,
Forms,Dialogs;
type
TForm1=class(TForm)
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.DFM}
{UsesAdicional}
{Initialization}
end.

Janelas

2. Code Editor (Editor de Cdigo)

Barra de Ttulo
(Mostra o nome do
arquivo)
Indicador de Linha
e Coluna
Indicador de
Modificao
Indicador de Modo
Aba da Pgina
Barra de Ttulo
Form (Formulrio)
Voc usa formulrios para fazer interface com o usurio, nele so inseridos os componentes. O
Menu de Controle
Boto Maximizar
formulrio uma janela, e portanto, possui os atributos de uma janela (menu de controle, botes de
maximizar e minimizar), barra de ttulo, bordas redimensionveis).

Menu de Controle

Boto Miminizar

Object Inspector (Inspetor de Objetos)


7

uma ferramenta composta de duas pginas: Properties (Propriedades) e Events (Eventos).

Seletor de Objetos
(mostra o nome e o tipo de objeto selec

Coluna de Propriedades

Separador de Colunas mveis


Coluna de Valores

Propriedades aninhadas
( Duplo clique para visualizar subpropri
Palheta
de
Componente
(Pgina
Stantard
visvel;
pgina
de
componentes
Locais
para
adicionais
componentes
disponveis
adicionais
selecion
Seta de
rolagem
para esquerda
Seta de
Pgina de Propriedades
Pgina de Eventos rolagem
para direita

Ponteiro

A pgina Properties([Propriedades) permite que voc estabelea parmetros de formulrios e


componentes. Estes parmetros especificam os valores iniciais de caractersticas como nome do
Aba
das
componente e sua
posio
no Pginas
formulrio.
A pginas Events (Eventos) permite associar os componentes com aes do usurio.

Component Palette( Palheta de Componentes)


composta de vrias pginas contendo cada uma grupos de componentes. Para mudar de pgina
na palheta de componentes, clique sobre a aba da pgina que voc quiser acessar.

Alignment Palette(Palheta de Alinhamento)

Centraliza horizontalmente naEspaos


janela iguais na horizontal
Alinhamento horizontal Centralizado

Alinha para o canto


direito

Alinha para o canto esquerdo

Alinha para baixo

Alinha para cima

Outras: Browser, BreakPoints, CallStack, Watches, Component List e Windows List.

Espaos iguais na vertical


Alinha Centralizando
na quantidade
vertical
Centraliza
verticalmente
Obs.: Devido a grande
de janelas
interessante quena
se janela
tenha no mnimo a resoluo de vdeo
800X600, para se ter espao para o desenvolvimento.

Orientao a Objetos
Por ser baseado no Pascal Object, o Delphi permite que se construa aplicaes orientadas a
objetos. Em linhas gerais, aplicaes orientadas a objetos se baseiam no conceito de classe. A classe um
tipo de dados, contendo atributos e servios. O objeto uma varivel de determinada classe. Por
exemplo, um formulrio nada mais do que um objeto da classe Formulrio (Tform). Contm atributos e
servios.

Eventos
Os programas feitos em Delphi so orientados a eventos. Eventos so aes normalmente
geradas pelo usurio. Ex.: Clicar o mouse pressionar uma tecla, mover o mouse etc. Os eventos podem
ser tambm gerados pelo windows.
Existem eventos associados ao formulrio e cada componente inserido neste.
Exemplos:
- Ao formulrio est ligado on create, que ocorre quando mostramos o formulrio na tela.
- Ao componente boto est ligado o evento on click, que ocorre quando damos um click com o
mouse sobre o boto.

2.1.1

Eventos comuns ao formulrio e aos componentes.

Alguns eventos ligados tanto ao formulrio quanto aos componentes esto listados a seguir.
OnClick: ocorre quando o usurio clica o objeto.

OndblClick: ocorre quando o usurio da um duplo clique.


OnKeyDown: ocorre quando o usurio pressiona uma tecla enquanto o objeto tem foco.
OnKeyUp: ocorre quando o usurio solta uma tecla enquanto o objeto tem o foco.
OnKeyPress: ocorre quando usurio da um clique numa tecla ANSI.
OnMouseDown: ocorre quando o usurio pressiona o boto do mouse.
OnMouseUp: ocorre quando o usurio solta o boto do mouse.
OnMouseMove: ocorre quando o usurio move o ponteiro do mouse.

2.1.2

Rotinas que Respondem a Eventos

Cada evento gera uma procedure, aonde voc deve inserir as linhas de cdigo que envolvem este
evento. Por exemplo, o evento OnClick, que gerado ao clicarmos em um boto chamado BTNSair, cria
a procedure:
ProcedureTForm1.BTNSairClick(Sender:Tobject);
onde Tform1 o objeto Tform que contm o boto BTNSair, e Sender um objeto Tobject que representa
o componente que deu origem ao evento.
Se voc quiser inserir uma rotina que trate um determinado evento de um componente, faa o
seguinte:
clique sobre o componente;

no Object Inspector, seleciona a pgina Events;


d um duplo clique sobre o evento para o qual quer inserir o cdigo;
entre no editor de cdigo e escreva as linhas de cdigo.
Exemplo:
ProcedureTForm1.BTNSairClick(Sender:Tobject);
begin
Form1.Close;
end;
Obs.: Escreva seu cdigo entre o begin e o end, se por acaso voc quiser retirar o evento e o componente,
retire primeiro os eventos do componente removendo somente o cdigo que voc colocou e depois o
componente; os resto dos procedimentos o DELPHI tira para voc.

Propriedades
Como vimos, eventos podem estar associados a modificaes em propriedade de componente e
formulrio, ou seja, voc pode modificar propriedades de formulrios e componentes durante a execuo
do sistema. Para isto voc dever usar a sintaxe:
<componente>.<propriedade>;
Por exemplo, para modificar a propriedade text de uma caixa de edio Edit1 para Bom Dia
faa:
Edit1.Text := Bom Dia;
Se a propriedade do componente tiver subpropriedades, para acessa-l, utilize a seguinte sintaxe:
<componente>.<propriedade>.<subpropriedade>
Por exemplo, para modificar a subpropriedade Name referente a propriedade fonte, de uma caixa
de edio Edit1, para Script, faa:
Edit1.Font.name := Script;
Obs.: Verifique o tipo da propriedade para antes de mandar o valor, consultando no Objetc Inspector.

2.1.3

10

Consultando Propriedades e Eventos de um componente.

Nome do Componente

Componente
Selecionado

Tipo do Componente

Obs.:
Cada

componente tem sua prprias propriedades e eventos, e podem


existir propriedades iguais de um componente para o outro,
portanto lembre-se das propriedades e eventos comuns entre
eles.

Mtodos
So procedures ou funes embutidas nos componentes e
formulrios, previamente definidas pelo Delphi.
Alguns mtodos so descritos a seguir:

Show : Mostra um formulrio;


Hide : Esconde um formulrio mais no o descarrega;
Print : Imprime um formulrio na impressora;
SetFocus : Estabelece o foco para um formulrio ou
componente;
Eventos
dopara
Objeto
BringtoFront:
Envia
frente. Selecionado

2.1.4

Chamado de mtodos

como resposta a eventos:


Um Objeto
evento podeSelecionado
gerar a chamada para um mtodo, ou seja, uma subrotina previamente definida
Propriedades do
para um componente.
No cdigo, para utilizar um mtodo, use a seguinte sintaxe:
<nome do objeto>.<mtodo>

11

Por exemplo, clicar em um boto pode dar origem ao evento Show de um outro formulrio,
mostrando este novo formulrio na tela:
Form2.show;

12

Application
Sempre que voc processa um projeto DELPHI, o Delphi cria automaticamente o objeto
Application. Voc tem de trabalhar com propriedades e mtodos desse objeto para poder fazer coisas
como especificar o cone do aplicativo, especificar o nome de arquivo de Help do projeto ou o titulo da
aplicao.

Mtodos:
MessageBox - Exibe uma caixa mensagem padro Windows.
Mtodo Minimize - Minimiza o aplicativo a um cone;
Mtodo Restore - Restaura o aplicativo ao estado anterior
ProcessMessages - Permite ao seu aplicativo deixar o Windows processar eventos para outros
aplicativos.
Terminate - Finaliza a aplicao.

Propriedades:
ExeName - Traz o nome do executvel que o nome projeto
HelpFile - Nome de arquivo de Help.
Icon - cone da aplicao por completo, sendo que cada janela tem seu prprio cone.
Title - Ttulo da aplicao.
Obs.: Algumas Propriedades podem ser acessadas pelo Menu Options, Opo Project, Guia Application.

MDI Application
Uma aplicao MDI (Multiple Document Interface) aquela em que vrios formulrios ou
janelas podem ser abertas em um pai.
Exemplos: Word, Excel.

Usando o Modelo de Aplicao MDI


Para criar uma aplicao MDI automaticamente:
Ative a galeria de projetos, atravs do Menu Options, opo Environment, guia preferences,
marcando a opo Use on New Project, do quadro Gallery;
No Menu do Delphi, escolha File opo New Project.
Clique sobre o cone da aplicao MDI,
Clique no boto OK.
O DELPHI pede ento o diretrio onde voc ir armazenar a aplicao.
Escolha o diretrio, e clique no boto OK.
O DELPHI gera automaticamente um projeto MDI, contendo dois formulrios: um formulrio
pai e um formulrio Filho. O Formulrio pai, de nome MainForm, ligado a unit Main, possui o seguinte
aspecto:

O Formulrio Filho modelo, de nome MDIChild, ligado a unit Childwin, apresenta o seguinte aspecto:

13

Obs.: A diferena entre os dois formulrios esta na propriedade FormStyle, onde a MainForm est como
fsMDIForm(Pai) e ChildWin como fsMDIChild (Filho).

Exemplo MDI

2.1.5

Projeto.DPR

programProjeto;
uses
Forms,
Principain'PRINCIPA.PAS'{FrmPrincipal},
Cadastroin'CADASTRO.PAS'{FrmCadastro};
{$R*.RES}
begin
Application.CreateForm(TFrmPrincipal,FrmPrincipal);
Application.Run;
end.

2.1.6

Principa.DFM

2.1.7

Principa.PAS

unitPrincipa;
interface
14

usesWinTypes,WinProcs,SysUtils,Classes,Graphics,Forms,Controls,
Menus,StdCtrls,Dialogs,Buttons,Messages,ExtCtrls,Cadastro;
(*Aquieudeclaroasjanelasfilha*)
type
TFrmPrincipal=class(TForm)
MenPrincipal:TMainMenu;
Panel1:TPanel;
PanLinhaStatus:TPanel;
MenArquivo:TMenuItem;
PanTempo:TPanel;
Window1:TMenuItem;
MenArquivoSair:TMenuItem;
WindowCascadeItem:TMenuItem;
WindowTileItem:TMenuItem;
WindowArrangeItem:TMenuItem;
WindowMinimizeItem:TMenuItem;
PanBotoes:TPanel;
SpbSair:TSpeedButton;
TimTempo:TTimer;
MenArquivoCadastro:TMenuItem;
procedureFormCreate(Sender:TObject);
procedureWindowCascadeItemClick(Sender:TObject);
procedureWindowTileItemClick(Sender:TObject);
procedureWindowArrangeItemClick(Sender:TObject);
procedureMenArquivoSairClick(Sender:TObject);
procedureWindowMinimizeItemClick(Sender:TObject);
procedureTimTempoTimer(Sender:TObject);
procedureMenArquivoCadastroClick(Sender:TObject);
private
{Privatedeclarations}
procedureShowHint(Sender:Tobject);
FunctionFormexiste(nomejanela:Tform):boolean;
public
{Publicdeclarations}
FrmCadastro:TFrmCadastro;(*Declaraavarivelquevaireceber
ajanelacasovocmudeseunome*)
end;
var
FrmPrincipal:TFrmPrincipal;
implementation
{$R*.DFM}
FunctionTForm1.Formexiste(Nomejanela:TForm):boolean;
var
I:integer;
begin
Formexiste:=false;
fori:=0tocomponentcount1do
ifComponents[i]isTFormthen
ifTForm(Components[i])=nomejanelathen
Formexiste:=true
end;
procedureTFrmPrincipal.FormCreate(Sender:TObject);
15

begin
Application.OnHint:=ShowHint;
ContaCadastro:=0;(*Zeroavariavelcontadoradajanelaquando
eucriooformularioprincipal*)
end;
procedureTFrmPrincipal.ShowHint(Sender:TObject);
begin
PanlinhaStatus.Caption:=Application.Hint;
end;
procedureTFrmPrincipal.MenArquivoSairClick(Sender:TObject);
begin
Close;
end;
procedureTFrmPrincipal.WindowCascadeItemClick(Sender:TObject);
begin
Cascade;
end;
procedureTFrmPrincipal.WindowTileItemClick(Sender:TObject);
begin
Tile;
end;
procedureTFrmPrincipal.WindowArrangeItemClick(Sender:TObject);
begin
ArrangeIcons;
end;
procedureTFrmPrincipal.WindowMinimizeItemClick(Sender:TObject);
var
I:Integer;
begin
forI:=MDIChildCount1downto0do
MDIChildren[I].WindowState:=wsMinimized;
end;
procedureTFrmPrincipal.TimTempoTimer(Sender:TObject);
begin
Pantempo.caption:=timetostr(now)+''+Datetostr(date)+'';
end;
procedureTFrmPrincipal.MenArquivoCadastroClick(Sender:TObject);
begin
IfFormexiste(FrmCadastro)=falsethen(*Seforfalsoentocriaa
janela*)
Begin
Screen.Cursor:=CrHourGlass;(*Colocaocursornaformadeuma
ampulheta*)
FrmCadastro:=TFrmCadastro.Create(Self);(*Criaajanelafilha
eatribuiavariveldeclarada*)
End
Else
IfFormexiste(Frmcadastro)=truethen(*Sefortentarabrira
janelaeelajaestiversidocriada*)
Begin
FrmCadastro.WindowState:=WsNormal;(*Seestiverminimizada
restaura*)
FrmCadastro.BringToFront;(*Seestiveratrs,colocanafrente*)
FrmCadastro.Setfocus;(*Colocaofoconajanela*)
End;
end;
16

end.
Obs.:

No menu para colocar separadores coloca - no caption, de um item do menu.


Para sublinhar a letra do item de menu que vai ser o atalho coloque o & antes da letra

escolhida, isto tambm aplicado a outros componentes como os buttons, radiogrupou e


outros.
Para abrir um Sub-Menu pressione a tecla Control e a seta para direita no item que for
necessrio o Sub-Menu.

Sub-Menu

Atalho para o Menu

Separador

2.1.8

Cadastro.DFM

2.1.9

Cadastro.Pas

unitCadastro;
interface
uses

17

SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,
Forms,Dialogs,StdCtrls,Buttons,ExtCtrls,DBCtrls,Mask,DB,
DBTables;
type
TFrmCadastro=class(TForm)
BitBtn1:TBitBtn;
procedureBitBtn1Click(Sender:TObject);
procedureFormCreate(Sender:TObject);
procedureFormClose(Sender:TObject;varAction:
TCloseAction);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
FrmCadastro:TFrmCadastro;
implementation
{$R*.DFM}
procedureTFrmCadastro.FormCreate(Sender:TObject);
begin
Screen.Cursor:=CrDefault;(*Colocaocursoremmodonormal*)
end;
procedureTFrmCadastro.FormClose(Sender:TObject;
varAction:TCloseAction);
begin
Action:=Cafree;(*Liberaavariaveldajaneladamemria*)
end;
procedureTFrmCadastro.BitBtn1Click(Sender:TObject);
begin
Close;(*Fechaajanela*)
end;
end.

Trabalhando com Banco de Dados

18

3. BDE
O Borland Database Engine o corao do Delphi e suas aplicaes com banco de dados usando
o mesmo database engine usado pelo Paradox e dBase. Paradox e dBase claro trazem capacidades
adicionais alm do database engine (como o Delphi tambm o faz), mas isso longe de dizer que o valor
agregado destes recursos adicionais maior de 2 % das capacidades - os outros 98% so providos pelo
database engine e esto disponveis para todos os usurios deste engine.
O Borland Database Engine (BDE) uma coleo de DLLs que as aplicaes de banco de dados
iro fazer chamadas. Cada estao de trabalho que tiver a aplicao de banco de dados instalada dever
ter, tambm, o BDE instalado ( o Delphi vem com a instalao do BDE para voc adicionar a sua
aplicao).
O BDE permite a voc usar tabelas dBase, Paradox ou ODBC em modo multi-usurio. A verso
Cliente/Servidor do Delphi tambm vem com links para servidores de banco de dados como Oracle,
Sybase, MS SQL Server, Informix, e InterBase.

Arquitetura do Banco de Dados do Delphi

Arquitetura dos Componentes de Banco de Dados

19

Paleta de Componentes da pgina de Acesso de Dados

Componente

Utilidade

TDataSource

Atua como um conduto entre componentes TTable, TQuery, TStoredProc e


componentes de controle, como um TDBGrid
Recupera dados de um tabela de banco de dados via o BDE e abastece ele para
um ou mais componentes de controle de dados atravs do componente
TDataSource. Envia dados recebidos de um componente para uma banco de
dados via o BDE.
Usa estruturas em SQL para recuperar dados de uma tabela de banco de dados
via o BDE, e abastece ele para um ou mais componentes de controle de dados
atravs de um TDataSouce, ou usa estruturas em SQL para enviar dados de um
componente para um banco de dados via o BDE.
Habilita uma aplicao para acessar procedimentos armazenados em um servidor.
Envia dados recebidos de um componente para um banco de dados via o BDE.
Instala uma conexo permanente com um banco de dados, especialmente um
banco de dados remoto requerendo um login do usurio e uma senha.
Copia a estrutura de uma tabela ou seus dados. Pode ser usado para mover
tabelas inteiras de uma formato de banco de dados para outro.
Habilita imprimir e visualizar relatrios de um banco de dados atravs do
ReportSmith.

TTable

TQuery

TStoreProc
TDataBase
TBatchMove
TReport

3.1

20

Paleta de Componentes da pgina de Controle de Dados

Componente

Utilidade

Botes de navegao para controle de dados que move o apontador do registro


corrente de uma tabela para o posterior ou anterior, inicia insero ou modo de
edio; confirma novos ou modificaes de registros; cancela o modo de edio;
e refresca(refaz) a tela para recuperar dados atualizados.
Rtulo de controle de dados que pode mostrar um campo corrente do registro
TDBText
ativo.
Caixa de edio de controle de dados que pode mostrar ou editar um campo
TDBEdit
corrente do registro ativo.
Caixa de verificao de controle de dados que pode mostrar ou editar dados
TDBCheckBox
lgico de uma campo corrente do registro ativo.
Caixa de Lista de controle de dados que pode mostrar valores da coluna de uma
TDBListBox
tabela.
Caixa de Lista mvel de controle de dados que pode mostrar ou editar valores da
TDBComboBox
coluna de uma tabela.
Grupos de radio de controle de dados com botes de rdio que pode mostrar ou
TDBRadioGroup
setar valores de colunas.
Grade padro de controle de dados que possibilita visualizar e editar dados de
TDBGrid
forma tabular, semelhante a uma planilha; faz uso extensivo das propriedades do
TField (estabelecidos no Editor de Campos(Fields Editor)) para determinar a
visibilidade de uma coluna, formato da visualizao, ordem, etc.
Caixa memo de controle de dados que pode mostrar ou editar dados textos
TDBMemo
BLOB do registro corrente ativo.
Caixa de Imagem de controle de dados que pode mostrar, cortar ou colar imagens
TDBImage
BLOB bitmaps do registro corrente ativo.
Caixa de Lista de controle de dados que mostrar valores mapeados atravs de
TDBLookupList
outra tabela em tempo de compilao.
TDBLookupCombo Caixa de Combo de controle de dados que mostrar valores mapeados atravs de
outra tabela em tempo de compilao.

TDBNavigator

Usando DataSets
As classes de componentes TTable e TQuery so descendentes de TDataset atravs do TDBDataSet. Esta
classe de componente herda uma parte de propriedades, mtodos e eventos.

3.1.1
Estado
dsInactive
dsBrowse
dsEdit
dsInsert
dsSetKey
dsCalcFields

Estados do DataSet
Descrio
O Dataset esta fechado.
Estado de Espera. O estado default quando um dataset aberto. Registros
pode ser visualizados mas no mudados ou inseridos.
Habilita o a linha corrente para ser editada.
Habilita uma nova linha para ser inserida. Uma chamada para o Post inserir a
nova linha.
Habilita FindKey, GotoKey, and GoToNearest para procurar valores nas
tabelas do banco de dados. Estes mtodos somente pertencem para o
componente TTable. Para TQuery, a procura feita com a syntax do SQL.
Modo quando os OnCalcFields executado; previne qualquer mudana para
outros campos ou campos calculados. Raramente usado explicitamente.

21

3.1.2

Diagrama de Estados do Dataset

3.1.3

Usando os Eventos do DataSource

3.1.3.1

Evento StateChange

procedureTForm1.DataSource1.StateChange(Sender:TObject);
varS:String;
begin
caseTable1.Stateof
dsInactive:S:='Inactive';
dsBrowse:S:='Browse';
dsEdit:S:='Edit';
dsInsert:S:='Insert';
dsSetKey:S:='SetKey';
end;
Label1.Caption:=S;
end;

procedureForm1.DataSource1.StateChange(Sender:Tobject);
begin
InsertBtn.Enabled:=(Table1.State=dsBrowse);
CancelBtn.Enabled:=Table1.Statein[dsInsert,dsEdit,
dsSetKey];
...
end;

22

3.1.4

23

Abrindo e Fechado DataSets


Antes que uma aplicao possa acessar dados atravs de um dataset, o dataset deve ser aberto.
Existem dois meios para abrir o dataset:
- Ativando a propriedade Active para True, isto pode ser feito atravs do Object Inspector ou
programavelmente em tempo de execuo.
Table1.Active:=True;
- Chamando o mtodo do Dataset Open em tempo de execuo.
Table1.open;
Para fechar o processo e semelhante s muda o a propriedade para False e o evento para Close;

3.1.5

Navegando no Dataset

Propriedades e Mtodos de Navegao

Mtodo ou Propriedade

Descrio

Mtodo First
Mtodo Last
Mtodo Next
Mtodo Prior
Propriedade BOF
Propriedade EOF
Mtodo MoveBy(n)

Move o cursor para a primeira linha em um dataset.


Move o cursor para a ultima linha em um dataset.
Move o cursor para a prxima linha em um dataset.
Move o cursor linha anterior em um dataset.
True quando o cursor est no inicio do dataset, em outro caso false.
True quando o cursor est no final do dataset, em outro caso false.
Move o cursor para n linhas a frente em um dataset, quando n um
numero inteiro positivo ou negativo.

Exemplo:
Table1.Last;(*Moveocursorparaoltimoregistrodatabela*)
Table1.Next;(*Moveocursorparaoprximoregistrodatabela*)

3.1.6

Modificando dados no Dataset

Os seguintes mtodos habilitam uma aplicao para inserir, atualizar, e deletar dados no dataset.

Mtodo

Descrio

Append

Comfirma qualquer dado pendente e move um registro em branco para o final


do dataset, e coloca o dataset em estado de Insert.
Cancela a operao corrente e coloca o dataset em estado de Browse.
Apaga o registro corrente e coloca o dataset em estado de Browse.
Apaga uma tabela
Coloca o dataset em estado de edio. Se um dataset j est estado de Edit ou
Insert, uma chamada para Edit no tem efeito.
Esvazia uma tabela.
Confirma qualquer dado pendente, e coloca o dataset em estado de insero.
Tentativa para confirmar um registro novo ou alterado. Se sucesso, o dataset e
colocado em estado de Browse; se insucesso, o dataset fica no estado corrente.
Atualiza a viso do banco de dados.

Cancel
Delete
DeleteTable
Edit
EmptyTable
Insert
Post
Refresh

3.1.7

Lendo Valores do Campo

Existem algumas maneiras de ler dados de um dataset:

1. Edit1.text:=Table1Nome_Clie.asstring;
1. Edit1.text:=Table1.Fields[1].asstring;
1. Edit1.text:=Table1.FieldByName(Nome_Clie).asstring;
Para associar outros tipos de campos que no texto a uma caixa de edio (que s aceita valores
do tipo string), devemos utilizar propriedades de converso do componente TField: AsBoolean,
AsDataTime, AsFloat (Real), AsInteger, AsString.
24

Para atribuir valores para o dataset o procedimento o mesmo s que no sentido inverso, desde
que que a tabela esteja em modo de edio ou insero.

3.1.8

Marcando Dados

Os mtodos para marcar so

GetBookmark - Pega a posio do registro e coloca em uma varivel do tipo TBookmark;


GotoBookmark - Leva o apontador para uma variavel do tipo TBookmark;
FreeBookmark - Desaloca uma variavel do tipo TBookmark;
Exemplo:
procedureDoSomething;
var
Marca:TBookmark;
begin
Marca:=Table1.GetBookmark;{Marcaaposio}
Table1.DisableControls;{Desabilitaocontrolededados}
try
Table1.First;
whilenotTable1.EOFdo
begin
{Fazalgumacoisa}
Table1.Next;
end;
finally
Table1.GotoBookmark(Marca);
Table1.EnableControls;
Table1.FreeBookmark(Marca);{Desalocaavariavel}
end;
end;

3.1.9

Procurando dados em uma Tabela

Os mtodos GoToKey e GoToNearest habilita uma aplicao para procurar uma chave em uma
tabela. SetKey coloca a tabela em modo de procura. No estado SetKey, atribui-se valores para a procura
em um campo indexado. GoToKey ento move o cursor para a primeira linha da tabela que encontrou
este valor. Como GoToKey uma funo ela retorna True ou False se teve sucesso na procura. O
GoToNearest uma funo que leva para o valor mais parecido encontrado.
Exemplo:
procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.SetKey;{Primeirocampoachave}
Table1.Fields[0].AsString:=Edit1.Text;(*
Table1.Fieldbyname(Cidade):=Edit1.Text*)
Table1.GoToKey;
end;
Todo procedimento acima pode ser substitudo usando a funo Find
Exemplo:
procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.FindKey([Edit1.text]);
end;

25

Exemplo de outra forma de procura em uma tabela.


procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.SetKey;{Primeirocampoachave}
Table1.Fieldbyname(Cidade):=Edit1.Text;
Table1.GoToKey;
end;
Procura em um indce secundrio.
procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.indexname:=Nome_Clie;
Table1.open;
Table1.setkey;
Table1Nome_clie.asstring:=Edit1.text;
Table1.gotonearest;
end;
Procura em um indce primrio ou secundrio.
procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.indexfieldnames:=Codi_Clie;
Table1.open;
Table1.setkey;
Table1Nome_clie.asstring:=Edit1.text;
Table1.gotonearest;
end;

3.1.10 Filtrando Registros em uma Tabela


Voc pode filtar registros de uma tabela atravs de mtodos especficos:

SetRangeStart: Estabelece o limite inicial do filtro.


SetRangeEnd: Estabelece o limite final do filtro.
ApplyRange: Aplica o filtro tabela.
CancelRange: Cancela o filtro aplicado tabela.
KeyExclusive: Exclui a chame do indce setado.

Exemplo:
Table1.SetRangeStart;
Table1.FieldByName(Codigo):=100;(*Table1Codigo.asinteger:=100*)
Table1.KeyExclusive:=False;
Table1.SetRangeEnd;
Table1.FieldByName(Codigo):=200;(*Table1Codigo.asinteger:=200*)
Table1.KeyExclusive:=True;
Table1.ApplyRange;
Obter um filtro dos registros de clientes com cdigo entre 100 e 199.

3.1.11

26

ndices de uma Tabela


Mtodo

Descrio

GetIndexNames

Retorna uma lista de nomes disponiveis de ndeces para uma tabela do banco de
dados.
Nmero de Campos do ndice.
Vetor de nomes de campos usados no ndice
Para usar o ndice primrio de uma tabela Paradox.
Para muda o ndice para qualquer campo.

IndexFieldCount
IndexFields
IndexName
IndexFieldNames

As propriedades IndexName e IndexFieldNames so mutualmente exclusivas. Colocando uma


propriedade, limpa o valor da outra.

3.1.12 Sincronizando Tabelas


O mtodo GotoCurrent um mtodo que sincroniza dois componentes table ligados a uma
mesma tabela em um banco de dados e usando o mesmo indce.
Table1.GotoCurrent(Table2);

4.

27

A Linguagem SQL
A linguagem SQL (Structured Query Language - Linguagem Estruturada de Pesquisa) foi criada
para ser uma linguagem padro para consulta, atualizao e manipulao de banco de dados em um banco
de dados relacional.
Comercialmente implementada pela IBM, se tornou um padro de linguagem de acesso a dados
em vrios bancos de dados relacionais, como Oracle, DB2, SQL Server, Sybase, Interbase, etc.
Usaresmos as Declaraes em SQL para extrair/Atualizar registros de uma ou mais tabelas que
atendam as condies especificadas, manipulando, assim, somente os dados que sejam de nosso interesse.
Por exemplo, a declarao a permite que somente os registros cujo o campo Nome Comeando
pela letra A da tabela de Clientes sejam exibidos na tela:
Select*
FromClientes
WhereNome=A*
Podemos dividir os comandos da linguagem SQL em trs categorias distintas:
Comandos de Definio de Dados: permitem definir ou alterar tabelas em um banco de
dados.
Comandos de Controle de Dados: servem para gerenciar o acesso dos usurios a
determinadas tabelas.
Comandos para a Manipulao de Dados: servem para manipular os dados contidos nas
tabelas.

Comandos de Manipulao de Dados

4.1.1

Update

Atualiza registros.

4.1.2

Delete

Deleta Registros

4.1.3

Select

Recupera registros que satisfaam a uma condio.

4.1.4

Insert

Insere um novo registro.

Operadores
Podemos usar o seguintes operadores:
Aritimticos + , - , * , /

Comparao: = , >, <, <>, <=, =>


Intervalo: BETWEEN....AND....
IN e NOT IN
LIKE
IS NULL
AND, OR e NOT
Quantidade: ALL, SOME, ANY
|| Concatenao

Expresses

Podemos construir uma declarao SQL usando as seguintes expresses:

4.1.5

From

Especifica o nome(s) da(s) tabela(s) que originaro os dados.

28

4.1.6

Where

Especifica uma condio.

4.1.7

Group By

Separa os registros pelo grupo especificado.

4.1.8

Having

Estabelece a condio que cada grupo deve atender.

4.1.9

Order By

Especifica a ordenao dos registros selecionados. Pode-se usar ainda o parmetros


ASC(Ascendente) e DESC (Descendente)

4.1.10 Distinct
Retira as repeties

Funes
Podemos ainda, especificar as seguintes funes:
COUNT (Contador);

1)

AVG(Mdia);
FIRST(Primeiro);
LAST(ltimo);
MIN(Mnimo);
MAX(Mximo);
SUM(Soma);
UPPER(Maisculo);
LOWER(Minusculo);
TRIM(Remove repeties de um caracter espcificado da esquerda ou direita de uma string);

Exemplos

Select*
FromClientes
Seleciona todos(*) os campos de todos registros da tabela clientes.

2)

SelectCodigo,Nome
FromClientes
WhereCodigo>10AndCodigo<200

Seleciona os campos Cdigo e Nome da tabela Clientes para os registros que tenham os campo
Cdigo > (Maior) que 10 e <(Menor) que 200.
3)

Select*
FromClientes
GroupByCidade
Seleciona todos os campos e registros da tabela Clientes agrupada pelo campo Cidade.

4)

Select*
FromClientes
OrderByCodigo
Seleciona todos os campos e registros da tabela Clientes ordenada pelo campo Codigo.

29

5)

Select*
FromFornecedores,Produtos
WhereFornecedores.Codigo=Produtos.Codigo

Seleciona todos os campos e registros das tabelas de Fornecedores e Produtos que tenham o
campo codigo de Fornecedores igual ao campo Codigo de Produtos.
6)

Select*
FromClientes
WhereNomeLikeS*
Seleciona todos os campos e registros da tabela de Clientes cujo o campo Nome comece pela

letra S.
7)

UpdateFuncionarios
SetSalario=Salario*1.2

Atualiza o campo Salario de todos os registros da tabela de Funcionarios para o contedo atual
multiplicado por 1.2 (aumento de 20%).
8)

UpdateFuncionarios
SetSalario=Salario*1.2
WhereCargo=Diretor

Atualiza o campo Salario de todos os registros da tabela de Funcinarios que campo Cargo seja
igual a Diretor para o contedo atual multiplicado por 1.2 (aumento de 20%).
9)

DeleteFromProdutos
WhereCodigo>5AndCodigo<20
Apaga todos os registros da tabela Produtos para Codigo >(maior) que 5 e < (menor) que 20.

Construindo uma Consulta Dinamicamente


Procedimento para criar construir uma consulta em SQL dinamicamente.
Query1.Close;{Fechaaquery}
Query1.SQL.Clear;{LimpaocontedodapropriedadeSQL}
Query1.SQL.Add(Select*);{Adiciona}
Query1.SQL.Add(FromCountry);
Query1.SQL.Add(WhereName=Argentina);
Query1.Open;{AbreeexecutaaQuery}

4.1.11 Passando Parmetros


Conteudo da Propriedade SQL da Query1:
Select*
FromCountry
WhereNameLike:NomeRegiao
ProcedureTForm1.ButtonClick(Senderl:Tobject);
Begin
Query1.close;
Query1.Params[0].AsString:=edit1.text;
Query1.open;
end;
Para NomeRegiao e passado o contedo de Edit1.text.
Obs.1:
Query1.open;=Query1.ExecSQL;
Obs.2:
Para caregar de um arquivo texto:
30

Query1.SQL.LoadFromFile(C:\MYQUERY.TXT);

Construindo Relatrios com o QuickReport


O Presente trabalho tem como objetivo demostrar os procedimentos para criar relatrios em
programas feitos em Delphi utilizando o QuickReport. O Delphi 1.0 j possui um gerador de relatrios o
ReportSmith que perde em desempenho e desenvoltura em relao ao QuickReport, alm de necessitar de
sua instalao prvia quando da sua utilizao. Por ser um programa a parte torna-se muito lento em
relao a o QuickReport que uma biblioteca de componentes que passa a fazer parte da aplicao
quando da sua utilizao aps a compilao.

QuickReport bsico
QuickReport um gerador de relatrios por banda. Seu relatrio construdo em cima de vrios
tipos de banda, onde so colocados componentes visveis como campos de banco de dados, rtulos,
imagens e outros componentes imprimveis.
QuickReport
QRBand
QRGroup
QRDetailLink
QRLabel

QRPreview
QRShape
QRSysData
QRDBCalc
QRDBText
QRMemo

Objetos do QuickReport na Barra de Ferramentas do Delphi.

Componentes do QuickReport.

4.1.12 QuickReport
Este o componente principal do QuickReport, pois ele transforma a form padro em um
relatrio.

QRBand
Voc constri seus relatrios com diferentes QRBands e colocando componentes visveis de
controle do QuickReport sobre ela. Existem diferentes tipos de bandas, como banda de detalhes, banda
de cabealho, banda de rodap e outras.

QRGroup
Existe duas maneiras de imprimir relatrios mestre/detalhes com o QuickReport. Um usar um
componente TQuery ligado com um Query(Consultas) e QRGroups para grupos de datas, a outra
maneira usar o componente DetailLink combinado com bandas DetailGroup. Cada mtodo tem o
mesmo resultado. Se voc tiver necessidade de relatrios mestres/detalhes com mais de duas camadas
ento use QRGroup e TQuery ter uma probabilidade de ser melhor desempenho.

QRDetailLink

31

QRDetailLink o segundo caminho para criar relatrios mestre/detalhes no QuickReport.


Tipicamente voc usaria QRDetailLink com TTables (ou TQueries) quando voc tem somente dois nveis
de conexo. A fora do QRDetailLink contudo, que voc pode ter muitas tabelas detalhes.

QRLabel
O Componente QRLabel usado para mostrar textos em um relatrio. A propriedade
Caption(Ttulo) pode ser alterado em alguns eventos durante a preparao do relatrio. Se voc
necessitar um texto para sada de um campo de dados use o componente QRDBText.

QRMemo
O Componente QRMemo utilizado montar linhas que precisam ser composta por vrios itens
de dados ou textos que precisem ser digitados para compor o relatrio.

QRDBText
O Componente QRDBText uma controle de texto de dados cliente. Texto conectado com um
campo de banco de dados.

QRDBCalc
Este componente automatiza processos de soma e contagem de campos de dados. Em adio
para esta propriedade o QRDBCalc tem todas a propriedades e eventos herdados do QRDBText.

QRSysData
O Componente QRSysData mostra vrias informaes do sistema. Em adio para as
propriedade do QRSysData tem-se todos os componentes que o QRLabel tem, exceto a propriedade
Caption.

QRShape
QRShape usado para mostrar linhas simples e figuras em um relatrio.

QRPreview
QRPreview usado para criar uma form de pr visualizao. Este componente mostra todas as
sadas de uma visualizao do preview atual. Para chamar sua prpria form de pr visualizao ao invs
de usar uma form padro com QuickReport atribuindo o evento QRPrinter.OnPreview. Neste evento voc
traz sua prprio form a qual deve conte o componente QRPreview. Voc no pode selecionar que pgina
para visualizar usando a propriedade PageNumber.

Criando Relatrios
QuickReport pode criar vrios tipos de relatrios, de fato com um breve conhecimento de Delphi
e um pouco de criatividade pode ser usado para criar qualquer tipo de relatrio.
Lembrar que ainda que se os relatrios so criados como as forms, mas no com a inteno de
ser mostrado na tela como forms. Em uma form relatrio deve ser includo um componente
TQuickReport, e voc usa neste componente os mtodos PRINT e PREVIEW para criar seu relatrio.
No tente usar em um relatrio os mtodos de form SHOW ou SHOWMODAL. Uma Form relatrio
nunca dever ser em sua aplicao o form principal.

Relatrio de lista Simples


Criar um relatrio de lista simples do contedo de uma tabela ou uma consulta muito fcil.
Siga as instrues passo a passo a seguir para criar um relatrio listando todos os clientes de DBDemos. A
tabela clientes est includa no Delphi.

1.

Criar um novo projeto com um form e sobre um nico form. Esta sua principal forma de
aplicao. Salvar unidade do form como MAINFORM e a aplicao como QRTEST.

1.

Adicionar um form em branco para o projeto . Estabelecer o nome para a propriedade


MYREPORT. Estabelecer a largura(Width) da form para mais ou menos 800. O atual nmero no
crtico.

1.

Adicionar uma TTable para o componente form. Nomear o componente CustomerTable,


estabelecer a propriedade DataBaseName para DBDEMOS e a propriedade TableName para
COSTUMER. Estabelecer a propriedade ativa para TRUE.

1.

Adicionar um componente TDataSource para o form. Nomear o CustomerDS e estabelecer a


propriedade DateSet para CustomerTable.

1.

Adicionar um componente TQuickReport para o form. Nomear o componente REP. Estabelecer a


propriedade DataSource para CustomerDS.

1.

Adicionar um componente QRBand para o form. Estabelecer a propriedade BandType para


rbDetail.
32

1.

Colocar um componente TQRDBText sobre o band. Estabelecer a propriedade DataSource para


CustomerDS e a propriedade DataField para CompanyName.

1.

Salvar o form como REPORT.

1.

Voltar MAINFORM (form principal) e adicionar a clusula USES MYREPORT no topo do


cdigo fonte.

1.

Dar um duplo clique no boto da form principal. Isto ir mostrar o evento ONCLICK do boto.
Adicionar o seguinte cdigo para o evento : MyReport.Rep.Preview;

1.

Rode seu projeto .

Voc criou agora um projeto com relatrio. Seu programa pode agora: apresentar, imprimir,
salvar e carregar relatrios!

Criando um relatrio composto


O QuickReport pode imprimir relatrios mestre e detalhes muito facilmente. Estes relatrios
podem ser imprimidos juntamente com componentes TQuery (consulta) e de componentes TTable
(tabela) conectadas com MasterSource (fonte mestre)/propriedades MasterField(campo mestre). Em
acrscimo o QuickReport pode criar mestres complexos/relatrios detalhes com registros de um nmero
ilimitado de tabelas detalhes.
Voc poder ver como criar ambos os tipos de relatrios a seguir. Relatrios mestre/detalhes
usando o componente TTable (tabela).
Criando um mestre/detalhes com o componente TTable (tabela) deixa o relatrio muito mais
rpido e flexvel. Em adio voc pode incluir dados detalhes de muitas outras tabelas detalhes que voc
queira. Voc pode criar um relatrio de uma relao resumida de clientes de todos os seus clientes (master
data) e para cada cliente da lista todas as ordens que o cliente tenha feito (detail data), todos os seus
contatos pessoais com seus clientes (detail data), todos os produtos de uma categoria que o cliente esteja
interessado (detail data) e muitas outras tabelas que voc quiser unir com a tabela clientes. Cada uma
destas tabelas detalhes podem conter a sua banda cabealho, banda detalhe e banda rodap.
Para criar relatrios mestre usando componentes TTable siga as instrues a seguir. Voc vai ter a
necessidade de olhar o relatrio MDREP do projeto demonstrao. Ele e um relatrio mestre/detalhe que
voc pode usar como modelo.
Crie um relatrio padro seguindo o exemplo deste captulo Criando Relatrios.

1. Alterar a propriedade MyReport.ReportType para qrMasterDetail.


1. Acrescentar um novo componente TTable para o relatrio. Nomear ele OrderesTable, colocar a
propriedade DataBaseName para DBDEMOS, a propriedade TableName para Orders, o MasterSource
para CustomerDS e na caixa de dialogo MasterFields conecte o ndice secundrio (custno) para
Customer. Custno. Coloque a propriedade Active da TTable para TRUE.

1. Adicione um componente TDataSource para o relatrio. Nomeie ele OrdersDS e coloque a


propriedade DataSet para OrdersTable

1. Adicione um TQRBand para o relatrio. Coloque a propriedade BandType para rbSubdetail. Nomeie
ele para OrdersDetailBand.

1. Adicione um componente TQRDetailLink para o relatrio. Coloque a propriedade DataSource para


OrdersDs. Coloque a propriedade DetailBand para OrderDetailBand. Coloque a propriedade Master
para REP.

1. Coloque um componente TQRDBText sobre o OrdersDetailBand. Coloque a propriedade DataSource


para OrdersDS e a Propriedade DataField para OrderNo.

1. Duplo clique no componente QuickReport para visualizar o relatrio.

33

Se voc desejar mais tabelas de detalhes voc dever repetir os passos 3 a 7 para cara tabela de
detalhes que voc ira incluir. Para mudar a ordem de impresso reorganize a ordem de criao dos
componentes TQRDetailink. As Tabelas de detalhes so imprimidas na ordem correspondente com a
criao dos componentes TQRDetailink.

5.

34

Arquivos de Inicializao

6. O Objeto TInifile
Para manipular arquivos .INI, o Delphi oferece o objeto Tinifile. O Objeto TIniFile, declarado na
unit Inifiles, permite que sua aplicao escreva e leia um arquivo .INI.
Para usar o objeto TIniFile, voc deve adicionar a unit Inifiles clusulas uses de sua aplicao.

Criando um Arquivo de Configurao


Use o mtodo Create para criar memria para um objeto do tipo TIniFile, passando como
parmetros o nome do arquivo a ser criado.
NomeObjeto:=TIniFile.Create(NomedoArquivo.INI);
Pode ser informado o junto ao nome o caminho de onde se encontra o arquivo, mas o padro
armazenar o arquivo .INI no subdiretrio do Windows.
Para criar as sees, as entradas e os valores das entradas, utilize os seguintes mtodos:
WriteBool - Para criar um valor booleano;

WriteInteger - Para criar um valor inteiro;


WriteString - Para criar uma string.

Use o mtodo Free para liberar a memria utilizada pelo objeto TIniFile criado:
NomeObjeto.Free;
O exemplo abaixo cria, ao clicar no boto Button1, um arquivo .INI chamado NovoJogo, com
duas sees: Opcoes (com duas entradas) e Configuracao (com uma entrada):
ProcedureTForm1.Button1Click(Sender:TObject);
Var
IniJogo:TIniFile;
Begin
IniJogo:=TIniFile.Create(NOVOJOGO.INI);
IniJogo.WriteBool(Opcoes,Som,True);
IniJogo.WriteInteger(Opcoes,Nivel,3);
IniJogo.WriteString(Configuracao,Nome,Oliveira);
IniFile.Free;
End;
O arquivo de configurao NOVOJOGO.INI armazenado no diretrio \Windows, e possui o
seguinte formato:
[Opcoes]
Som=1
Nivel=3
[Configuracao]
Nome=Oliveira
Quando voc for distribuir sua aplicao, no esquea de oferecer o arquivo .INI. Outra opo criar o
arquivo .INI atravs de um programa de instalao do seu aplicativo, oferecendo ao usurio a
possibilidade de personalizar o arquivo .INI ja na instalao.

Lendo o Arquivo de Configurao


Quando seu aplicativo for executado, deve ler o arquivo .INI existente. Isto pode ser feito, por
exemplo, no evento OnCreate do Formulrio, ou na seo Inicialization.
Para ler um arquivo .INI, utilize os mtodos:
ReadBoolPara ler uma entrada com valores booleanos;

ReadInteger Para ler uma entrada com valores inteiros;


ReadString Para ler uma entrada com valores string.
Atribua o resultado da leitura a variveis globais (criadas na clusula var da seo interface da
35

unit do formulrio principal), que podem ser utilizadas por toda a aplicao, quando necessrio. No
esquea de adicionar a unit do formulrio principal a clusula uses da seo implementation quando for
utilizar as variveis.
O exemplo abaixo l as entradas do arquivo NOVOJOGO.INI, mostrando para o usurio em
Labels:
Var
Form1:Tform1;
Vsom:Boolean;
Vnivel:Integer;
Vnome:String;
IniJogo:Tinifile;
Implementation
{$R*.DFM}
ProcedureTForm1.FormCreate(Sender:TObject);
Begin
Label1.Caption:=Nvel+InttoStr(Vnivel);
IfVsomthen
Label2.Caption:=SomLigado);
else
Label2.Caption:=SomDesligado);
Label3.Caption:=Nome:+Vnome;
End;
Initialization
Begin
IniJogo:=TIniFile.Create(NOVOJOGO.INI);
Vsom:=IniJogo.ReadBool(Opcoes,Som,False);
Vnivel:=IniJogo.ReadInteger(Opcoes,Nivel,1);
Vnome:=IniJogo.ReadString(Configuracao,Nome,);
IniFile.Free;
end;

Modificando um Arquivo .INI


Voc pode utilizar os mtodos WriteString, WriteBool e WriteInteger para modificar as entradas
de um arquivo .INI j existente. Por exemplo o formato de mode estabelecido no WIN.INI, seo [Intl],
entrada sCurrency, para R$:
ProcedureTForm1.Button1Click(Sender:TObject);
Var
IniMoeda:TIniFile;
Begin
IniMoeda:=TIniFile.Create(WIN.INI);
IniMoeda.WriteString(Intl,sCurrency,R$);
IniMoeda.Free;
End;

Outras Operaes com Arquivos .INI


Atravs do mtodo ReadSection, voc l todas as entradas de um seo de um arquivo .INI para
um objeto da classe Tstring, como ListBox, ComboBox ou Memo:
ReadSection(ConstSeo:String;ListaEntradas:TStrings);
A constante Seo determina a seo que ser lida. O parmetro ListaEntradas corresponde ao
objeto do tipo TString que armazenar as entradas (por exemplo, ListBox1.Items).
Atravs do mtodo ReadSectionValues, voc l todas as entradas e seus valores de uma seo do
arquivo .INI para um objeto da classe TString, como ListBox, ComboBox ou Memo:
ReadSectionValues(ConstSeo:String;ListaEntradas:TStrings);

36

A constante Seo determina a seo que ser lida. O parmetro ListaEntradas corresponde ao
objeto do tipo TString que armazenar as entradas (por exemplo, memo1.lines). Voc pode usar a
propriedade Values de uma string ou lista de strings para acessar uma string especfica na lista de string.
Para apagar uma seo inteira de uma arquivo .INI use o mtodo EraseSection.
A propriedade FileName contm o nome do arquivo .INI que est sendo manipulado pelo objeto
TIniFile.

Manipulao de Arquivos
Alguns comandos podem ser uteis para manipular o arquivo .INI :

6.1.1

GetDir

Retorna o diretrio corrente do drive especificado.


D pode assumir os seguintes valores:
0 - Default
1-A
2-B
3-C
Sintaxe:
GetDir(D: Byte; var S: String);

6.1.2

FileExists

A funo FileExist retorna True se o arquivo especificado existe.


Sintaxe:
FileExists(const FileName: string): Boolean;

6.1.3

DeleteFile

A funo DeleteFile apaga o arquivo especificado do disco. Se o arquivo no poder ser apagado ou no
existir retorna falso.
Sintaxe:
DeleteFile(const FileName: string): Boolean;

Criando HELP

37

7. Viso Geral
Inicialmente voc cria os tpicos do help em um arquivo texto, atravs de um editor de textos
convencional (word).
A parte, cria outro arquivo texto (HPJ) contendo informaes sobre o arquivo de Help para o
compilador.
Por fim, utiliza um programa especfico (HC31) para compilar o arquivo de Help, gerando o
arquivo de extenso .HLP.
O programa Win Help, gerenciador de Help do Windows, gerencia a visualizao do arquivo
.HLP.

Escrendo os tpicos
Para criar o arquivo Help, utilize um editor de textos que permita a gravao em um arquivo
RTF, como o Word.
Para escrever os tpicos do Help, abra um novo documento no editor de texto e:

Escreva o ttulo do tpico, voc pode formatar este ttulo para destacar do resto do texto;
Escreva o texto do tpico;
Crie uma crebra de pgina;
Escreva o novo tpico.

Inserindo notas de rodap

Voc precisa inserir em seus tpicos notas customizadas para que o Win Help possa identificar e
criar os quadros de diloga padro, como o quadro procura.
# : String de contexto, identifica o tpico. O usurio no a v, mas ser usada para links entre
tpicos.
$ : Ttulo. Aparece como ttulo do tpico da caixa Procura. Normalmente igual ao atributo do
tpico.
K : Palavras chaves. Aparecem na lista Procura. Voc pode escolher mais de uma palavra chave,
separando-as como o ponto e vrgula (;).
+ : Sequncia de folheamento. Determina a ordem dos tpicos quando o usurio folheia o help.
O identificador pode ser um membro (01) ou um nome de grupo seguido de um sinal de
dois pontos (:) e um membro (doc:01).

Adicionando um Hotspot ao tpico


Um hotspot uma palavra ou grfico que se clicado leva a um outro tpico.
Para criar um hotspot:
Digite o texto ou insira o grfico que voc quer que seja o hotspot;

Selecione o texto e aplique o formato duplo sublinhado a ele;


Imediatamente aps o texto ou grfico hotspot, digite a string de contexto do tpico do
destino;

Selecione a string de contexto, e aplique o fundo de texto oculto a ele.


Depois de compilado aparecer sublinhado, em verde.

Criando um hotspot para uma janela pop-up


Para criar um hotspot para um tpico do mesmo arquivo de help, mostrando este tpico em uma
janela pop-up.
Formate a palavra que ser o hotspot com um sublinhado simples;

Imediatamente aps esta palavra digite o nome da string de contexto que representa o tpico,
mudando seu formato para oculto.

Se for usar um tpico de outro arquivo de help:


Formate a palavra que ser o hotspot com sublinhado simples;
Imediatamente aps a palavra, digite o nome da string de contexto que representa o tpico,
mudando seu formato para oculto;

Digite um @;
38

Digite o nome do arquivo de help que contm o tpico a ser acessado.


Ex.: Criando um novo documentoCriarDoc@outrohlp.hlp
Escrevendo Arquivo de Projeto:
O arquivo de projeto um arquivo texto contendo informaes que o compilador de Help usa
para construir o arquivo de Help. O arquivo de projetopode incluir muitas instrues que controlam
aspectos do arquivo help.
Para escrever um arquivo de projeto para o Help:
Crie um arquivo texto. D a ele o mesmo nome que voc gostaria que fosse dado ao seu arquivo
de help compilado, acrescentando a extenso .HPJ.
Adicione as seguintes linhas ao aruqivo (existem outras sees alm das expostas abaixo).
[OPTIONS]
CONTENSTS=String_Contexto
TITLE=Ttulo
COMPRESS=Nvel_de_Compresso
ERRORLOG=Nome_do_arquivo_log
[CONFIG]
BrowseButtons()
[FILES]
NomeArquivoRTF_1
NomeArquivoRTF_2
NomeArquivoRTF_3
Onde:
String_Contexto: a string de contexto do tpico de contedos. Esta linha no requerida. Se
voc no inclui-la, o Winhelp usar o primeiro tpico do primeiro arquivo como tpico de contedos.
Ttulo: o nome que aparece na Barra de Ttulo da janela de Help. No coloque entre aspas.
Nvel_de_compresso: Determina quanto arquivo comprimido quando ele compilado. Esta
linha no requerida. Se voc a deixar em branco, compilar o arquivo sem compresso. Os valores
podem ser:
Valor
--------False
Medium
High

Compresso
-------------Sem compresso
Mdia compresso
Alta compresso

Nome_do_arquivo_log: o nome de um arquivo onde os erros ocorridos durante a compilao


s armazenados. A linha no requerida. Se voc no determinar o arquivo, os erros sero mostrados na
tela.
Se voc incluir a linha BrowseButtons() os botes >> (prximo) e << (anterior) so adicionados
barra de botes do Help. Esta linha no requerida.

7.1

39

Compilando o arquivo de Help:


H dois compiladores de Help para Windows 3.1:

HCP.EXE
HC31.EXE , HC31.ERR
Quando voc compilar o arquivo de Help os arquivos abaixo devem de preferncia estar no
mesmo diretrio:

Todos os RTF
O compilador de Help (HC31.EXE)
O arquivo de recursos contendo as mensagens de erro do compilador de Help (HC31.ERR)
O arquivo de projeto (.HPJ)
Qualquer Bitmap utilizado.

Para compilar o arquivo de Help no prompt do dos:


nome_do_compilador nome_arquivo_de_projeto

Inserindo grficos em um tpico:


Voc pode inserir grficos como si,mples ilustres, como um Hotspot ou como hipergrfico
(grfico contendo diversos hot spots).
Os bitmaps devem se encontrar no diretrio do arquivo de projeto.
No arquivo RTF deve ser inserido a seguinte referncia:
{bmcbitmap.bmp}ou
{bmlbitmap.bmp}

Criando um Hot Spot para uma janela secundria


Para criar um hot spot para um tpico mostrado em uma janela secundria:
Formate a palavra que ser o hot spot com um sublinhado duplo.

Imediatamente aps esta palavra, digite o nome da string do contexto que representa o tpico,
mudando seu formato para oculto.
Digite um >

Digite o nome da janela secundria


O nome, tamanho e posio da janela secundria precisam ser definidos na seo [WINDOWS]
do arquivo projeto do Help.
[WINDOWS]
nome_da_janela = "ttulo", (x, y, largura, altura), tamanho,
(clientRGB),(nonscrollRGB),(ftop)
Por exemplo:
[WINDOWS]
Jan1="Exemplo",(123,123,256,256),0,(0,255,255),(255,0,0)

7.2

40

Tornando o arquivo de Help sensvel ao contexto


Aps criar o arquivo de Help, voc pode utiliz-lo na sua aplicao em Delphi , ligando partes
de sua aplicao (como itens de menu, botes, etc...) a tpicos do arquivo de Help.
Para ligar o arquivo de Help a Aplicao:
Copie o HLP para o diretrio do Projeto

Entre na aplicao em Options/Project.


Na caixa HelpFile, entre com o nome do arquivo de Help (.HLP) que ser ligado a aplicao

O Delphi liga um componente a um tpico do Help atravs de um nmero de contexto. Este


nmero de contexto deve ser atribudo 'a string de contexto do tpico, na seo MAP do arquivo de
Porjeto. A seo [MAP] mapeia todos os nmeros de contexto, associando-os as strings de contexto
respectivas.
Por exemplo:
[MAP]
Abrir_doc001
Criar_doc002

Chamadas ao arquivo de Help


Chamar o tpico do contedo:
Application.helpcommand(help_contents,0)
Chamar um tpico especfico:
Application.helpcommand(help_contents,xx)
xx = ndice da string de contexto definido na seo [MAP] do arquivo de projeto do
Help.
Fechar o arquivo de Help:
Application.HelpCommand(help_quit,0);

Excees

41

8. A Estrutura TryFinallyEnd
Seu cdigo precisa garantir que, mesmo ocorrendo um erro, os recursos alocados sejam
desalocados. Entre estes recursos esto: arquivos, memria, recursos do Windows, objetos.
Para garantir a desalocao dos recursos, usamos a estrutura abaixo:
{Alocaosrecursos}
Try
{Comandosqueusamosrecursos}
Finally
{Liberaosrecursos}
end;
A aplicao sempre executar os comandos inseridos na parte Finally do bloco, mesmo que uma
execeo ocorra. Quando um erro ocorre no bloco protegido, o programa pula para a parte finally,
chamada de cdigo limpo, que executado. Mesmo que no ocorra um erro, estes comandos so
executados.
No cdigo a seguir, alocamos memria e geramos um erro, ao tentarmos uma diviso por 0.
Apesar do erro o programa libera a memria alocada:
ProcedureTForm1.Button1Click(Sender:TObject);
Var
Apointer:Pointer;
AnInteger,Adividend:Integer;
Begin
Adividend:=0;
GetMem(Apointer,1024);
Try
Aninteger:=10DivAdividend;
Finally
FreeMem(Apointer,1024);
End;
End;

A Estrutura TryExceptEnd
Um tratamento de exceo um cdigo que trata erros que ocorrem dentro de blocos protegidos.
Para definir um tratamento de exceo, utilize a seguinte construo:
Try
{Comandosquevocdesejaproteger}
Except
{Comandosdetratamentodeerros}
end;
A aplicao ir executar os comandos na parte except somente se ocorrer um erro. Se na parte
try voc chamar uma rotina que no trata erros, e um erro ocorrer, ao voltar para este bloco a parte except
ser executada. Uma vez que a aplicao localiza um tratamento para exceo ocorrida, os comandos so
executados, e o objeto exceo destrudo. A execuo continua at o fim do bloco.
Dentro da parte except definimos um cdigo a ser executado para manipular tipos especficos de
exceo. Por exemplo, o cdigo abaixo trata o erro de diviso por zero, atravs da exceo EDivByZero:
FunctionDiviso(Soma,Numero:Integer):Integer;
Begin
Try
Result:=SomadivNumero;
Except
onEDivByZerodoResult0;
End;
End;
42

A palavra reservada on define respostas para uma exceo. On est sempre junto de do, para
manipular a exceo.
Para ler informaes especficas sobre o erro ocorrido, voc usa uma variao da estrutura on
do, que prov uma varivel temporria que engloba a exceo. Nesse caso, voc poder criar seu prprio
quadro de mensagem contendo a string da mensagem da exceo:
Try
{Comandos}
Except
onE:EInvalidOperationdo
MessageDlg(gnorandoaexceo:+E.Message,
mtinformation,[mbOk],0);
End;
Onde a varivel temporria E do tipo EInvalidOperation.
Voc pode prover um tratamento padro de erro para tratar excees que no tem tratamentos
especificados. Para isto, adicione uma parte else na parte except do bloco:
Try
{Comandos}
Except
onEPrimeiroTipodo
{Cdigoespecificoparaoprimeirotipodeerro]
onESegundoTipodo

{Cdigoespecficoparaosegundotipodeerro}
Else
{Cdigopadrodetratamentodeerros}
End;
Alm disso, voc pode utilizar as excees genricas para tratar um erro, em vez de uma exceo
especfica. Por exemplo, se voc quer tratar um erro relacionado a uma operao com inteiros, mas no
sabe exatamente o erro, poder utilizar a exceo EIntError, que a exceo genrica da qual derivam
outras excees relacionadas a inteiros:
Try
{Comandos}
Except
onEIntErrordo
{Cdigodetratamentodeerros}
End;

Excees Silenciosas
Voc pode definir excees que no mostram um quadro de mensagem para o usurios quando
aparecem. So chamadas excees sileciosas.
O caminho mais curto para criar esta exceo atravs da procedure Abort. Esta procedure
automaticamente gera uma exceo do tipo EAbort, que abortar a operao sem mostrar uma mensagem.
O exemplo abaixo aborta a operao de incluso de itens em um ListBox quando tentamos
inserir o terceiro elemento:
Begin
Fori:=1to10do
begin

ListBox1.items.Add(IntToStr(i));
Ifi=3then
Abort;
end;
End;

43

Dicas

44

9. Criao de MDIChild
procedureTForm1.Teste1Click(Sender:TObject);
begin
ifformexiste(Form2)=falsethen
begin
Screen.Cursor:=CrHourGlass;{Cursorampulheta}
Form2:=TForm2.Create(Self);
end;
else
begin{Trazajanelaparafrente}
Form2.WindowState:=WsNormal;
Form2.BringToFront;
Form2.Setfocus;
end;
end;
Obs1.:
interface
uses{Declaraodaunitdaformasercriada}
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,
Controls,Forms,Dialogs,Menus,unit2,StdCtrls;
Obs2.:
public
{Publicdeclarations}
Form2:Tform2;{Declaraodajanelaasercriada}
end;

Obs3.:
{NaformFilhacriada}
procedureTForm2.FormCreate(Sender:TObject);
begin
Screen.Cursor:=CrDefault;{Cursornaformanormal}
end;
procedureTForm2.FormClose(Sender:TObject;varAction:TCloseAction);
begin
Action:=cafree;{Liberadamemriaajanela}
end;

Form Existe
FunctionTForm1.Formexiste(Nomejanela:TForm):boolean;
var
I:integer;
begin
Formexiste:=false;
fori:=0tocomponentcount1do
ifComponents[i]isTFormthen
ifTForm(Components[i])=nomejanelathen
Formexiste:=true
end;

45

Obs.:
public
{Publicdeclarations}
FunctionFormexiste(nomejanela:Tform):boolean;
end;

Criao ShowModal
procedureTForm1.Teste2Click(Sender:TObject);
begin
try
Application.CreateForm(TForm3,Form3);
Form3.showmodal;
Finally
Form3.free;
end;
end;
Obs.:
interface
uses{Declaraodaunitdaformasercriada}
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,
Controls,Forms,Dialogs,Menus,unit3,StdCtrls;

Fechar Todas
procedureTForm1.Teste31Click(Sender:TObject);
Var
I:Integer;
begin
forI:=MDIChildCount1downto0do
MDIChildren[I].close;
end;
Obs.: Pode ser utilizada para minimizar todas e maximizar todas.

Relgio e Teclado
procedureTForm1.Timer1Timer(Sender:TObject);
begin
{AtualizaahoradoRelgio}
label1.caption:=timetostr(now)+''+Datetostr(now)+'';
{AtualizaoPaineldeTeclas}
if(GetKeyState(vk_NumLock)and$01)<>0then
Label2.Caption:='Num'{TeclaNumLock}
else
Label2.Caption:='';
if(GetKeyState(vk_Capital)and$01)<>0then
Label3.Caption:='Cap'{TeclaCapsLock}
else
Label3.Caption:='';
if(GetKeyState(vk_Insert)and$01)<>0then
Label4.Caption:='Ins'{TeclaInsert}
else
Label4.Caption:='';
end;

9.1

46

Informaes Sistema
procedureTForm2.FormCreate(Sender:TObject);
type
FlagSet=setof120..135;
var
Flgs:FlagSet;
L:Longint;
s:String;
begin
image1.picture.graphic:=application.icon;
titulo.caption:=application.title;
L:=GetVersion;
windows.caption:=Format('Windows%u.%.2u',[Lobyte(loword(L)),
Hibyte(loword(L))]);
dos.caption:=Format('DOS%u.%.2u',[Hibyte(Hiword(L)),
Lobyte(HIword(L))]);
L:=GetWinFlags;
IfLandWF_Enhanced=0then
modo.caption:='ModoStandard';
IfLandWF_80x87=0then
coprocessador.caption:='Ausente';
memoria.caption:=FormatFloat('#######',MemAvailDIV1024)+'KB
Livres';
{Processador}
l:=GetWinFlags;
Flgs:=FlagSet(Word(l));
s:='unknown';
if121inFlgsthen
s:='286';
if122inFlgsthen
s:='386';
if123inFlgsthen
s:='486ouPentium';
Processador.Caption:=s;
{GDIRecursos}
l:=GetFreeSystemResources(gfsr_GDIResources);
gauge1.progress:=l;
{UserRecursos}
l:=GetFreeSystemResources(gfsr_UserResources);
gauge2.progress:=l;
{EspaoDisco}
l:=(DiskFree(0)div10240)div(DiskSize(0)div1024000);
Label18.Caption:=IntToStr(DiskFree(0)div1024000)+
+'MB';
gauge3.progress:=l;
end;
Referncia
47

http://www.samnet.com.br/inforsite

48