Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila de Delphi PDF
Apostila de Delphi PDF
5
assim. Nosso programa no controla o fluxo de processamento, ele responde e
trata eventos que ocorrem no sistema. Existem muitos eventos que podem
ocorrer, sendo que os principais so aqueles gerados pelo usurio atravs do
mouse e do teclado. A coisa acontece mais ou menos assim: O usurio clica o
mouse e o Windows verifica que aplicao estava debaixo do mouse no
momento em que foi clicado. Em seguida ele manda uma mensagem para a
aplicao informando que ocorreu um clique e as coordenadas do cursor do
mouse na tela no momento do clique. A aplicao ento responde mensagem
executando uma funo de acordo com a posio do mouse na tela. claro
que o Delphi toma conta do servio mais pesado e facilita muito as coisas para
o programador. Detalhes como as coordenadas da tela em que ocorreu o
clique, embora estejam disponveis, dificilmente so necessrios nos
programas. Isso, como veremos, afeta radicalmente o estilo de programao e
a forma de pensar no programa. A seqncia de execuo do programa
depende da seqncia de eventos.
6
InterBase 6.0 Server: Servidor de Banco de Dados SGDB da Borland,
pode ser instalado tanto em Windows NT/2000/XP quanto no Windows
95/98/Me. Existem tambm verses para Novell, Solaris e Linux;
InterBase 6.0 Desktop Edition: Cliente do InterBase Server, incluindo
drivers e ferramentas de manipulao do banco;
Remote Debugger Server: Permite depurar um programa que est
sendo executado em outra mquina.
Conhecendo o Delphi 6
7
Quando ativamos o Delphi, a tela inicial parecida com a acima. Os itens que
voc est vendo formam o que chamamos de IDE, com um projeto novo
aberto. Na janela superior, temos a barra do menu principal do Delphi,
esquerda a SpeedBar, com as opes mais comuns e direita a paleta de
componentes. Estes componentes formam a base da programao visual e
onde o designer vai buscar recursos para criar sua aplicao.
A seguir, vamos analisar as ferramentas que compe o ambiente de
desenvolvimento e os arquivos que constituem um projeto.
Janela Principal
SpeedBar
8
Remove file to Project. Remove um arquivo do projeto. O arquivo no
ser removido do disco, apenas deixar de fazer parte projeto.
Equivalente ao menu Project | Remove from Project.
Help Contents. Aciona o Help do Delphi. Equivalente ao menu Help |
Delphi Help.
View Unit. Permite escolher uma Unit do projeto para ser exibida.
Equivalente ao menu View | Units ou as teclas Ctrl+F12.
View Form. Permite escolher um Form do projeto para ser exibido.
Equivalente ao menu View | Forms ou as teclas Shift+F12.
Toggle Form/Unit. Permite alternar entre um formulrio e seu
respectivo cdigo fonte. Equivalene ao menu View | Toggle Form/Unit ou
a tecla de funo F11.
New Form. Adiciona um novo formulrio ao projeto. Equivalente ao
menu File | New Form.
Run. Executa a aplicao, compilando-a se necessrio. Equivalente ao
menu Run | Run ou a tecla de funo F9.
Pause. Suspende a execuo do programa. Equivalente ao menu Run |
Pause Program.
Trace Into. Executa o programa passo a passo, linha a linha, dentro da
rotina que for invocado e dentro de todas as rotinas que forem
acessadas posteriormente. Equivalente ao menu Run | Trace Into ou a
tecla de funo F7.
Step Over. Semelhante ao Trace Into, porm a execuo passo a passo
ocorrer somente dentro da rotina em que for invocado. Equivalente ao
menu Run | Step Over ou a tecla de funo F8.
9
Standard: componentes padro da interface do Windows, usados para barras
de menu, exibio de texto, edio de texto, seleo de opes, iniciar aes
de programa, exibir listas de itens etc. Geralmente so os mais usados.
10
para acesso a dados e fazer um acesso muito mais rpido e leve. A
configurao e instalao tambm so mais simples que a do BDE. Atualmente
existem drivers para Oracle, DB/2, Interbase e MySQL entre outros. No existe
suporte para bancos de dados Desktop, assim, no permite acesso a dBase,
Paradox ou Access para estes voc dever continuar a utilizar o BDE.
11
que o Interbase disponibiliza. A desvantagem, no entanto que ao utiliza-los
perde-se a possibilidade de alterar o banco de dados sem mudar o programa,
visto que os mesmos se destinam apenas ao Interbase.
12
Qreport: QuickReport um gerador de relatrios que acompanha o Delphi e se
integra totalmente ao mesmo, sem a necessidade de run-time ou ferramentas
externas como o Cristal Report, etc. Estes componentes permitem a criao de
diversos tipos de relatrios de forma visual e tambm a criao de preview
personalizado.
Win 3.1: esta guia contm controles considerados obsoletos, que esto
disponveis apenas para compatibilidade com programas antigos. No crie
programas novos que utilizem esses controles.
13
COM+: catlogo de objetos COM (Component Object Model), tecnologia
desenvolvida pela Microsoft que possibilita a comunicao entre clientes e
aplicaes servidores. Uma interface COM a maneira como um objeto expe
sua funcionalidade ao meio externo.
Indy Misc: componentes complementares aos das guias Indy Clients e Indy
Servers, para criao de aplicativos clientes e servidores com acesso a
internet, como clientes de ftp, irc e browsers.
14
Cada aplicativo criado em Delphi chamado de projeto e pode ser formado por
um ou mais formulrios (Janelas), ou ainda em casos especiais no possurem
janela alguma (Console Application).
sobre estes formulrios que sero colocados os componentes para a criao
da interface do aplicativo.
15
A Unit est intimamente ligada ao formulrio, chamado Form: quando se
adiciona um componente ao Form, o Delphi inclui na Unit deste Form o cdigo
referente incluso do mesmo, ou seja, uma mudana no lado visual resulta
em uma alterao automtica no cdigo. A Borland, empresa que fez o Delphi,
denominou isso de Two-Way-Tool (ferramenta de duas vias).
Na mesma janela do editor de cdigo pode ser acessada a guia Diagram que
permite documentar o relacionamento entre os componentes, alm de
modificar algumas caractersticas destas relaoes. Inicialmente ela est vazia,
para incluir os componentes, voc deve arrast-los do Object TreeView e solta-
los sobre o diagrama.
Object TreeView
16
O Delphi 6 introduziu uma nova janela, o Object TreeView, que mostra o
relacionamento entre os componentes que so colocados no Form. Como
veremos adiante, existem componentes que funcionam como recipientes, ou
seja, podem conter outros componentes dentro de si. O Object TreeView
permite a visualizao destes relacionamentos e o acesso rpido a estes
objetos.
Objeto
atualmente
selecionado.
17
A alterao o valor de uma propriedade depende de seu tipo, para textos e
nmeros basta apenas digita-los no quadro correspondente (em frente ao
nome da propriedade). Caso o mesmo seja formado por uma lista, ser
fornecido um combobox com os valores possveis neste mesmo local.
Se existir um sinal de adio esquerda do nome da propriedade, isto indica
que a mesma possui subpropriedades, para acessa-las clique no sinal de
adio que as mesmas sero exibidas. Algumas propriedades possuem um
editor de propriedade, nestes casos fornecido um boto com reticncias.
Clicando-se neste boto a tela de edio da propriedade deve ser exibida.
18
codificado, mas o mesmo no ocorre durante a execuo do aplicativo seu
cdigo no executado.
Em alguns casos podemos ter uma Unit sem Form, um exemplo seria uma Unit
com funes para serem utilizadas por toda a aplicao (em vrios Forms),
mas todo Form obrigatoriamente deve possuir sua Unit correspondente.
Project1
(arquivo de projeto)
extenso .DPR
(Delphi PRoject)
Unit1 Unit2
19
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
20
O prximo item a definio de variveis e constantes globais, atravs
da palavra reservada var. Neste ponto criada uma varivel com
visibilidade global (pode ser vista em outras units nas quais a mesma
seja includa na clusula uses)
A palavra chave implementation delimita a segunda seo da unit,
onde sero colocadas as funes e variveis que sero acessadas
apenas por ela mesma (no so visveis em outras units).
O smbolo {$R *.dfm} faz a associao da unit com seu respectivo form
e no deve ser modificado. Uma unit de funes no possui esta
diretiva.
Ao Final da Unit, temos uma linha com end. Ele o marcador de final de
arquivo. Qualquer coisa colocada aps esta linha ser ignorada.
Opcionalmente, uma unit pode ter ainda duas sees: initialization e
finalization, com comandos que so executados quando a aplicao
iniciada ou finalizada.
21
Se voc acompanhou tudo at aqui, seu Form deve estar semelhante a figura a
seguir:
Agora vamos aprender a salvar nosso projeto. Para isso v ao menu File e
escolha a opo Save All, ou ainda clique no boto Save All do SpeedBar.
Voc tambm pode utilizar o atalho de teclado Shift + Ctrl +S.
Ser apresentada uma caixa de dilogo com o ttulo Save Unit1 As, o Unit
do ttulo indica que estamos salvando o Form (a Unit do mesmo). Observe no
item Salvar em qual o local onde ser salvo o projeto e modifique se necessrio
ou ento crie uma pasta para o mesmo. Em Nome do arquivo digite
Principal.pas e pressione Enter (ou clique no boto Salvar).
Uma nova caixa de dilogo ser apresentada, desta vez com o ttulo Save
Project1 As. No item Nome do arquivo digite AloMundo.dpr.
22
Os arquivos principais so os .dpr, .pas e .dfm, os demais caso no sejam
encontrados sero recriados com as opes padro.
V ao editor de cdigo e observe que na primeira linha onde estava escrito unit
Unit1; agora se encontra unit Principal; o nome que atribumos ao formulrio
quando o salvamos.
Se voc observar novamente a pasta onde os arquivos foram salvos ver que
dois novos arquivos foram criados:
Principal.dcu: a Unit e o Form compilados, dcu significa Delphi Compiled
Unit. A unio de todos os .dcu de um projeto juntamente com outras
Units internas do Delphi iro formar o arquivo executvel .exe.
AloMundo.exe: o aplicativo independente (executvel que roda sem o
Delphi), criado com o mesmo nome dado ao projeto.
Este foi um captulo extenso, no qual procuramos exibir algumas das principais
caractersticas e recursos Delphi, para lhe dar uma viso geral do que esta
fantstica ferramenta de desenvolvimento capaz de fazer.
23
Exerccios
1) O que Delphi?
2) O que IDE? Quais os itens que a compe?
3) Para que serve o Object Inspector?
4) Quais so os principais arquivos de um projeto?
5) O que um evento?
24
Captulo 2
Embora no seja objetivo deste curso ensinar POO, uma breve introduo
necessria, j que o Delphi essencialmente orientado a objeto.
De maneira prtica, podemos pensar no objeto sendo uma estrutura que
agrupa dados e funes para manipular estes dados. Como as funes so
sempre intimamente ligadas aos dados, o sistema todo funciona de maneira
mais segura e confivel. Alm disso, a POO utiliza conceitos como
encapsulamento e herana que facilitam muito a programao e manuteno
dos programas.
Os dados de um objeto costumam ser chamados de variveis de instncia e as
funes de mtodos. As variveis de instncia definem as propriedades
(tambm chamadas de atributos) do objeto e os mtodos definem o seu
comportamento.
25
Para programar no nvel do designer no necessrio um conhecimento
profundo de POO. Mas preciso conhecer pelo menos a sintaxe. Todas as
aplicaes para Windows precisam de pelo menos uma janela, que no Delphi
chamada de Form. Cada form (assim como todos os objetos visuais) tem um
objeto associado a ele e sua representao visual, que vemos na tela. Todos
os componentes que inclumos no form passam a fazer parte do objeto que
define o form. Exemplo: Se colocarmos um boto no form, a classe deste form
ser modificada para incluir este boto. Os eventos e mtodos deste form,
tambm esto na classe. Assim, supondo que o form se chame Form1 (nome
default), por exemplo, para desativar o boto que inclumos (de nome Buttom1)
escreveramos:
Form1.Buttom1.Enabled := false;
Note como o Buttom1 faz parte da estrutura que define o form. Mas se
quisermos ativar mtodo RePaint (Repintar) do form faramos:
Form1.Repaint;
Veja que Repaint, no uma varivel, tecnicamente uma procedure
(mtodo), mas fazemos referncia a ela como parte da estrutura Form1. Isso
pode parecer confuso no incio, mas facilita muito a programao.
Propriedades Bsicas
26
renomearmos um boto de Button1 para ButtonIncluir, o Delphi atualizar o
cabealho da unit, o nome dos eventos de Button1, mas voc ter que atualizar
todas as referncias que voc fez ao Button1 em seu cdigo com o novo nome.
Alis, esta uma regra geral no Delphi: ele nunca modifica automaticamente o
cdigo gerado pelo programador, mesmo que esteja em comentrio. E por
segurana, voc deve fazer o mesmo, no modifique o cdigo gerado por ele, a
no ser que saiba exatamente o que est fazendo, poder inutilizar seu form,
em alguns casos tendo problemas at para salva-lo.
Font: Permite selecionar a fonte, o tamanho, o estilo e a cor da fonte que ser
usada para escrever o texto no componente.
Color: Cor do componente. Existe uma lista de cores padro usadas pelo
Windows e pelo Delphi, mas possvel definir qualquer cor atravs de seus
componentes RGB.
Hint: (Dica) Este um recurso muito til e fcil de usar. Permite que aparea
um texto de ajuda quando o usurio posiciona o cursor do mouse sobre um
componente. Todos os componentes podem ter Hint. Na propriedade Hint,
voce deve digitar a frase que deve aparecer. Veja a propriedade abaixo.
Eventos bsicos
27
OnKeyPress: Gerado quando o usurio pressiona (e libera) uma tecla no
teclado.
Mtodos Bsicos
Refresh: Tem o mesmo efeito que o Repaint, mas antes de desenhar, apaga o
componente. Quando aplicado em componentes de acesso a dados, faz com
que o buffer do arquivo seja recarregado.
28
dados, os comandos de Object Pascal e toda teoria necessria criao de
aplicativos em Delphi.
Para comear vamos dar uma boa olhada no DER (Diagrama Entidade-
Relacionamento) da figura abaixo. Temos o cadastro de clientes que armazena
dados sobre os clientes. Da mesma maneira, o cadastro de produtos. Para o
cadastro de pedidos, existe um problema: Se o Pedido relacionar diretamente o
Cliente com o Produto, teremos uma relao de M para M (Muitos para Muitos),
por que um cliente pode pedir muitos produtos e um produto pode fazer parte
de muitos pedidos. Procuramos sempre evitar esse tipo de relao, ento
inclumos mais uma relao: o Item de Pedido. Relacionando Pedidos com
Produtos atravs de Itens de Pedido, ficamos apenas com relaes de 1 para
M. Um pedido pode ter muitos itens, mas um item s pode fazer parte de um
pedido. Da mesma maneira, um produto pode fazer parte de muitos itens, mas
um item s pode ter um produto associado.
Agora, precisamos decidir qual ser nosso banco de dados e qual a engine que
utilizaremos: BDE, dbGO (ADO), IBX (Interbase Express) ou dbExpress.
Optamos por utilizar o BDE pois o mesmo se encontra disponvel em todas as
verses do Delphi. Utilizaremos uma base de dados Desktop, o Paradox, que
para nossos propsitos ser mais que suficiente.
29
na base de dados aumenta rapidamente conforme vamos implementando
novos cadastros. Por esse motivo, no aconselhvel deixar a base de dados
no mesmo diretrio que os programas fontes. Recomendo que debaixo do
diretrio que voc criou para o projeto, crie um subdiretrio chamado Dados ou
DB. nesse diretrio que voc dever criar sua base de dados.
Abra o Windows Explorer e crie no drive C: (ou onde achar mais adequado)
uma pasta para seu projeto. Por exemplo, criamos uma pasta chamada
Pedidos, e dentro desta uma outra chamada Dados. A estrutura de diretrios
ficou assim:
Quando o Delphi precisa acessar um banco de dados, ele o faz atravs dos servios
do Borland Database Engine (BDE). O BDE funciona da mesma maneira para ler
dados armazenados localmente em arquivos DB (Paradox) e DBF (dBase/FoxPro),
bem como para os mais sofisticados sistemas client/server.
Muitos anos atrs, a Borland percebeu um problema com o acesso a banco de dados
em seus softwares. Eles produziram vrios produtos que eram usados para acesso a
bancos de dados, mas cada um tinha um mtodo diferente para conectar-se e utilizar
os dados. A Borland percebeu que uma abordagem de conectividade de banco de
dados unificada forneceria muitas vantagens. Ento decidiram criar um novo software
que deveria abstrair toda a funcionalidade de um banco de dados dentro de um
engine.
30
H vrios anos atrs, a Borland vendia um Paradox engine para programadores. Era
composto pela parte de acesso do DBMS Paradox e foi desenvolvido para ser usado
em programas que precisavam ler e gravar informaes em tabelas Paradox (.DB). O
BDE substituiu este engine, mas adicionou funcionalidade para conexo com outros
tipos de bancos de dados. O BDE tambm est disponvel separadamente do Delphi,
caso voc precise de uma performance slida em um ambiente de desenvolvimento
que no seja da Borland.
Ter todas as aes mais comuns de banco de dados dentro de um pedao de software
produz muitos efeitos positivos. Um nico conjunto de drivers permite a melhoria de
um driver em particular sem ter que reivindicar a roda cada vez que um novo pacote
tem acesso a um banco de dados. Isto significada que o acesso banco de dados
pode ser atualizado sem ter que atualizar um pacote de software inteiro. Se voc
instalar uma nova verso do BDE em um sistema com uma verso antiga do Paradox
pode imediatamente beneficiar-se dos novos drivers.
Por ltimo e, contudo mais importante, usar um mtodo de acesso banco de dados
comum garante que o cdigo para acessar um tipo particular de banco de dados seja
escrito apenas uma vez.
Este captulo se concentrar em lhe dar uma introduo aos recursos e capacidades
do BDE.
Quando o Delphi instalado, ele cria um cone ou atalho para o utilitrio BDE
Administrador. (Abaixo temos o BDE Administrator rodando no Windows XP).
31
Ele pode ser acessado pelo menu do Windows em Programas | Borland
Delphi 6 | BDE Administrator.
O Delphi 6 coloca todos os executveis e arquivos de configurao no diretrio
Arquivos de programas\Arquivos comuns\Borland Shared\BDE. No Delphi 1 estes
arquivos eram colocados em um diretrio chamado IDAPI, nomeado depois de
utilitrio de configurao antigo. IDAPI significa Independent Database Application
Programmer Interface, e d este nome para muitos dos arquivos e diretrios no
sistema. O BDEAdmin atua como sua interface para o BDE. O utilitrio permite que
voc mude muitos aspectos de como o BDE trabalha. O BDE armazena suas
informaes de configuraes no Registry do Windows. Depois que voc mudar suas
definies no utilitrio BDE Administrator, voc dever gravar suas definies
selecionando Object | Apply ou dando um clique sobre o boto Apply.
Pgina Database
Quando Wayne Radcliff projetou a estrutura de arquivo do dBASE nos tempos dos
PCs-Compatveis, ele usou a extenso DBF (Database File) para descrever isso. Este
um termo errado porque banco de dados significa uma coisa especfica que no se
aplica a arquivos DBF.
Cada arquivo DBF possui uma tabela, uma coleo ordenada de dados. Uma tabela
divide informaes entre colunas conhecidas como campos e linhas (Fields and
Rows), que relacionados formam um registro. Esse termo Banco de Dados
geralmente denomina a coleo de tabelas que se relacionam a outras no mesmo
caminho. Exceto para aplicaes simples, o banco de dados consiste em mltiplas
tabelas relacionadas e cada tabela contm vrios registros e campos.
32
Agora que voc entendeu que um banco de dados composto por um conjunto de
tabelas relacionadas, ns precisamos observar como implementar esse conjunto.
Servidores de banco de dados como Interbase, SyBase e Oracle tm uma estrutura de
banco de dados que pode ser composta por mltiplas tabelas. Desenvolvedores de
banco de dados muitas vezes precisam utilizar esse tipo de estrutura, mas em
ambientes sem servidores geralmente falta um mecanismo para linkar mltiplas
tabelas. Voc pode criar seu prprio formato de banco de dados para conter todas as
suas tabelas, mas depois voc perder a compatibilidade com outros programas que
utilizam banco de dados mais antigos.
O BDE possui uma soluo avanada para esse problema. Colocado um grupo de
tabelas relacionadas em uma mesma pasta, voc pode associar essas tabelas juntas
usando o BDE. Basta dar um alias, ou nome ao banco de dados, para que o grupo de
arquivos em uma pasta particular se torne um conjunto de tabelas logicamente
ligadas. O BDE chama um conjunto como este de Pseudo Database. Um Pseudo-
Database no possui caractersticas avanadas como encontramos em um Database
Server, como preservar integridade referencial. De qualquer modo ele permite a voc
utilizar o nome do banco de dados como ponteiro para o local de seus dados.
Vamos criar um novo alias, para nosso projeto. Comece selecionando Object | New
no menu principal.
Voc ser questionado a selecionar um tipo de driver na caixa de dilogo New
Database Alias.
33
Voc precisa tambm definir a localizao das tabelas no campo PATH. Defina
o caminho utilizado na criao da pasta do projeto: C:\Pedidos\Dados.
Certifique-se de gravar a configurao, clicando no boto Apply ou indo ao
menu Object | Apply. Tambm possvel utilizar o atalho de teclado Ctrl+A.
Agora quando voc precisar pegar dados em uma tabela, voc pode usar o
alias ao invs do nome diretrio.
Voc dever, sempre que criar uma nova tabela de banco de dados ou acessar
uma antiga, tentar referenciar-se a ela pelo alias ao invs do path.
34
Selecione o menu File| New | Table, ser exibida a caixa de dilogo Create
Table. Na caixa de combinao Table type est uma lista com os tipos de
arquivos disponveis. O tipo padro, Paradox 7 vem selecionado.
Como utilizaremos este tipo mesmo, simplesmente clique no boto OK. Ser
exibida a caixa de dilogo Create Paradox 7 Table.
1
Chave primria o nome do ndice que ser utilizado para identificar exclusivamente um registro de
uma tabela em nosso banco de dados, bem como classific-la inicialmente.
35
O nome no pode iniciar com espaos em branco, mas pode conter espaos
(exceto no final). No entanto, no uma prtica muito interessante, pois isto
limitaria a maneira de se acessar a informao mais diretamente, pois o nome
do campo no seria um identificador vlido em Object Pascal, assim, uma
boa prtica no utilizar espaos no nome dos campos.
Caracteres especiais no devem ser utilizados como parte do nome, apenas
letras, nmeros e o caractere de sublinhado. Portanto no acentue as palavras.
(Use Codigo e no Cdigo).
Segue abaixo, uma tabela com a relao dos tipos e tamanhos dos campos em
Paradox:
36
Smbolo Tamanho Tipo
comparada com os outros tipos numricos. Usado para
compatibilidade com outros aplicativos que utilizem este
tipo de campo. (O tamanho representa o nmero de
dgitos aps o ponto decimal)
Date - Armazena qualquer data no intervalo de 1 de
D Automtico janeiro de 9999 AC at 1 de janeiro de 9999 DC.
37
Smbolo Tamanho Tipo
Normalmente usado para criar um campo de numerao
automtica como um cdigo de cliente, por exemplo. A
excluso de registros no faz com que esta numerao
recomece ou retroceda. E um nmero excludo jamais
ser inserido novamente, o valor ser sempre crescente.
Binary - Utilizado para armazenar informaes que no
devem ser interpretadas, devem ser armazenadas em
B 0 - 240 modo binrio. A utilizao mais comum o
armazenamento de som. Assim como campos Graphic,
seu tamanho no precisa ser obrigatoriamente ser
definido, pois a informao ser armazenada em um
arquivo .MB.
Bytes - Armazena informaes que no devem ser
Y 1 - 255 interpretadas, devem ser armazenadas em modo binrio.
A utilizao mais comum o armazenamento de cdigos
de barra e magnetic strips de cartes. Diferente dos
campos Binary, a informao armazenada na tabela
Paradox para um acesso mais rpido. (Tamanho mximo
de 255 bytes)
38
N Nome do Campo Tipo Tamanho Chave
18 Ativo L
ndices Secundrios:
N Nome Campos / Expresso de classificao
1 IRazaoSocial RazaoSocial
2 ICidadeUF Cidade e UF
39
Vamos iniciar criando passo a passo a primeira tabela, Clientes. Digite em Field
Name o nome do primeiro campo, CODIGO, na coluna Type digite +, para criar
um campo autoincrement e na coluna Key d um duplo clique ou pressione
uma tecla para marcar este campo como sendo campo chave. Proceda da
mesma forma para os campos seguintes (observe que na definio da tabela
apenas o primeiro campo campo chave, ento no marque os demais).
Aps digitar os campos sua tela deve ficar semelhante a esta:
40
Clique no boto Define e uma nova caixa de dilogo ser aberta:
41
Clique no boto Save As para salvar nossa tabela. Na caixa de dilogo Save
Table As selecione no combo Alias o alias que criamos para nosso banco de
dados (Pedidos). Note que ao selecionar o alias, a combo Salvar indica a
Pasta Dados, para onde ns definimos o path do mesmo.
Em nome do arquivo, digite o nome que ser dado a tabela, neste caso
Clientes.db (ou apenas Clientes, pois a extenso ser adicionada
automaticamente de acordo com o tipo de arquivo sendo criado).
Bem, com isso criamos nossa primeira tabela. Utilize o mesmo procedimento
para a criao das outras trs, observando para selecionar os campos
marcados como chave.
Antes de voc criar as tabelas restantes, vamos a uma dica: Para que voc no
precise selecionar o alias toda vez que for gravar uma nova tabela que criar ou
ao abri-la para modificao, podemos informar ao Database Desktop que
estaremos trabalhando com um alias em particular, tornando-o o alias padro.
Para isso v ao menu File | Working directory e selecione o alias Pedidos
clicando em seguida no boto OK.
42
Est feito, d prxima vez que for salvar a tabela, o nosso alias j estar
selecionado.
Crie as tabelas restantes, pois necessitaremos delas nas prximas aulas, onde
estaremos iniciando a criao do nosso aplicativo.
Exerccios
43
Captulo 3
Criando o Menu
44
Clique no retngulo, selecione a propriedade Caption e digite C&adastros.
Repita a operao e coloque mais um tem para A&juda.
Neste ponto j temos o que num sistema DOS chamaramos de menu principal.
As opes que aparecem horizontalmente na barra de menu, normalmente
ativam sub-menus que oferecem mais opes, e estas eventualmente podem
abrir mais sub-menus, num leque que pode crescer bastante, se necessrio.
(Embora seja prudente no estender em excesso esta estrutura, pois tornaria o
sistema complexo para o usurio final).
Para criar um sub-menu do menu principal, basta clicar na opo desejada e
utilizar o retngulo que aparece abaixo da opo. Crie agora os seguintes sub-
menus:
Para Arquivo: &Sair
Para Cadastro: &Clientes, &Produtos e P&edidos
Para Ajuda: &Sobre o sistema...
Observe que quando escolhemos as letras a que funcionaro como atalho para
as opes do menu atravs de ALT + <letra escolhida>. As letras no precisam
ser necessariamente a primeira letra da palavra. Tambm preciso tomar
cuidado para escolher letras diferentes para cada opo no mesmo nvel. Um
exemplo o sub-menu Pedido dentro do menu Cadastro, se no tivssemos
escolhido a primeira letra teramos dois itens com o mesmo atalho.
45
a leitura do cdigo fonte. Para fixar melhor este hbito, renomeie tambm as
opes de Listagem.
Agora j podemos fechar o editor de menus, clicando no boto fechar na
barra de ttulo da janela.
Falta agora criar o cdigo para cada opo do menu. A maioria das opes
deixaremos para codificar mais adiante, de imediato vamos apenas codificar a
opo de sada do sistema. J com o editor de menus fechado, selecione a
opo Arquivo/Sair no prprio form da aplicao. O editor de cdigo ser
ativado. Na rea onde o cursor aparece piscando escreva Close; Este mtodo
ser responsvel por fechar este Form, como estamos no formulrio principal a
aplicao toda ser fechada.
O cdigo do programa ficar assim:
type
TFormPrincipal = class(TForm)
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
Cadastros1: TMenuItem;
Ajuda1: TMenuItem;
Sair1: TMenuItem;
Clientes1: TMenuItem;
Produtos1: TMenuItem;
Pedidos1: TMenuItem;
mnuCadCli: TMenuItem;
mnuListCli: TMenuItem;
mnuCadProd: TMenuItem;
mnuListProd: TMenuItem;
mnuCadPed: TMenuItem;
46
mnuImpPed: TMenuItem;
mnuListPed: TMenuItem;
procedure Sair1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormPrincipal: TFormPrincipal;
Salvando o Projeto
47
J em um aplicativo MDI temos um formulrio principal (Pai), que contm todos
os demais formulrios (filhos). Assim, se voc minimizar o principal, todos os
filhos so minimizados com ele. Apenas um boto exibido na barra de tarefas
e os formulrios filhos tambm no podem ser arrastados para fora da rea do
formulrio Pai.
Optamos por trabalhar com um formulrio MDI para criar uma interface prxima
da qual a maior parte dos usurios do Windows j esto acostumados ao
utilizarem editores de texto como o Microsoft Word que trabalham desta forma.
(Obs: A partir da verso 2000 do Office o Word deixou de ser um aplicativo
puramente MDI, pois se abrirmos dois documentos o mesmo exibe dois botes
na barra de tarefas do Windows).
48
Propriedade Contedo
AliasName Pedidos
DatabaseName DBPedidos
Name DatabasePedidos
Propriedade Contedo
Name FormClientes
Caption Cadastro de Clientes
FormStyle fsMDIChild
Position poMainFormCenter
49
poScreenCenter: O Form ser exibido no centro da tela virtual, caso se
utilize dois monitores o mesmo aparecer centralizado na rea definida
pelos dois, ficando assim metade do form em cada monitor.
poDesktopCenter: O Form ser centralizado considerando-se apenas a
rea de trabalho do monitor, caso se utilize dois monitores ele no
considerar o segundo.
poMainFormCenter: aparece no centro de um Form MDI (pai), utilizada
para formulrios com FormStyle igual a fsMDIChild.
poOwnerFormCenter: Mantm o tamanho definido no projeto, mas
centraliza o Form no centro do formulrio definido na propriedade
Owner. Caso a mesma no seja definida o resultado ser o mesmo de
poMainFormCenter.
Propriedade Contedo
Align alBottom
Caption Apague o contedo deixando em branco
Name PanelBotoes
Propriedade Contedo
Align AlClient
Name ScrollBoxDados
50
Propriedade Contedo
DatabaseName DBPedidos
Name TableClientes
Table Clientes.db
51
Agora volte ao primeiro campo da lista, segure a tecla Shift e utilizando a seta
para baixo selecione at Fantasia. Agora arraste os campos selecionados para
o Form, na rea definida pelo ScrollDados. Voc deve obter algo assim:
Para o campo tipo, vamos usar um outro tipo de controle, ento iremos inseri-lo
manualmente. V at a guia Data Controls, selecione o componente
DBRadioGroup e coloque-o no Form. Defina as seguintes propriedades:
Propriedade Contedo
Caption Tipo
Columns 2
DataField Tipo
DataSource DataSourceClientes
Height 38
Items Pessoa Fsica
Pessoa Jurdica
Name DBRadioGroupTipo
Values F
J
Width 208
52
As propriedades Items e Values definem respectivamente os textos que sero
exibidos no objeto DBRadioGroup e quais os valores sero gravados na tabela.
Estas propriedades possuem um editor (boto com reticncias), para defini-las
clique no boto e informe os textos um em cada linha, como no exemplo
abaixo:
Propriedade Contedo
53
DataField Obs
DataSource DataSourceClientes
Name DBRichEditObs
Propriedade Contedo
Caption Cliente Ativo
DataField Ativo
DataSource DataSourceClientes
Name DBCheckBoxAtivo
Campo Name
Cdigo DBEditCodigo
RazaoSocial DBEditRazaoSocial
Fantasia DBEditFantasia
CGC_CPF DBEditCGC_CPF
Insc_RG DBEditInsc_RG
Endereo DBEditEndereco
Bairro DBEditBairro
Cidade DBEditCidade
UF DBEditUF
CEP DBEditCEP
Telefone DBEditTelefone
Fax DBEditFax
Email DBEditemail
HomePage DBEditHomePage
Cadastro DBEditCadastro
54
dilogo Edit Tab Order, que lhe permitir ordenar os objetos na seqncia
correta.
Propriedade Contedo
DataSource DataSourceClientes
Flat True
Hints Primeiro Registro
Registro Anterior
Prximo Registro
ltimo Registro
Incluir Registro
Excluir Registro
Alterar Registro
Gravar Incluso/Alterao
Cancelar Incluso/Alterao
Reexibir os Dados
Name DBNavigatorClientes
55
Por ltimo, incluiremos um boto do tipo BitBtn, que se encontra na guia
Additional. Insira-o tambm no PanelBotoes, no canto Direito e defina as
propriedade assim:
Propriedade Contedo
Kind bkClose
Caption &Fechar
Name BitBtnFechar
56
Tambm precisamos informar que vamos utilizar o FormClientes dentro do
FormPrincipal, para isso v ao menu File | Use Unit. E selecione Clientes na
lista de Units. (Caso voc no faa este procedimento, o Delphi ir verificar
que voc est tentando utilizar este Form e ir questiona-lo se ele deve incluir a
informao de que voc vai utiliza-lo. Na verdade este procedimento insere o
nome da Unit na clusula uses da seo implementation da unit do form
sobre o voc chamou a opo Use Unit).
57
Application.CreateForm(TFormClientes,FormClientes); // cria o form
FormClientes.Show; //exibe o formulrio
Este comando far com que o formulrio seja removido da memria quando o
fecharmos, resolvendo assim o problema. A esta altura voc tambm deve ter
notado que utilizamos duas barras de diviso ( // ) para indicar um comentrio.
Voc pode ver maiores detalhes sobre isso no apndice A que contm a
sintaxe bsica dos comandos e estruturas de controle do Object Pascal.
58
Certamente, voc deve ter pensado em algumas outras tambm, isso depende
muito de como voc deseja que seu Form se comporte e que funcionalidade
deseja implementar.
59
Se voc j programou em outras linguagens visuais pode ter uma idia melhor
de como esta arquitetura criada pela Borland realmente superior s outras
formas de desenvolvimento utilizadas por outras ferramentas. (A Borland
tambm possui o Borland C++ Builder, uma ferramenta semelhante ao Delphi,
mas que baseada em linguagem C/C++. Nela a forma de desenvolvimento
a mesma utilizada aqui).
Exerccios
60
Captulo 4
Caso seu projeto esteja fechado, voc pode abri-lo clicando no boto Open
Project do SpeedBar, teclando Ctrl+F11 ou ainda acessando o menu
File|Open Project. Se trabalhou recentemente com o projeto, pode tentar um
caminho mais rpido, atravs do menu File|Reopen, localizando-o na lista dos
ltimos projetos abertos.
61
Definindo um valor inicial para um campo
Estamos fazendo assim uma atribuio da data atual (atravs da funo Date)
para o campo Cadastro que esta no TableClientes (TableClientesCadastro)
sendo do tipo de dados date (AsDateTime). Na segunda linha, definimos que o
contedo do campo ativo ser True (verdadeiro), informando assim que o
cliente ativo (dificilmente cadastraramos um cliente inicialmente inativo, ele
se torna inativo com o tempo).
Quando iniciamos uma incluso ou alterao pode ser mais prtico que o foco
esteja num determinado controle, como o DBEdit do campo RazaoSocial. Para
isso vamos codificar o evento BeforeInsert (que ocorre antes da incluso):
DBEditRazaoSocial.SetFocus; // posiciona o cursor neste controle
62
Localize-o e abra o editor de cdigo (com um clique duplo), digitando os
comandos a seguir:
if Application.MessageBox('Deseja excluir o registro atual?','Confirme',
MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDNO then
Abort; //interrompe e no exclui o registro
Isso criar uma caixa de dilogo com o ttulo Confirme e a mensagem Deseja
excluir o registro atual?, exibindo os botes Sim e No e o cone padro
para perguntas. O segundo boto (No) foi definido como boto padro.
Observe tambm que as mensagens foram digitadas entre aspas simples, que
o formato para strings no Delphi.
63
Voc tambm deve codificar de forma semelhante o evento AfterScroll, que
ocorre depois que nos movemos de um registro para outro, pois assim
estaremos exibindo as mscaras corretas para o registro corrente. No evento
AfterScroll a codificao ser ligeiramente diferente na primeira linha, ao invs
de acessarmos o controle, faremos a leitura da informao diretamente do
campo:
Uma ltima alterao que podemos fazer forar a digitao para maisculo
no campo UF. Para isso v at o controle DBEditUF e altere a propriedade
CharCase para ecUpperCase.
Voc pode fazer o mesmo com os outros campos de texto (Razo Social,
Fantasia, Endereo, etc) caso deseje que todas as informaes sejam
digitadas e gravadas em maisculo.
Localizando informaes
Propriedade Contedo
Caption &Procurar
Name BitBtnProcurar
Glyph Imagem find.bmp
64
A imagem find.bmp faz parte do arquivo de imagens do Delphi que est em:
C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images\Buttons.
D um duplo clique no boto para abrir o editor de cdigo que vir assim:
end;
end;
Digite o seguinte cdigo entre as instrues begin e end; (onde sempre fizemos
at agora):
end;
65
A funo InputQuery responsvel por criar uma caixa de dilogo para
digitao de informao do tipo texto. O mtodo locate um dos mtodos
responsveis pela localizao de informaes.
Finalizaremos este captulo por aqui. Agora voc deve criar o formulrio de
Produtos, utilizando os conhecimentos que obteve at o momento.
Exerccios:
66
Captulo 5
Esta ser a interface que criaremos para o pedido. Passemos ento a sua
criao:
Propriedade Contedo
Caption Cadastro de Pedidos
FormStyle fsMDIChild
Height 375
Name FormCadPedidos
Position poMainFormCenter
ShowHint True
Width 550
67
Insira um componente Panel (guia Standard), configurando estas propriedades:
Propriedade Contedo
Align alTop
Caption Apagar o contedo
Enabled False
Height 145
Name PanelDados
Propriedade Contedo
Align alBottom
Caption Apagar o contedo
Name PanelBotoes
Isso far com que o DBNavigator exiba apenas os quatro primeiros botes,
responsveis pela movimentao na tabela. Para as outras opes ns
utilizaremos nossos prprios botes, aprendendo como o DBNavigator
manipula os mtodos para dar manuteno no sistema.
68
Como os outros botes foram ocultados, vamos reduzir a largura do mesmo
para melhorar sua aparncia. Assim, defina a propriedade Width para 80.
Defina a propriedade Name do DBNavigator para DBNavigatorPedidos.
69
Name SpdBtnProcurar
Para criar o boto para fechar o form, utilizamos o nosso j conhecido BitBtn
(tambm da guia Additional). Insira um BitBtn no PanelBotoes e defina suas
propriedades como segue:
Propriedade Contedo
Caption &Procurar
Name BitBtnProcurar
Glyph Imagem find.bmp
70
Segundo DataSource (DataSource2):
Propriedade Contedo
DataSet TableItens
Name DSItens
Em Field type devemos indicar Lookup, para termos acesso ao grupo Lookup
definition.
O item Key Fields representa qual campo utilizaremos para procurar (selecione
Cliente). Em Dataset temos o nome da tabela na qual a busca ser realizada
71
(selecione TableClientes). O item Lookup Keys o campo da tabela definida
em Dataset que deve corresponder ao campo definido em Key Fields
(selecione Cdigo). O Item Result Field tem o nome do campo que deve ter seu
contedo retornado se a informao for encontrada (selecione RazaoSocial).
Ao clicar em OK, seu Fields Editor deve ter ficado como a primeira figura
abaixo (do lado esquerdo):
Obs: Para alinhar dois objetos na mesma linha, ajuste a propriedade Top
de ambos para o mesmo valor. Para alinhar o lado esquerdo, defina a
propriedade Left. Uma maneira selecionar o primeiro componente,
segurar a tecla Shift e selecionar os outros. V at a propriedade que quer
definir e tecle Enter. Isso far com que os outros objetos assumam o
mesmo valor que estava definido na propriedade do primeiro objeto.
72
Dataset: TableProdutos
Lookup Keys: Cdigo
Result Field: Descrio
Ser exibido o Field Link Designer, como na figura acima. Selecione o campo
NumeroPedido na lista Detail Fields e na lista Master Fields. Clique no boto
Add. A caixa Joined Fields deve exibir o seguinte:
73
Clique no boto OK para prosseguir. Com isso indicamos que o TableItens est
ligado como filho do TablePedidos. Cada vez que movimentarmos a
TablePedidos na TableItens sero exibidos apenas os registros que pertenam
ao pedido exibido.
74
Selecione a subpropriedade Font e defina a cor para Azul-marinho (se desejar
altere tambm a fonte). Faa o mesmo para os outros campos. No campo Total
defina tambm o estilo da fonte para negrito.
Selecione agora o DBGridItens e defina sua propriedade Color para clInfoBk.
Propriedade Contedo
Alignment taRightJustify
AutoSize True
BorderStyle sbsSunken
Caption Apagar o contedo
Height 21
Font Times New Roman, Negrito, Tamanho 9,
cor Azul-marinho
Name StaticTextTotal
Com isso terminamos toda a parte visual (design). Devemos agora iniciar a
codificao, no esquecendo de salvar novamente antes de prosseguir.
75
O editor de cdigo deve estar semelhante ao cdigo a seguir:
// fecha as tabelas
TableProdutos.Close;
TableClientes.Close;
TablePedidos.Close;
TableItens.Close;
E o evento OnClose:
private
{ Private declarations }
procedure AtivarControles(Ativar: Boolean); Linhas
procedure RecalculaPedido; inseridas
public
76
{ Public declarations }
end;
procedure TFormCadPedidos.RecalculaPedido;
var
TmpTable: TTable;
Total: Currency; // armazena valores do tipo moeda
begin
// cria um objeto Table via codificao
TmpTable := TTable.Create(Application);
try
// define DatabaseName e TableName via codificao
TmpTable.DatabaseName := TableItens.DatabaseName;
TmpTable.TableName := TableItens.TableName;
TmpTable.Open;
TmpTable.FindKey([TablePedidosNumeroPedido.AsInteger]);
Total := 0; // inicializa a variavel totalizadora
while (not TmpTable.Eof) and
(TmpTable.FieldByName('NumeroPedido').AsInteger =
TablePedidosNumeroPedido.AsInteger) do
begin
// Acumula o Total da linha
Total := Total + (TmpTable.FieldByName('Preco').AsCurrency *
TmpTable.FieldByName('Quantidade').AsFloat);
TmpTable.Next; // prximo registro
end;
finally
TmpTable.Close; // fecha a tabela
TmpTable.Free; // libera objeto da memria
end;
StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total);
end;
77
Selecione novamente o TableItens e localize o evento OnCalcFields. O cdigo
a ser inserido o seguinte:
TableItensQuantidade.AsFloat := 1;
DBGridItens.SelectedIndex := 0; //cdigo
78
Abort; // interrompe a gravao
end;
Existe mais um ajuste que devemos fazer na parte de eventos ligados aos
campos. Ao digitarmos uma data, num campo onde definimos o EditMask, se
apagarmos o contedo do mesmo ser gerado um erro por definio de data
em branco ( / / ). Este cdigo a seguir responsvel por identificar esta
situao e efetuar a correo necessria. Deve ser digitado no evento
OnSetText:
79
else
// atribui a data digitada ao campo
try
Sender.AsString := Text;
except
ShowMessage('Data invlida!');
end;
if TablePedidos.IsEmpty then
begin
// a tabela est vazia, ento devemos incluir
SpdBtnIncluir.Click; // executa o click no boto
Exit; // retorna
end;
AtivarControles(True); // ativa os controles para digitao
TablePedidos.Edit; // permite alterar os dados
DBEditDataPedido.SetFocus;
80
Para o boto SpdBtnGravar teremos esta codificao:
81
if FormCadPedidos = NIL then // cria o form se ele no foi criado ainda
Application.CreateForm(TFormCadPedidos,FormCadPedidos);
FormCadPedidos.Show; //exibe o formulrio
Exerccios
82
Captulo 6
Propriedade Contedo
Align AlTop
Height 105
Name PgCtrlLocalizar
Style TsFlatButtons
83
Clique neste objeto para seleciona-lo e defina o Name para
TabSheetNumPedido e o Caption para Nmero do Pedido.
Insira neste TabSheet um Label, um Edit (ambos da guia Standard) e um BitBtn
(guia Additional). No Caption do Label escreva Nmero do Pedido. Apague o
texto contido na propriedade Text do componente Edit e altere seu Name para
EditPedido. O Name do BitBtn deve ser BitBtnPedido e no seu Caption voc
deve digitar &Procurar. Na propriedade glyph utilize a imagem find.bmp ou
outra mais conveniente.
Propriedade Contedo
Height 195
Left 0
Name DBGridPedidos
ReadOnly True
Top 105
Width 594
Propriedade Contedo
Caption Apagar o contedo
Height 41
Left 0
Name PanelBotoes
Top 300
Width 594
84
Segundo Boto (BitBtn2):
Propriedade Contedo
Kind bkCancel
Caption &Cancelar
Name BitBtnCancelar
Width 90
Insira um Label neste TabSheet definindo seu Caption como Data Inicial.
Adicione um componente DateTimePicker (guia Win32) em frente ao Label.
Defina o Name para DTPickerInicial e preencha a propriedade Format com
dd/mm/yyyy. Repita o processo, adicionando outro Label, agora com o Caption
Data Final e outro DateTimePicker com o Name DTPickerFinal e o mesmo
contedo em Format. Adicione outro BitBtn com o Name BitBtnData e as
mesmas configuraes do BitBtn adicionado pgina anterior. Neste ponto
este TabSheet deve ser semelhante a figura abaixo:
Propriedade Contedo
DatabaseName DBPedidos
Name TableClientes
Table Clientes.db
85
E o segundo para:
Propriedade Contedo
DatabaseName DBPedidos
Name TableClientes
Table Clientes.db
TablePedidos.Close;
TableClientes.Close;
86
ShowMessage(EditPedido.Text + ' no um nmero inteiro
vlido!');
EditPedido.Clear; // limpa o conteudo da caixa de texto
EditPedido.SetFocus;
Exit;
end;
end;
// Cancela qualquer definio de faixa de dados (filtragem)
TablePedidos.CancelRange;
TablePedidos.SetRange([DateToStr(DTPickerInicial.Date)],[DateToStr(DTP
ickerFinal.Date)]);
if TablePedidos.Eof then // fim de arquivo
begin
TablePedidos.CancelRange;
ShowMessage('Nenhum pedido encontrado no perodo informado!');
DTPickerInicial.SetFocus;
end
else
87
begin
Height := 375;
Top := 110;
DBGridPedidos.SetFocus;
end;
88
if TablePedidos.Eof then // fim de arquivo
begin
TablePedidos.CancelRange;
ShowMessage('Nenhum pedido deste cliente!');
EditCliente.SetFocus;
end
else
begin
Height := 375;
Top := 110;
DBGridPedidos.SetFocus;
end;
end;
Application.CreateForm(TFormLocalizaPedidos, FormLocalizaPedidos);
if FormLocalizaPedidos.ShowModal = mrOK then
TablePedidos.GotoCurrent(FormLocalizaPedidos.TablePedidos);
FormLocalizaPedidos.Free;
Isto far com que o pedido localizado no form de procura seja selecionado (e
exibido) no formulrio de pedidos, atravs da sincronizao das posies dos
registros (mtodo GotoCurrent do Table).
Salve seu projeto e execute-o. Cadastre alguns pedidos, localize-os. Veja como
o aplicativo se comporta.
89
Este form que criamos, quando chamado, exibir apenas a parte superior (o
PageControl). O usurio poder escolher atravs das pginas qual tipo de
procura deseja fazer. Caso alguma informao seja encontrada o DBGrid com
os dados e o Panel com os botes sero exibidos pois o formulrio ir alterar
seu tamanho. Caso ao invs de selecionar o item o usurio decidir alterar o tipo
de procura o mesmo reduzir seu tamanho novamente.
procedure TFormCadPedidos.RecalculaPedido;
var
TmpTable: TTable;
90
Total: Currency; // armazena valores do tipo moeda
begin
// cria um objeto Table via codificao
TmpTable := TTable.Create(Application);
try
// define DatabaseName e TableName via codificao
TmpTable.DatabaseName := TableItens.DatabaseName;
TmpTable.TableName := TableItens.TableName;
TmpTable.Open;
TmpTable.FindKey([TablePedidosNumeroPedido.AsInteger]);
Total := 0; // inicializa a variavel totalizadora
while (not TmpTable.Eof) and
(TmpTable.FieldByName('NumeroPedido').AsInteger =
TablePedidosNumeroPedido.AsInteger) do
begin
// Acumula o Total da linha
Total := Total + (TmpTable.FieldByName('Preco').AsCurrency *
TmpTable.FieldByName('Quantidade').AsFloat);
TmpTable.Next; // prximo registro
end;
finally
TmpTable.Close; // fecha a tabela
TmpTable.Free; // libera objeto da memria
end;
StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total);
end;
91
end;
TablePedidos.Delete; // exclui o pedido
except
ShowMessage('Ocorreu um erro durante a excluso do pedido');
end;
A idia que voc deve excluir primeiro os itens (filhos) antes de excluir o
pedido (pai), pois caso algum dos filhos no possa ser excludo, por algum
estar utilizando ou algo assim (no caso do sistema estar em rede) voc teria
registros rfos na sua tabela. A estrutura de controle de exceo
try..except..end foi utilizada para informar interromper a execuo (no excluir
mais) e avasar caso ocorra algum erro. Se nenhum problema ocorrer, a
mensagem no exibida.
Exerccios
92
Captulo 7
Para criar um relatrio, insira um novo Form no seu projeto. Defina o Name
para FormListagemProdutos.
93
No grupo Bands selecione Page header, Detail band e Page footer, clicando
em seguida no OK. Isso introduzir trs bands (reas de relatrio) j
configurados para exibir cabealho, rea de dados e rodap. (Tambm
possvel inserir e configurar as bands manualmente, atravs do componente
QRBand que se encontra na mesma guia).
94
Na ltima band, adicione um componente QRSysData configurando a
propriedade Data para qrsPageNumber, e a propriedade Text para Pgina:
Altere tambm Alignment para taRightJustify e AlignToBand para True.
Application.CreateForm(TFormListagemProdutos,FormListagemProduto);
FormListagemProdutos.QuickRepProdutos.PreviewModal;
FormListagemProdutos.Free;
Uma melhoria que voc poderia fazer seria criar um formulrio com dois botes
e chamar seu relatrio a partir deste outro formulrio. Um boto para Imprimir e
outro para Visualizar.
Agora voc deve ter condies de criar as outras listagens tambm. Tente
fazer a listagem de Clientes e de Pedidos. Para a listagem de pedidos voc ir
precisar configurar dois componentes Table, como fizemos no
FormProcuraPedido, para que o nome do cliente possa ser exibido.
95
Para a criao da Impresso do Pedido, o procedimento semelhante ao
anterior, no entanto, no Report Settings ao invs de selecionarmos o Page
footer selecionamos a band Summary, que ser responsvel por fazer a
totalizao de todos os itens. Sero necessrios quatro componentes Table,
um para cada tabela que possumos. A configurao dos Tables a mesma
utilizada no cadastro de pedidos, a nica diferena que no criamos o campo
Calculated no TableItens. Se voc deseja, pode selecionar os componentes
Table e o DataSource DSPedidos, copi-los (Ctrl + C), vir at o form que voc
est criando para a impresso do pedido e cola-lo (Ctrl+V). Assim, s ser
necessrio excluir o campo Calculated (Total) do TableItens. Para praticar voc
deveria inserir os Tables e o DataSource tentar configura-los segundo as
instrues do cadastro de pedidos, no se esquecendo de interligar as tabelas
de Pedidos e itens atravs das propriedades MasterSource e MasterFields,
como fizemos l.
// abre as tabelas
TableProdutos.Open;
TableClientes.Open;
96
TablePedidos.Open;
TableItens.Open;
// fecha as tabelas
TableProdutos.Close;
TableClientes.Close;
TablePedidos.Close;
TableItens.Close;
97
FormImprimePedido.Close;
Exit;
end;
FormImprimePedido.QuickRepPedidos.PreviewModal;
FormImprimePedido.Free;
end;
Salve o projeto e execute. Voc notar que se chamar este relatrio com o
cadastro de pedidos aberto, ele apresentar a visualizao do pedido
atualmente selecionado. Se o mesmo estiver fechado, ser solicitado o nmero
do pedido a ser impresso/visualizado.
Action := caFree;
FormSobre := NIL;
Utilize os Labels para digitar seus dados. E modifique as fontes como achar
mais adequado. Veja exemplo abaixo:
98
Criando uma barra de Ferramentas
99
Para inserir um cone/bmp, clique no boto Add. Selecione quatro cones ou
bmp (pequenos, especficos para boto) para o Cadastro de Clientes,
Produtos, Pedidos e uma Calculadora (existe uma no diretrio do Delphi). As
figuras que usamos nos BitBtn tambm servem, mas por possurem duas
imagens (e consequentemente o dobro da largura) voc deve aceitar que o
ImageList as desmembre em duas figuras. Neste caso voc exclui a ltima
selecionando-a e clicando em Delete. Quando inserir todas as imagens clique
em OK.
WinExec('CALC.EXE',0);
100
Exerccios:
101
Apndice A
Palavra Descrio
Begin Incio de bloco de programa.
End Fim de Bloco de Programa.
Type Definio de tipos.
Var Definio de variveis.
Uses Definio de bibliotecas.
Class Definio de classes.
Implementatio Seo da unidade, onde esto todas as definies da
n mesma, variveis, tipos, constantes, bibliotecas, etc., que so
privadas unidade. Alm isso est todo o cdigo dos
mtodos da unidade.
Interface Seo da unidade, onde esto todas as definies da
mesma, variveis, tipos, constantes, bibliotecas, etc., que
sero tornadas pblicas pela unidade.
Do Comando interno de execuo de algum outro comando.
while Comando de repetio.
for Comando de repetio.
if Comando de seleo.
else Comando de exceo a uma seleo.
Case Comando de seleo.
Then Comando de auxiliar de seleo.
Public Propriedades e Mtodos que podem ser acessados por
qualquer unidade do programa.
Private Propriedades e Mtodos que s podem ser acessados pela
prpria unidade.
Protected Propriedades e Mtodos que podem ser acessados apenas
pela prpria unidade e pelos mtodos das unidades derivadas
desta.
Unit Chave para a declarao do nome da unidade.
Array Palavra para a definio de vetores.
Of Comando auxiliar para definies de tipos.
Repeat Comando de Repetio.
Until Comando auxiliar na repetio.
102
With Comando utilizado para referir-se a um registro de um objeto
de forma direta.
Tipos de Dados
Tipos Inteiros
Tipo Domnio Tamanho
Shortint -128 127 1
Smallint -32768 32767 2
Longint -2147483648 2147483647 4
Byte 0 255 1
Word 0 65535 2
Integer -32768 32767 2
Cardinal 0 65535 2
Integer -2147483648 2147483647 4 (32-bits)
Cardinal 0 2147483647 4 (32-bits)
Tipos Booleanos
Tipo Descrio
Boolean 1 byte, assume apenas valores TRUE ou FALSE
ByteBool um byte com caractersticas booleanas, 0(FALSE) e
diferente de 0 (TRUE)
WordBool um Word com caractersticas booleanas, 0(FALSE) e
diferente de 0 (TRUE)
LongBool um Longint com caractersticas booleanas, 0(FALSE) e
diferente de 0 (TRUE)
Tipos Caracteres
Tipo Descrio
Char 1 byte, caracter
String n bytes, caracteres
Tipos Reais
Tipo Domnio Alg. Sig. Tam.
Real 2.9 x 10-39 1.7 x 1038 11-12 6
Single 1.5 x 10-45 3.4 x 1038 7-8 4
Double 5.0 x 10-324 1.7 x 10308 15-16 8
Extended 3.4 x 10-4932 1.1 x 104932 19-20 10
Comp -263+1 263 -1 19-20 8
Currency -922337203685477.5808 19-20 8
922337203685477.5807
Definio de Arrays
Um array um vetor de dados de um determinado tipo. Ele representa
uma lista com uma determinada caracterstica, e definido no Delphi da
mesma forma como era definido no Pascal.
103
Var
Nome_da_varivel: array[1..n] of Tipo_da varivel; // ou
Nome_da_varivel: array[1..n,1..m,1..x,..] of Tipo_da varivel; // Para
matrizes
Ex.:
X: array[1..10] of Integer; // Vetor de 10 elementos inteiros
S: array[1..50] of Double; // Vetor de 50 elementos reais
M: array[1..10,1..20] of Boolean; // Matriz booleana de 10x20
Comentrios
Comentrio de Uma linha: // comentrio
Comentrios de vrias linhas { comentrio }
Formas de Atribuio
O Delphi utiliza a mesma forma de atribuio do Pascal ( := ). A nica
diferena que a atribuio foi estendida aos objetos e aos novos tipos do
Delphi.
Ex.:
X := 10 + Y;
Form1 := Form2; Operadores:
O Delphi Possui uma estrutura de operadores muito parecida com a do
pascal, apenas com a incluso de alguns novos operadores.
Operadores
Operadores Aritmticos
Operado Operao Tipos Tipos
r Usados Resultantes
+ Adio Inteiros Inteiro
Reais Real
- Subtrao Inteiros Inteiro
Reais Real
* Multiplica Inteiros Inteiro
o Reais Real
/ Diviso Inteiros Real
Reais Real
Div Diviso Inteiros Inteiro
inteira
Mod Resto da Inteiros Inteiro
diviso
inteira
104
Operadores Unrios
Operado Operao Tipos Tipos
r Usados Resultantes
+ Identidade Inteiros Inteiro
do sinal Reais Real
- Negao Inteiros Inteiro
de sinal Reais Real
Operadores Booleanos
Operado Operao Tipos Tipos
r Usados Resultantes
Not Negao Booleanos Booleano
And E Booleanos Booleano
Or OU Booleanos Booleano
Xor OU Booleanos Booleano
coincidente
Operadores Relacionais
Operado Operao Tipos Usados Tipos
r Resultantes
= Igual Tipos simples compatveis, de Booleano
classe, referencia de classe,
ponteiros, conjunto, string ou
string empacotado.
105
< Menor que Tipos simples compatveis, Booleano
strings ou string empacotado ou
Pchar
> Maior que Tipos simples compatveis, Booleano
strings ou string empacotado ou
Pchar
<= Menor ou Tipos simples compatveis, Booleano
igual strings ou string empacotado ou
Pchar
>= Maior ou Tipos simples compatveis, Booleano
igual strings ou string empacotado ou
Pchar
<= Subconjunt Tipos de conjuntos compatveis Booleano
o de
>= Superconju Tipos de conjuntos compatveis Booleano
nto de
In Membro de Operando da esquerda, qualquer Booleano
tipo ordinal;
Operando da direita, conjunto
cuja base seja compatvel com o
operando da esquerda
Is Compatvel Tipos de conjuntos, mais Booleano
a especificamente classes
Operadores Especiais
Operado Operao Tipos Tipos
r Usados Resultantes
@ Atribuio Qualquer Ponteiro
As Relao Classes Classe
Comandos de seleo
If Then
O if a estrutura de seleo mais simples que existe, e est presente
em todas as linguagem de programao. Nele, uma condio testada, se for
106
verdadeira ira executar um conjunto de comandos, se for falsa, poder ou no
executar um outro conjunto de comandos. A sua estrutura bsica :
If condio Then
Begin
Comandos executados se a condio for verdadeira;
End
Else
Comandos serem executados se a condio for falsa;
Ex.:
If x=0 Then If x=0 Then
Write(x zero); Write(x zero);
Else
Write(x no zero);
A utilizao dos marcadores de incio e fim (Begin e End), e considerada
opcional, se for executado apenas um nico comando. O If ainda permite o
encadeamento de Ifs.
Ex.:
If x=0 Then
Write(X zero);
Else
If x>0 Then
Write(X positivo);
Else
Write(X negativo);
Case
A instruo case consiste em uma expresso usada para selecionar um
valor em uma lista de possveis valores, ou de faixa de valores. Estes valores
so constantes e devem ser nicos e de tipo ordinal. Finalmente pode haver
uma instruo else que ser executada se nenhum dos rtulos corresponder ao
valor do seletor. O seu formato bsico :
Case Seletor of
Const1: Begin
Comandos referentes a constante 1.
End;
Const2: Begin
Comandos referentes a constante 2.
End;
Faixa1..Faixa2: Begin
Comandos referentes a Faixa de valores.
End;
Else
Comandos referentes ao else
End;
107
Ex.:
Case Numero of Case MeuChar of
1: texto := um; +: Texto := Sinal de mais;
2: texto := dois; -: Texto := Sinal de Menos;
3: texto := trs; 0..9: Texto := Nmeros;
end; else
Begin
Texto := Caracter desconhecido;
Meuchar := ?;
End;
Comandos de repetio
For
O loop for no Pascal baseia-se estritamente em num contador, o qual
pode ser aumentado ou diminudo cada vez que o loop for executado. O
contador inicializado, e o loop ir se repetir enquanto o contador no chegar
ao fim da contagem. O seu formato bsico :
For contador := inicio_da_contagem to fim_da_contagem do
Begin
Comandos;
End;
Ex.:
K := 0;
W:= 0;
For i:=1 to 10 do
For j:=1 to 10 do
K := K + i * j;
108
While
O while um comando de repetio que no possui controle de um
contador e que testa a condio antes de executar o prximo loop. Este loop ir
se repetir enquanto a condio for verdadeira. A sua forma bsica :
While condio
Begin
Comandos;
End;
Ex.:
I:=10;
J:=0;
While I>J do
Begin
I := I 1;
J := J + 1;
End;
Repeat Until
O Repeat um comando de repetio que no possui controle de um
contador e que testa a condio depois de executar o loop. Este loop ir se
repetir at que a condio seja verdadeira. A sua forma bsica :
Repeat
Comandos;
Until condio
Ex.:
I:=10;
J:=0;
Repeat
I := I 1;
J := J + 1;
Until J>I;
Procedimentos e funes
Um conceito importante que integra linguagens como o Pascal, e
consequentemente o Object Pascal do Delphi, o da sub-rotina. No Pascal as
subrotinas podem assumir duas formas diferentes: procedimentos ou funes.
A nica diferena real entre as duas, que as funes tm um valor de retorno,
enquanto os procedimentos no. Abaixo est a sintaxe do Pascal para
procedimentos e funes:
109
Procedure ola; Function Dois: Integer;
Begin Begin
ShowMessage( Ol !); Result := 2;
End; End;
110
3. Estabelecer a visibilidade de cada objeto em relao aos outros
objetos.
4. Estabelecer a interface de cada objeto.
5. Implementar cada objeto.
Classes e objetos
Estes so dois termos que freqentemente so erroneamente utilizados.
Esclarecendo isto, as suas definies so as seguintes:
Uma classe um tipo de dado definido pelo usurio, o qual tem um
estado, uma representao e algumas operaes ou
comportamentos. Uma classe tem alguns dados internos e alguns
mtodos, na forma de procedimentos e funes. Uma classe
usualmente descreve as caractersticas genricas e o comportamento
de uma srie de objetos muito semelhantes. As classes so usadas
pelo programador para organizar o cdigo fonte e pelo compilador
para gerar o aplicativo.
Um objeto uma instancia de uma classe, ou, usando outras
palavras, uma varivel do tipo de dados definido pela classe.
Objetos so entidades reais. Quando o programa executado, os
objetos ocupam parte da memria para a sua representao interna.
Propriedades genricas:
Propriedade Descrio Valores
Caption String que se refere ao objetivo da classe. String
Esta string mostrada no componente
relacionado a classe.
Color Cor atribuda a classe. Em alguns casos Cor
ela est relacionada com a cor de fundo do
componente.
Cursor Tipo de cursor a ser mostrado quando o Cursor
mouse estiver sobre o componente
Enable Se o componente esta habilitado ou no True, False
Font Fonte de letra utilizado pela classe Fonte de letra
Height Altura do componente, em relao ao Top Integer
111
Propriedade Descrio Valores
Hint String que aparece sobre um componente, String
quando o mouse fica algum tempo parado
sobre este.
Left Posio esquerda do componente. Se o Inteiro
componente for um form, este ser em
relao a tela, se for outro qualquer, ser
em relao ao form aonde ele estiver.
Name Nome da propriedade para o cdigo Nome
ShowHint Habilita ou desabilita o Hint True, False
Top Posio superior do componente. Se o Inteiro
componente for um form, este ser em
relao a tela, se for outro qualquer, ser
em relao ao form aonde ele estiver.
Visible Torna a classe visvel ou Invisvel True, False
Width Largura do componente, em relao ao Integer
Left.
Eventos genricos:
Evento Descrio
OnClick executado quando o mouse clicado encima do
componente
OnClose executado quando um form fechado
OnCreate executado logo aps a criao do componente.
OnDblClick executado quando o mouse clicado duas vezes
consecutivas sobre o componente
OnExit executado no termino do programa.
OnKeyPress executado quando o componente esta selecionado e
alguma tecla for apertada.
OnMouseMove executado quando o mouse se movimenta sobre o
componente.
OnShow executado antes de exibir o componente
Cdigo bsico
unit Unit1; // Nome da unidade
112
{ Definio dos mtodos e propriedades privados unidade }
public
{ Definio dos mtodos e propriedades pblicos }
end;
NomeDaClasse = class
public
{ Definio dos mtodos e propriedades pblicos }
private
{ Definio dos mtodos e propriedades privados unidade }
protected
{ Definio dos mtodos e propriedades protegidos }
end;
113
O construtor
O construtor o evento de uma classe que executado no momento da
criao do objeto. Este evento normalmente utilizado para a inicializao, e
pode ter qualquer quantidade de parmetros de entrada, e nenhum parmetro
de sada.
Ex.:
Data = Class
Dia, Mes, ano: Integer;
Constructor init(d, m, a: Integer);
Procedure Ledata(Var d,m,a: Integer);
Procedure gravadata(d,m,a: Integer);
End;
Um construtor pode ter qualquer nome, e cada classe pode ter apenas
um construtor.
O destrutor
O destrutor o evento de uma classe que executado no momento do
fechamento do objeto. Este evento normalmente utilizado para a liberao de
memria alocada dinamicamente pelo objeto. Ele no possui parmetros de
entrada ou sada:
Ex.:
Data = Class
Dia, Mes, ano: Integer;
Constructor init(d, m, a: Integer);
Procedure Ledata(Var d,m,a: Integer);
Procedure gravadata(d,m,a: Integer);
Destructor destroi;
End;
114
bsica declara um nmero muito grande de mtodos no estticos, e a
aplicao declara um nmero muito grande de classes descendentes com
pouca utilizao do poliformismo.
Herana
A herana um dos recursos mais poderosos de uma linguagem
orientada a objetos. Ela permite que as classes secundrias assumam as
propriedades de suas classes principais. Elas herdam propriedades, mtodos e
eventos de sua classe principal, a classe secundria pode acrescentar novos
componentes naqueles que herdam. Isso permite que voc peque uma classe
que tenha praticamente todas as partes fundamentais de que precisa, e insira
novos objetos que a personalizam exatamente de acordo com suas
necessidades.
Quando uma classe secundria herda propriedades de uma primria, a
classe secundria ter acesso a todas as propriedades, mtodos e eventos,
que forem pblicos ou protegidos.
Inherit
Esta uma palavra reservado do Object Pascal que utilizada antes de
um mtodo. Ela pode ser utilizada quando uma classe secundria, possui um
mtodo com o mesmo nome de um da classe primria. Neste caso se nos
quisermos acessar o mtodo da classe primria teremos que utilizar o Inherit
antes deste mtodo.
Override
Esta uma palavra reservada do Object pascal que utilizada aps um
mtodo quando em uma classe secundria, queremos redefinir uma funo
definida em uma classe primria. Baseado nas definies de override e das
ligaes dinmicas e que se define o poliformismo.
Poliformismo
O poliformismo um recurso das linguagens orientadas a objetos, que
literalmente indica a capacidade de um objeto assumir vrias formas. Em
outras palavras, o poliformismo permite que voc referencie propriedades e
mtodos de classes diferentes por meio de um mesmo objeto. Ele tambm
possibilita que voc execute operaes com esse objeto de diferentes
maneiras, de acordo com o tipo de dado e com a classe atualmente associada
a esse objeto.
115
Por exemplo, posso declarar um objeto genrico da classe caixa
(digamos Minhacaixa) e ento associar a ele objetos da classe
Tcaixadeferramentas ou Tcaixadedinheiro. Agora suponhamos que cada classe
tenha um procedimento Open, cada um deles com uma implementao
diferente. Esse mtodo deve usar a ligao dinmica, isso significa declar-la
na classe-pai como virtual ou dynamic e redefini-la como override na classe-
filha.
Quando voc aplica o mtodo Open a MinhaCaixa, o que acontece?
chamado o procedimento Open do tipo atual do objeto. Se Minhacaixa for
atualmente um objeto Tcaixadedinheiro, a caixa ser aberta mediante uma
senha secreta, se for Tcaixadeferramentas a caixa ser simplesmente aberta.
116
Descrio dos Principais Procedimentos e Funes Pr
definidas
procedure Beep;
Toca um beep
Concatena as strings
Ex.:
var
S: string;
begin
S := Concat('ABC', 'DEF'); { 'ABCDE' }
end;
117
function Date: TDateTime;
118
procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
119
function DiskSize(Drive: Byte): Integer;
120
function ExtractFileName(const FileName: string): string;
Retorna a data e a hora de um arquivo num valor que pode ser convertido para
TDateTime atravs da funo FileDateToDateTime. Retorna 1 se o arquivo
no existir
121
procedure FillChar(var X; Count: Integer; value: Byte);
Preenche um vetor com determinado caracter. Value pode ser um byte ou char
Ex.:
var
S: array[0..79] of char;
begin
{ preenche tudo com espaos}
FillChar(S, SizeOf(S), ' ');
end;
122
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
Especificador Exibe
c Exibe a data usando o formato definido da varivel global
ShortDateFormat, seguido pela hora se o formato definido pela varivel global
LongTimeFormat. A hora no exibida se a parte fracional de DateTime for
zero.
d Exibe o dia como um nmero, sem zero esquerda (1-31).
dd Exibe o dia como um nmero, com zero esquerda (01-31).
ddd Exibe o nome do dia abreviado (Sun-Sat) usando as strings definidas
pela variavel global ShortDayNames
dddd Exibe o nome do dia (Sunday-Saturday) usando as strings definidas pela
variavel global LongDayNames.
ddddd Exibe a data utilizando o formato definido na varivel global
ShortDateFormat.
dddddd Exibe a data utilizando o formato definido na varivel global
LongDateFormat.
m Exibe o ms como um nmero sem zeros a esquerda (1-12). Se o
especificador m for seguido de um especificador h ou hh, ser exibido os
minutos do ms.
mm Exibe o ms como um nmero com zeros a esquerda (01-12). Se o
especificador m for seguido de um especificador h ou hh, ser exibido os
minutos do ms.
mmm Exibe o ms de forma abreviada (Jan-Dec) usando as strings definidas
na varivel global ShortMonthNames.
mmmm Exibe o ms por extenso (January-December) usando as strings
definidas na varivel global LongMonthNames.
yy Exibe o ano com dois dgitos (00-99).
yyyy Exibe o ano com quatro dgitos (0000-9999).
h Exibe a hora sem zero a esquerda (0-23).
hh Exibe a hora com zero a esquerda (00-23).
n Exibe o minuto sem zero a esquerda (0-59).
nn Exibe o minuto com zero a esquerda (00-59).
s Exibe o segundo sem zero a esquerda (0-59).
ss Exibe o segundo com zero a esquerda (00-59).
t Exibe a hora usando o formato definido na varivel global
ShortTimeFormat.
tt Exibe a hora usando o formato definido na varivel global
LongTimeFormat.
am/pm Exibe a hora no formato de 12 horas seguido de 'am' ou 'pm'.
a/p Exibe a hora no formato de 12 horas seguido de 'a' ou 'p'.
123
ampm Exibe a hora no formato de 12 horas de acordo com o contedo das
variveis globais TimeAMString (se antes do meio dia) e TimePMString (se
depois do meio dia).
/ Exibe o caracter separador da data definido na varivel global
DateSeparator.
: Exibe o caracter separador de hora definido na varivel global
TimeSeparator.
Obs: Caracteres dentro de aspas simples ou duplas ('xx'/"xx") so exibidos
como esto e no afetam a formatao.
Os especificadores de formato podem ser utilizados tanto em maisculo
quanto em minsculo - ambos produzem o mesmo resultado.
Se a string definida pelo parametro Format estiver vazia, os valores de
data e hora sero formatados como as if a 'c' format specifier had been given.
S := FormatDateTime('"The meeting is on" dddd, mmmm d, yyyy, ' +
124
function FormatFloat(const Format: string; Value: Extended): string;
Ex.:
var
R: Real;
begin
R := Frac(234.567); { 0.567 }
R := Frac(-234.567); { -0.567 }
end;
Valor Drive
0 Corrente
1 A
2 B
3 C
Ex.:
var
s : string;
begin
GetDir(0,s); { 0 = drive corrente}
MessageDlg('Drive e diretrio atual: ' + s, mtInformation, [mbOk] , 0);
end;
126
procedure Inc(var X [ ; N: Longint ] );
Ex.:
var
IntVar: Integer;
LongintVar: Longint;
begin
Inc(IntVar); { IntVar := IntVar + 1 }
Inc(LongintVar, 3; { LongintVar := LongintVar + 3}
end;
Exibe uma Caixa de Entrada onde o usurio pode digitar uma string.
ACaption representa o ttulo do Input Box e APrompt o ttulo do edit e
ADefault representa o valor inicial do Edit.
Ex.:
uses Dialogs;
procedure TForm1.Button1Click(Sender: TObject);
var
InputString: string;
begin
InputString:= InputBox('Informe', 'Nome do arquivo a ser criado', 'MeuTexto.TXT');
end;
127
procedure Insert(Source: string; var S: string; Index: Integer);
Ex.:
var
S: string;
begin
S := 'Delphi 3 /Server';
Insert('Client', S, 9); { 'Delphi 3 Client/Server' }
end;
Converte o inteiro Value num Hexadecimal (Base 16). Digits indica o nmero
mnimo de dgitos Hexa a serem retornados
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := IntToHex(StrToInt(Edit1.Text), 6);
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
var
Value: Integer;
begin
Value := 1583;
Edit1.Text := IntToStr(Value);
end;
Ex.:
var
S: string;
begin
S := 'Curso de Programao em Delphi 3 - Object Pascal';
Canvas.TextOut(10, 10, 'Tamanho da String = ' + IntToStr(Length(S)));
end;
128
function MaxIntValue(const Data: array of Integer): Integer;
129
mbAll Um boto com o texto 'All'
mbYesNoCancel Coloca os botes Yes, No, e Cancel na caixa de
mensagem
mbOkCancel Coloca os botes OK e Cancel na caixa de mensagem
mbAbortRetryIgnore Coloca os botes Abort, Retry, e Ignore na caixa de
mensagem
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
begin
if MessageDlg('Deseja sair da aplicao agora ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
MessageDlg('Tenha um bom dia...ject Pascal application.', mtInformation,
[mbOk], 0);
Close;
end;
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlgPos('Sair sem gravar alteraes ?',mtConfirmation, mbYesNoCancel, 0, 200,
200);
end;
130
procedure MkDir(S: string);
Ex.:
uses Dialogs;
begin
{$I-}
{ Pega o nome do diretrio de um controle Tedit }
MkDir(Edit1.Text);
if IOResult <> 0 then
MessageDlg('No posso criar o diretrio.', mtWarning, [mbOk], 0)
else
MessageDlg('Diretrio criado', mtInformation, [mbOk], 0);
end;
Retorna o valor de PI
3.1415926535897932385.
Ex.:
var S: string;
begin
S := ' 123.5';
{ Converte espaos para zeros }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;
131
function Power(Base, Exponent: Extended): Extended;
Retorna a Potncia.
function Pred(X);
procedure Randomize;
132
procedure Rename(var F; Newname);
Ex.:
uses Dialogs;
var
f : file;
begin
OpenDialog1.Title := 'Escolha um arquivo... ';
if OpenDialog1.Execute then begin
SaveDialog1.Title := 'Renomear para...';
if SaveDialog1.Execute then begin
AssignFile(f, OpenDialog1.FileName);
Canvas.TextOut(5, 10, 'Renomeando ' + OpenDialog1.FileName + ' para ' +
SaveDialog1.FileName);
Rename(f, SaveDialog1.FileName);
end;
end;
end;
Ex.:
{ O cdigo a seguir renomeia um arquivo }
if not RenameFile('OLDNAME.TXT','NEWNAME.TXT') then
ErrorMsg('Erro ao renomear arquivo!');
Remove um diretrio
Ex.:
uses Dialogs;
begin
{$I-}
{ Pega o nome do diretrio de um controle TEdit }
RmDir(Edit1.Text);
if IOResult <> 0 then
MessageDlg('No posso remover o diretrio', mtWarning, [mbOk], 0)
else
MessageDlg('Diretrio removido', mtInformation, [mbOk], 0);
end;
133
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx:
Longint):Boolean;
Valor Significado
sdAllowCreate Uma caixa de exio aparece para permitir ao usurio
digitar o nome do diretrio que no existe. Esta opo no cria o
diretrio, mas a aplicao pode acessar o parametro Directory
para criar o diretrio desejado.
sdPerformCreate Usado somente quando Options contm sdAllowCreate. Se
o usurio entrar com um diretrio que no existe, SelectDirectory
cria-o.
sdPrompt Usado quando Options contm sdAllowCreate. Exibe uma caixa de mensagem que
informa o usurio quando o diretrio digitado no existe e pergunta se deseja cri-lo. Se
o usurio selecionar OK, o diretrio criado se Options contm sdPerformCreate. Se
Options no contm sdPerformCreate, o diretrio no criado: a aplicao precisa cri-
o quando SelectDirectory retornar.
A funo retorna True se o usurio selecionar o diretrio e clicar em OK, e
False se o usurio selecionar Cancel ou fechar a caixa de dilogo sem
selecionar um diretrio.
Ex.:
uses FileCtrl;
Coloca um novo tamanho para uma string. O efeito similar ao cdigo abaixo:
S[0] := NewLength.
134
procedure ShowMessage(const Msg: string);
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Ol !');
end;
Retorna o quadrado de X
Ex.:
S := StringOfChar('A', 10);
{sets S to the string 'AAAAAAAAAA'}
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
var
ADate: TDateTime;
begin
ADate := StrToDate(Edit1.Text);
Label1.Caption := DateToStr(ADate);
end;
135
function StrToDateTime(const S: string): TDateTime;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
var
AdateAndTime: TDateTime;
begin
AdateAndTime := StrToDateTime(Edit1.Text);
Label1.Caption := DateTimeToStr(ADateAndTime);
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
I: Integer;
begin
S := '22467';
I := StrToInt(S);
Inc(I);
Edit1.Text := IntToStr(I);
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
var
ATime: TDateTime;
begin
ATime := StrToTime(Edit1.Text);
Label1.Caption := TimeToStr(ATime);
end;
136
function Succ(X);
Ex.:
uses Dialogs;
type
Colors = (RED,BLUE,GREEN);
var
S: string;
begin
S := 'O predecessor de 5 ' + IntToStr(Pred(5)) + #13#10;
S := S + 'O sucessor de 10 ' + IntToStr(Succ(10)) + #13#10;
MessageDlg(S, mtInformation, [mbOk], 0);
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := 'A hora ' + TimeToStr(Time);
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := TimeToStr(Time);
end;
137
function TrimRight(const S: string): string;
Ex.:
uses Dialogs;
var
s : string;
i : Integer;
begin
{ Pega a string de um controle TEdit }
s := Edit1.Text;
for i := 1 to Length(s) do
s[i] := UpCase(s[i]);
MessageDlg('Tudo em maisculo: ' + s, mtInformation, [mbOk], 0);
end;
Ex.:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ListBox1.Items.Count -1 do
ListBox1.Items[I] := UpperCase(ListBox1.Items[I]);
end;
138
Nome Descrio
crNoDrop, crHSplit, crVSplit, crMultiDrag, crSQLWait, crNo,
crAppStart, crHelp, crHandPoint]
Name Nome da instncia do componente
Left Distncia em Pixel da borda esquerda do componente at a
borda esquerda do FORM
Top Distncia em pixel da borda superior do componente at a
borda superior do FORM
Height Altura em pixel do componente
Width Largura em pixel do componente
ComponentCo O nmero de componentes possudos por um componente
unt container
Components Uma matriz de componentes possudos por um componente
container
Color Indica a cor de fundo do componente
Font Fonte utilizada no componente
Ctl3D Define a aparncia 3D ou 2D de um componente
Enabled Define se o componente esta ou no ativo
Visible Define se o componente esta ou no visvel
Hint String utilizada na exibio de dicas instantneas
ShowHint Define se o hint ser mostrado automaticamente
PopupMenu Menu que ser acionado com o boto direito do mouse
TabOrder A ordem de tabulao do componente
TabStop Indica se o componente ser ponto de parada para a tecla
TAB
HelpContext Nmero utilizado para chamar o help on-line sensvel ao
contexto
Eventos Comuns
Nome Descrio
OnChage O contedo do componente alterado
OnClick O componente acionado (Mouse ou Enter)
OnDblClick Duplo-clique sobre o componente
OnEnter O componente recebe o foco
OnExit O componente perde o foco
OnKeyDown Tecla(s) so pressionada(s) inclusive teclas de controle
Parametros :
Key = Cdigo da tecla
Shift = conjunto que indica a(s) tecla(s) de controle pressionadas
(ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble)
OnKeyPress Uma tecla pressionada, onde Key contm o caracter
pressionado
OnKeyUp Uma tecla solta
Mtodos Comuns
Nome Descrio
Create Cria uma nova instncia
139
Nome Descrio
Destroy Destri a instncia
Show Torna o componente visvel
Hide Torna o componente invisvel
SetFocus Coloca o foco no componente
Focused Determina se o componente tem o foco
BringToFron Coloca o componente na frente dos outros
t
SendToBack Coloca o componente atrs dos outros
ScaleBy Gradua o componente em determina escala. Ex:
Button1.ScaleBy(90,100) altera o tamanho do boto para 90% do
tamanho original
SetBounds Muda a posio e o tamanho do componente
(ALeft,ATop,AWidth,AHeigh)
140
Componentes
Form - Elemento bsico no desenvolvimento Delphi formando o alicerce sobre,
o qual um aplicativo construdo.
Propriedades Descrio
Active Indica quando o formulrio esta ativo.
ActiveControl Determina o controle que receber o foco quando o formulrio
ativado
AutoScroll Adiciona barras de rolagens automaticamente quando um
formulrio redimensionado de forma a cobrir componentes
HorzScrollBar Adiciona Barra de rolagem Horizontais quando necessrio
VertScrollBar Adiciona Barra de rolagem Verticais quando necessrio
BorderIcons Define quais cones de controle sero visveis
[biSystemMenu, biMinimize, biMaximize, biHelp]
BorderStyle Estilo da borda da janela
[bsDialog, bsSingle, bsNone, bsSizeable, bsToolWindow,
bsSizeToolWin]
FormStyle Tipo da janela
[fsNormalfs, MDIChild, fsMDIForm, fsStayOnTop]
Icon cone da janela
Menu Indica qual o componente menu do formulrio ser apresentado
Position Permite controlar a posio e tamanho dos formulrios na
execuo
[poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly,
poScreenCenter]
WindowState Estado da janela (normal, minimizado ou maximizado)
Eventos Descrio
OnCreate O formulrio criado
OnShow Antes de mostrar a janela
OnCloseQuery chamada para validar se a janela pode ser fechada
OnClose Ocorre quando a janela fechada
OnActivate Ocorre quando a janela torna-se ativa
OnDeactivate Ocorre quando a janela perde o foco
OnResize Ocorre quando a janela muda de tamanho
Mtodos Descrio
Show Mostra uma janela no-modal
ShowModal Ativa uma janela modal
Close Fecha a janela
Refresh Redesenha a Janela
141
Propriedades Descrio
Cancel Dispara o evento OnClick do boto quando a tecla ESC
pressionada
Default Dispara o evento OnClick do boto quando a tecla ENTER
pressionada
ModalResult Associa o boto a opo de fechamento de um Form modal
Propriedades Descrio
Kind Seleciona um BitMap padro para o boto
Style Indica a aparncia do boto (win3.11, win95, winxx)
Propriedades Descrio
Glyph BitMap exibido pelo boto
LayOut Posio do BitMap no Boto
Margin Indica o espao entre a borda do boto e o BitMap
Spacing Indica o espao entre o BitMap e o Texto do boto
Down Estado do boto (Pressionado ou no)
GroupIndex Indica quais botes pertencero ao mesmo grupo
AllowAllUp Permite que todos os botes de um grupo possam estar no
pressionados
Mtodos Descrio
Click Ativa o evento OnClick do boto
Propriedades Descrio
Alignment Alinhamento do texto no componente
AutoSize Define se o tamanho do componente ser automaticamente
ajustado ao tamanho da legenda
WordWrap Retorno automtico
Transparent Define se o componente ser transparente
FocusControl Nome do componente que receber o foco
ShowAccelCh Indica se & ser far ou no parte da legenda
ar
142
PropriedadesDescrio
Text Armazena a entrada de dados
AutoSelect Indica se o texto ser ou no selecionado quando o
componente receber o foco
MaxLength Nmero mximo de caracteres permitidos
CharCase Define se as letras aparecero em maisculo, minsculo ou
normal
PasswordCha Caracter utilizado para esconder os dados digitados (Senhas)
r
ReadOnly Define se ser permitido alterar o texto
SelLength Comprimento da seleo
SelStart Inicio da seleo
SelText Texto selecionado
Propriedades Descrio
EditMask Mscara de edio
143
: Separador de horas, minutos e segundos
/ Separador de dias, meses e anos
Propriedades Descrio
Alignament Indica como ser o alinhamento do texto
Lines Armazena as linhas de texto
WantReturns Define se a tecla ENTER ser tratada pelo Formulrio ou pelo
Memo
WantTab Define se a tecla TAB ser tratada pelo Formulrio ou pelo
Memo
WordWrap Indica se a linha digitada ser quebrada, automaticamente, de
acordo com o tamanho do componente
ScrollBar Indica se Memo ter barras de rolagem
Mtodos Descrio
Clear Limpa o memo
ClearSelection Limpa o texto selecionado no memo
TString
Propriedades Descrio
Count Nmero de linhas
Mtodos Descrio
Add Adiciona uma nova linha no final da lista
Insert Insere uma nova linha numa posio especificada
Delete Apaga uma linha
Clear Apaga toda a lista
IndexOf Retorna o ndice do item e -1 caso no encontre
LoadFromFile Carrega de um arquivo texto
SaveToFile Salva para um arquivo texto
Propriedades Descrio
AllowGrayed Determina se o checkbox ter duas ou trs possibilidades
Checked Determina se o checkbox est selecionado
State Estado atual do checkbox (cbUnchecked, cbChecked,
cbGrayed)
144
RadioButton - Utilizado para obter informaes lgicas mutuamente exclusivas
Propriedades Descrio
Checked Determina se o RadioButton esta selecionado
Propriedades Descrio
Columns Nmero de colunas de botes de rdio
Items Valores dos botes de rdio. Items[n] acessa o n-simo
componente
ItemIndex Item selecionado. (-1 nenhum, comea em 0)
Propriedades Descrio
BevelInner Estilo interno da superfcie do Panel
BevelOuter Estilo externo da superfcie do Panel
BevelWidth Distncia entre as superfcies externas e internas
BorderStyle Estilo da Borda
BorderWidth Largura da borda
Propriedades Descrio
HorzScrollBar Barra Horizontal (Increment, Tracking e Visible)
VertScrollBar Barra Vertical (Increment, Tracking e Visible)
Propriedades Descrio
Shape Tipo de figura a ser desenhada
Style Define alto e baixo relevo
145
Propriedades Descrio
Columns Nmero de colunas da lista
MultiSelect Define se ser permitida a seleo de mltiplos itens
ExtendedSele Define se a seleo poder ser estendida pelo uso das teclas
ct Shift e Ctrl
IntegralHeight Define se os itens podero aparecer parcialmente ou somente
por completo
Items Valores dos itens da lista
ItemIndex Item selecionado. (-1 no existe item selecionado e o 1 0)
Selected De acordo com o ndice indica se um item em particular esta
selecionado.
SelCount Indica quantos itens esto selecionado
Sorted Define se os itens aparecero ordenados
Propriedades Descrio
Items Valores a serem exibidos na lista
DropDownCount Nmero de itens visveis da lista
Text Contedo texto digitado na ComboBox
Style csDropDown - permite edio e exibe os itens mediante
solicitao
csDropDownList - no permite edio e mostra itens no edit
ao pressionar a 1 letra do item.
CsSimple - permite edio e exibe a lista
Sorted Define se os itens aparecero ordenados
Propriedades Descrio
Checked[n] Retorna true se o item n estiver selecionado
State[n] Retorna o estado do item n : [cvUnchecked, cbChecked,
cbGrayed]
Eventos Descrio
OnClickChecked Quando um item marcado ou desmarcado
Propriedades Descrio
Min Valor mnimo possvel
Max Valor mximo possvel
Position Posio Atual
146
Propriedades Descrio
LargeChange Incremento da posio quando o click na barra
SmallChange Incremento da posio quando o click na seta
Kind Se a barra vertical ou horizontal
Eventos Descrio
OnEditMask Permite atribuir uma mscara a clula. A linha e a coluna da
clula editada so recebidas pelo evento e mascar
representada pelo parmetro Value
Propriedades Descrio
ColCount Nmero de colunas
RowCount Nmero de linhas
Col Coluna corrente
Row Linha Corrente
DefaultColWidth Largura das colunas
DefaultRowHeig Altura das linhas
ht
DefaultDrawing Define se o desenho das clulas ser automtico ou manual
FixedCol Quantidade de Linhas Fixas
FixedRow Quantidade de colunas fixas
GridLineWidth Espessura das Linhas divisrias
Options Define caractersticas do Grid. goEditing e goTabs
Cells[col,lin] Permite acessar as clulas da Grid, por coluna e linha, sendo
que a primeira linha e coluna tm valores 0.
Propriedades Descrio
Picture Arquivo Bitmap, cone ou Windows Metafile exibido
Center Centraliza a figura no componente
Stretch Define se o tamanho da figura deve ser ajustada ao do
componente
Transparent Torna o fundo visvel ou opaco
Propriedades Descrio
Brush Cor e preenchimeto da figura
Pen Cor e preenchimento da borda
Shape Figura geomtrica
147
Splitter Permite o redimensionamento de componente em tempo de
execuo
Propriedades Descrio
Beveled Exibe o componente com aparncia 3D
MinSize Tamanho mnimo para os componentes
TabControl - Contem guias, as quais podem ser utilizadas para alterar outros
componentes
Propriedades Descrio
MultiLine Permite mltiplas linhas para as guias
Tabs Guias
TabPositon Posio das orelhas em cima ou embaixo
HotTrack Destaca a orelha quando o curso do mouse esta em cima da
mesma
TabIndex Guia ativa
ScrollOpposite Transfere as orelhas das linhas anteriores selecionada para
a outra extremidade do Componente
Eventos Descrio
OnChange Quando uma guia selecionada
Propriedades Descrio
MultiLine Permite mltiplas linhas para as pginas
ActivePage Pgina ativa
PageIndex ndice da pgina ativa
Eventos Descrio
OnChange Quando uma pgina selecionada
148
Propriedades Descrio
Count Nmero de imagens na lista
Propriedades Descrio
HideScrollBar Somente exibe as barras de rolagem quando necessrio
HideSelection Indica se o texto continuara com a indicao de selecionado
mesmo que o componente perca o foco
SelAttributes Formatao do Texto selecionado.
Color - Cor dos caracteres
Name - Nome da fonte usada
Size - Tamanho da Fonte
Style - Estilo da Fonte [fsBold,fsItalic,
fsUnderline,fsStrikeout]
Propriedades Descrio
Orientation Orientao vertical ou horizontal
Min valor mnimo
Max valor mximo
Position Posio corrente
TickStyle Estilo de exibio das marcaes
TickMarks Aparncia do indicador
PageSize Determina o incremento que deve ser dado quando as teclas
PgUp e PgDn forem pressionadas
LineSize Determina o incremento que deve ser dado quando as setas
forem pressionadas
SelStart Posio de inicio do preenchimento
SelEnd Posio de trmino do preenchimento
Propriedades Descrio
Min valor mnimo
Max valor mximo
Step incremento que deve ser dado a propriedade position em cada
mudana
Position Posio corrente
149
Mtodos Descrio
StepIt Incrementa Position de Step unidades
StepBy Incrementa Position de n unidades
Propriedades Descrio
Associate Indica o componente associado
AlignButton Indica o alinhamento do UpDown em relao ao componente
associado (udLeft, udRight)
Min Valor mnimo
Max Valor mximo
Orientation Orientao do componente (UdHorizontal, udVertical)
Wrap Salto do valor mnimo para o mximo e vice-versa
Increment Incremento dado ao componente associado
ArrowKeys Indica que o componente recebe os incrementos das teclas de
SETAS
Positon Valor corrente
Thousands Indica se ir aparecer o separdor de milhar
Wrap Salto altomtico de Max para Min e vice-versa
Propriedades Descrio
HotKey Combinao de teclas para a HotKey
InvalidKeys Especifica as teclas invlidas para modificadores
[hcNone , hcShift, hcCtrl, hcAlt, hcShiftCtrl, hcShiftAlt,
hcCtrlAlt, hcShiftCtrlAlt]
Modifiers Teclas modifocadoras [hkShift, hkCtrl, hkAlt, hkExt]
Propriedades Descrio
Active Indica se a animao esta sendo exibida ou no
AutoSize Ajusta automaticamente o tamanho do componente ao tamanho
da imagem
Center Centraliza a animao
FileName Nome do arquivo AVi
150
Propriedades Descrio
FrameCount Nmero de Frames da animao
Repetitions Nmero de repeties quando a animao for executada. O
valor zero indica repeties indefinidas
Propriedades Descrio
Time Hora selecionada
Date Data Selecionada
DateMode A forma como a data poder ser selecionada [dmComboBox,
dmUpDown]
DateFormat Formato da Data [dfShort, dfLong]
Kind Seleciona o componente para Data ou Hora [dtkDate, dtkTime]
ShowCheckbo Exibe um CheckBox
x
Check Indica se o CheckBox esta selecionado
Propriedades Descrio
Items Define os itens da hierarquia.
Ident Recuo dos sus-itens
ShowLines Determina se haver uma linha ligando os sub-itens
ShowRoot Determina se haver uma linha ligando os itens razes
ShowButtons Indica se o boto a esquerda do item ser visvel
HideSelect Indica se quando o componente perder o foco a seleo
continuar ativa
SortedType nsNone no ordenado
nsData os iten so ordenados quando os dados so
alterados
nsText os itens so ordenados quando o Caption
alterado.
nsBoth a ordenao e feita em ambos os casos
Selected Item selecionado. Podemos acessar o contedo selecionado
atravs de Select.Text;
151
Propriedades Descrio
ViewStyle Determina se os itens devem ser apresentados em colunas
com cabealhos e sub-itens, verticalmente ou
horizontalmente, com cones grandes ou pequenos
LargeImages Lista de Imagens (TImagesList) contendo a bitmaps a
serem exibidos e somente usada quando a propriedade
ViewStyle vsIcon
SmallImages Lista de Imagens (TImagesList) contendo a bitmaps a
serem exibidos e somente usada quando a propriedade
ViewStyle vsSmallIcon
Items Items a serem exibidos
Columns Cabealhos das colunas da Lista
ShowColumnHea Exibe os cabealhos das colunas
ders
ColumnClick Indica se os cabealhos das colunas tero a aparncia de
botes
IconOptions Opes de exibio dos cones quando ViewStyle for
vsIcon ou vsSmallIcons
Arrangement alinhado no topo ou esquerda do ListView
AutoArrange os cones so alinhados automaticamente
WrapText a propriedade caption ser quebrada
SortedType nsNone no ordenado
nsData os iten so ordenados dados so
alterados
nsText os itens so ordenados quando o
Caption alterada.
nsBoth a ordenao e feita em ambos os casos
Selected Item selecionado. Podemos acessar o contedo
selecionado atravs de Select.Captiont;
Propriedades Descrio
Sections[n] Cabealhos do componente, possuindo as seguintes
propriedades : Text, With, Min, Max, Style, Alignment,
AllowClick e Index. Onde uma seo em particular pode ser
acessada atravs do seu ndice
HotTrack Diferencia o cabelho quando o mouse esta sobre este
Eventos Descrio
OnSectionClick Clique sobre uma seo
OnSectionResize A seo tem seu tamanho alterado
StatusBar - Utilizado para criar barra de Status para exibir informaes sobre a
aplicao. Podemos abrir o editor de paines atravs do boto direito do mose
152
Propriedades Descrio
SimplePanel Indica se o StatusBar possuir um ou vrios panels
SimpleText Texto exibido caso SimplePanel igual a TRUE
SizeGrip Indicador de tamanho padro do Windows
Panels Painis do StatusBar, cada panel permite a exibio de
informao. Os painis so acessados como elementos de um
vetor (Panels[n]) e possuem as seguintes propriedades : Text,
Width, Style, Bevel, Alignment
Propriedades Descrio
Flat Os botes ficam tero a aparncia do Office 97
Images Componente ImageList que conter as figuras dos botes
Buttons[n] Acessa os botes atravs do ndice n
Propriedades Descrio
Bands Armazenas as Faixas (Cool bands)
BandBorderSty Indica o estilo da borda entre os CollBands
le
BitMap BitMap exibindo no fundo do componente
FixedOrder Indica se o usurio poder modificar a ordem dos CollBands
FixedSize Indica se o usurio poder modificar o tamanho dos CollBands
ShowText Indica se o valor da propriedade Text de cada TollBand ser
exibido ao lado de sua faixa
Vertical Indica se os CollBand sero verticais
Images Coleo de desenhos exibidos ao lado de cada CoollBand
153
Dilogos Comuns
Grupo de caixas de dilogo comuns a muitos programas.
Parte integrante do Windows, so atualizadas com a atualizao do Windows.
Necessitam pouca ou nenhuma programao para serem utilizadas. Facilitam a
padronizao em tarefas comuns. Depois de serem executados os Dilogos
Comuns armazenam em suas propriedades as escolhas do usurio.
Mtodo Descrio
Execute Ativa a caixa de dilogo e retorna True caso o dialogo comum seja
encerrado com o boto OK.
Propriedades Descrio
FileName Nome do arquivo
DefaultExt Extenso padro para os arquivos
Filter Define os tipos de arquivos que podem ser abertos ou salvos
FilterIndex Nmero do filtro default
InitialDir Diretrio inicial
Title Ttulo da janela
Options Define caractersticas da janela de abrir ou salvar
Evento Descrio
OnApply Ocorre aps o usurio pressionar o boto apply e antes da janela
fechar
154
Propriedades Descrio
selecionado)
FromPage Pgina inicial
ToPage Pgina final
MinPage Menor nmero de pgina que o usurio pode escolher
MaxPage Maior nmero de pgina que o usurio pode escolher
Options Define caractersticas da caixa de dilogo
Propriedades Descrio
FindText Texto a pesquisar
ReplaceText Texto a substituir (somente em ReplaceDialog)
Options Define caractersticas da caixa de dilogo
Evento Descrio
OnFind Ocorre aps o usurio pressionar o boto Find Next
OnReplace Ocorre quando o usurio pressiona o boto Replace (somente
em ReplaceDialog)
Mtodo Descrio
CloseDialog Fecha a caixa de dilogo
Propriedades Descrio
Items Itens do menu, utiliza o MenuEditor
Eventos Descrio
OnPopup Ocorre quando o menu popup ativado
155
Propriedades Descrio
Caption Texto do item
Checked Se o item esta marcado ou no
Visible Se o item esta visvel ou no
Enabled Se o item esta ativado ou desativado
ShortCut Tecla de atalho
Break Indica quebra de coluna
GroupIndex Indica que o item do menu pertence a um grupo
RadioItem Indica que o item de menu funcionra como um Radio, ou seja,
dentro do mesmo grupo apenas um item estr selecionado.
Eventos Descrio
OnClick Quando o item de menu selecionado, usado para executar a
funo do item
156
Respostas dos Exerccios
Capitulo 1
Capitulo 2
157
5) Qual a funo do Database Desktop? a ferramenta utilizada para a
criao/manuteno de tabelas de dados.
Capitulo 3
Capitulo 4
158
Capitulo 5
Captulo 6
1) Quais so os principais mtodos de pesquisa do componente Table?
So os mtodos FindKey / FindNearest e Locate.
2) Como podemos alterar dinamicamente o tamanho de um formulrio?
Modificando suas propriedades Height (altura) e Width (largura).
3) Qual a funcionalidade do componente PageControl? Ele permite a
criao de pginas que permitem separa itens na interface, como
acontece nas caixas de dilogo do Windows de propriedade de vdeo,
etc.
4) Para que serve as estruturas de controle de exceo try..finally..end?
Serve para criar uma proteo a execuo de uma rotina, garantindo
que os comandos escritos aps o finally sero executados mesmo que
ocorra algum erro nos comandos entre o try e o finally.
5) Qual o mtodo utilizado para sincronizar a posio de registro de dois
componentes Table configurados para acessar a mesma tabela? o
mtodo GotoCurrent.
Captulo 7
159
2) Qual o Componente responsvel pela criao de relatrios? o
QuickReport da guia QReport.
3) Para que serve o componente QRExpr? Serve para a efetuar clculos,
somatria e contagem em relatrios.
4) Como so construdos os relatrios? Atravs de bands (QRBands)
responsveis por separar os dados que devem ser exibidos (detail) de
outras partes como cabealho, rodap e sumrio (totalizaes).
5) Para que serve a funo WinExec? Executa um programa externo.
160