Documente Academic
Documente Profesional
Documente Cultură
e aplicaes Client/Server.
Este trabalho ser seu guia para uma rpida aprendizagem no desenvolvimento de
sistemas que gerencie bancos de dados. O Delphi encontrado em dois produtos:
Delphi Client/Server, de alta performance e facilidade para o desenvolvimento de
aplicaes e suporte a bancos de dados do tipo Cliente/Servidor.
Delphi Desktop, de alta performance e facilidade para o desenvolvimento de aplicaes e
suporte a bancos de dados locais, permitindo total portabilidade verso Client/Server.
Apresento-lhes a seguir algumas informaes detalhadas para um perfeito
desenvolvimento visual, sendo que ao final de cada captulo prtico exibido o cdigo fonte
completo seguido de um resumo dos principais comandos mostrados. Ao final deste estudo voc
encontrar apndices que lhe ajudaro a resolver pequenos problemas do dia-a-dia.
Delphi, como Soluo para Desenvolvedores
Muitas vezes nos perguntamos, e somos questionados, no porque de adotar o Delphi
como a linguagem para o desenvolvimento de sistemas ? Inicialmente, necessrio conhecer que
o Delphi oferece um rpido caminho para o desenvolvimento de aplicaes nos ambientes:
Windows
, Windows 95
e Windows NT
;
Bancos de dados do tipo Cliente/Servidor: Oracle
, Informix
, InterBase, SyBase
e
Microsoft SQL Server
;
Alta performance, em sistemas crticos;
Base de Dados locais e aplicaes do tipo network;
Ambiente grfico, visual e multimdia.
Mas o que possvel fazer com ele ? possvel criar, dentre outros, os seguintes tipos de
aplicaes em Delphi :
Us-lo como a linguagem de desenvolvimento para bancos do tipo Cliente/Servidor;
Ambiente heterogneo para captura e envio de informaes em diversos tipos de arquivos
de dados;
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
8
Um pacote corporativo de aplicaes inteligentes e interpretadores de dados.
Incorporando DLLs e EXEs externos;
Pacotes multimdia com desenho e animao;
Genricos utilitrios do Windows
;
Criao de bibliotecas (DLL) para leitura por outras aplicaes.
Mas porque arriscar em um ambiente novo quando existe no mercado linguagens mais
difundidas ? No mundo inteiro Delphi foi testado, e em 15 meses de vida produziu os seguintes
resultados:
Delphi est sendo utilizado no momento por mais de 1.500 lugares incluindo as maiores
corporaes, consultores e organizaes de treinamento;
Eleito pela Byte Magazines como Best of Comdex Award;
Vrios livros escritos;
Grupos de discusso e peridicos com dicas de desenvolvimento na WorldWibe
(Consulte s listas da InterNet atravs da palavra DELPHI );
Dezenas de bibliotecas e ferramentas para o suporte em Delphi;
Dezenas de artigos em publicaes do mundo inteiro, tais como PC Week, InfoWorld,
Computer Reseller News, PC Magazine, Windows Sources e muitas outras.
Por tudo aqui exposto fica claro que este no produto demonstra uma inovao para uma
criao em alta performance de aplicaes. Todos os recursos que voc precisar para o
desenvolvimento de seus produtos esto agora disponveis.
Feliz desenvolvimento.
Fernando Antonio F. Anselmo
Sempre que voc localizar este smbolo significa que existe uma nota que lhe ajudar
em caso de dvida.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
9
Captulo I
Conceito de Programao Orientada a Objeto
Para compreendermos melhor a novo ambiente de desenvolvimento da Borland o Delphi
necessrio que voc, aprenda e, tenha em mente os conceitos de POO (Programao Orientada a
Objetos), no confunda os conceitos com POE (Programao Orientada a Eventos) muito
difundido com o Access 2.0
(API);
Passar por cima das mensagens de loop do Windows
;
Mensagens semelhantes as do Windows
;
Cdigo puro da linguagem Assembler.
Como deu para perceber a base de toda a programao Delphi a linguagem Object
Pascal, ento neste captulo trataremos exclusivamente deste tipo de programao.
Smbolos Especiais
A Object Pascal aceita os seguintes caracteres ASCII:
[AL1] Comentrio:
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
11
Letras - do Alfabeto Ingls: A at Z e a at z.
Dgitos - Decimal: 0 at 9 e HexaDecimal: 0 at 9 e A at F (ou a at f)
Brancos - Espao (ASCII 32) e todos os caracteres de controle ASCII (ASCII 0 at
ASCII 31), incluindo final de linha e Enter (ASCII 13).
Especiais - Caracteres: + - * / = < > [ ] . , ( ) : ; ^ @ { } $ #
Smbolos - Caracteres: <= >= := .. (* *) (. .) //
O colchetes esquerdo ( [ ) e equivalente ao (. e o colchetes direito ( ] ) e equivalente a
.). A chave esquerda ( { ) e equivalente ao (* e a chave direita ( } ) e equivalente a *).
Palavras Reservadas
A Object Pascal se utiliza das seguintes palavras reservadas, no podendo as mesmas
serem utilizadas ou redefinidas:
And Exports Library Set
Array File Mod Shl
As Finnaly Nil Shr
Asm For Not String
Begin Function Object Then
Case Goto Of To
Class If On Try
Const Implementation Or Type
Constructor In Packed Unit
Destructor Inherited Procedure Until
Div Initialization Program Uses
Do Inline Property Var
Downto Interface Raise While
Else Is Record With
End Label Repeat Xor
Except
Uma outra lista a seguir, apresenta as diretivas que so utilizadas em contextos de
identificao de objetos:
Absolute Export Name Published
Abstract External Near Read
Assembler Far Nodefault Resident
At Forward Override Stored
Cdecl Index Private Virtual
Default Interrupt Protected Write
Dynamic Message Public
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
12
Nmeros
possvel definir variveis e constantes de tipos de Inteiro ou Real atravs de qualquer
decimal ordinrio ( 0 a 9 ), mas a Object Pascal tambm aceita a notao Hexadecimal utilizados
com o prefixo dollar ( $ ) ou a notao cientfica ( E ).
Constantes
Uma constante um identificador com valor(es) fixo(s). Um bloco de declaraes
constante possui a seguinte expresso:
[Declarao Constante] [Identificador] (=) [constante] (;)
A lista abaixo apresenta um conjunto de funes que podem ser utilizadas para a
declarao das constantes:
Ab Length Ord SizeOf
Chr Lo Pred Succ
Hi Low Ptr Swap
High Odd Round Trunc
Alguns exemplos para a definio de Constantes:
const Min = 0;
Max = 100;
Centro = (Max - Min) div 2;
Beta = Chr(225);
NumLetras = Ord('Z') - Ord('A') + 1;
MensOla = 'Instruo invlida';
MensErro = ' Erro: ' + MensOla + '. ';
PosErr = 80 - Length(MensErro) div 2;
Ln10 = 2.302585092994045684;
Ln10R = 1 / Ln10;
DigNumericos = ['0'..'9'];
LetrasAlpha = ['A'..'Z', 'a'..'z'];
AlphaNum = LetrasAlpha + DigNumericos;
Expresses
As expresses em Object Pascal (como em qualquer linguagem) formada por
operadores e operandos; os operadores so divididos em quatro categorias bsicas:
nicos @, Not
Multiplicativos >, /, div, mod, and, shl, shr, as
Adicionais +, -, or, xor
Relacionais =, < >, <, >, < =, > =, in, is
As expresses obdecem as regras bsicas de lgica para a precedncia da execuo das
operaes.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
13
Identificadores
Identificadores podem ser constantes, tipos, variveis, procedures, funes, unidades,
programas e campos de registros.
No existe limite de caracteres para o nome de um identificador mas apenas os 63
primeiros caracteres so significantes (no podendo ser idntico ao nome das palavras
reservadas). O nome de um identificador deve ser iniciado por Letras ou o carcter underscore ( _
). O resto formado por Letras, Dgitos, carcter underscore (ASCII $5F). No permitido a
utilizao de espaos para a formao do nome.
Exemplo de identificadores vlidos: Form1, SysUtils.StrLen, Label1.Caption
with... do...;
Delimita um determinado bloco de declaraes para um identificador especfico evitando a declarao deste
identificador. A sintaxe do comando : WITH {nome do identificador} DO {comandos};. Ex:
begin
{ ... comandos iniciais ... }
with form1 do
begin
Caption := Teste; Equivalente a Form1.Caption
BorderStyle := bsSizable; Equivalente a Form1.BorderStyle
end;
end;
array [ ... ] of ...;
Define um conjunto de variveis ou constantes de um mesmo tipo. A sintaxe do comando : array
[{quantidade de ocorrencias}] of {Tipo};. Os arrays so controlados por trs funes:
Funo Valor de Retorno
Low Primeiro elemento
High Aponta para o ltimo elemento
SizeOf Tamanho do array
Ex:
const
t: array [1..50] of Char { Declara 50 elementos para o tipo Char }
var
s : array[1..100] of Real { Declara 100 elementos para o tipo real }
ind: Integer;
begin
for Ind := Low(s) to High(s) do s[Ind] := 0; { Zera os elementos do array S }
if SizeOf(t) = C then exit; { Se o ltimo elemento do array T for C sai do bloco }
{ ... outros comandos... }
end;
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
14
Declaraes
Declaraes descrevem aes de um algortmo a serem executadas.
begin... end;
Prende um conjunto de declaraes em um bloco de comandos determinado. A sintaxe do comando :
BEGIN {comandos} END;. Ex:
begin
{ ... comandos iniciais ... }
begin
{ ... bloco 1 ... }
end;
begin
{ ... bloco 2 ... }
end;
{ ... comandos finais ... }
end;
if... then... else...;
Esta expresso escolhe entre o resultado de uma condio booleana o caminho verdadeiro (then) ou falso
(else). A sintaxe do comando : IF {condio} THEN {bloco de comandos} ELSE {bloco de
comandos};. Ex:
begin
{ ... comandos iniciais ... }
if x > 2 then
{ ... Bloco verdadeiro ... }
else
{ ... Bloco falso ... };
end;
goto... ;
Transfere a execuo de um programa para o ponto determinado pelo Label. A sintaxe do comando :
GOTO {Label};. Ex:
label
primeiro;
begin
{ ... comandos iniciais ... }
if x = 2 then
goto primeiro;
{ ... outros comandos ... }
Primeiro:
{ ... comandos do Primeiro ... }
end;
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
15
case... of... else... end;
Consiste de uma lista de declaraes que satizfaz a condio de um seletor de expresses, se nenhuma parte
da lista satisfizer ao seletor executa os comandos do sub-comando else. Para o seletor sero vlidos os
tipos definidos, tipo Inteiros ou LongInt. A sintaxe do comando : CASE {seletor} OF {Expresso 1}:
{comando da expresso 1}; {Expresso 2}: {comando da expresso 2}; {Expresso n}: {comando
da expresso n} ELSE {comando}; end;. Ex:
begin
{ ... comandos iniciais ... }
case x of
1: { ... Bloco para x = 1 ... }
2, 3: { ... Bloco para x = 2 ou X = 3... }
4..6: { ... Bloco para 4 <= x <= 6 ... }
else
{ ... Bloco para x < 1 ou x > 6 ... };
end;
end;
repeat... until;
Repete um determinado bloco de declaraes at a condio booleana do subcomando until ser satisfeita. A
sintaxe do comando : REPEAT {comandos}; until {condio};. Ex:
begin
{ ... comandos iniciais ... }
x := 0;
repeat
x := x + 1
until (x = 2);
end;
for... to (downto)... do...;
Incrementa em 1 uma determinada varivel inteira, repetindo um bloco de comandos, at que esta atinja o
valor final do intervalo, o subcomando downto realiza o incremento reverso. A sintaxe do comando :
FOR {variavel} := {valor inicial} to (downto) {valor final} do {bloco de comandos};. Ex:
begin
{ ... comandos iniciais ... }
for i := 1 to 10 do Executa o [comandos A] para i = 1,2,3,4,5,6,7,8,9 e 10
{ ... Comandos A ... }
for s := 10 downto 1 do Executa o [comandos B] para i = 10,9,8,7,6,5,4,3,2 e 1
{ ... Comandos B... }
end;
while... do...;
Repete um bloco de comandos enquanto que determinada condio booleana seja satisfeita. A sintaxe do
comando : WHILE {condio} DO {bloco de comandos};. Ex:
begin
{ ... comandos iniciais ... }
while i := 1 do Repete o [Bloco de comandos] enquanto i = 1
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
16
{ ... Bloco de comandos ... }
end;
break; ou continue...;
O comando break interrompe um bloco de repetio for, while ou repeat saindo do bloco. A sintaxe do
comando : BREAK; enquanto que o comando continue retorna a primeira instruo do bloco de
repetio for, while ou repeat. A sintaxe do comando : CONTINUE;. Ex:
begin
{ ... comandos iniciais ... }
for i := 1 to 10 do
begin
if i = 8 then
break; Salta para os [comandos C]
{... comandos A...}
if i = 5 then
continue; Retorna para o comando for pulando os [comandos B]
{... comandos B ...}
end;
{... comandos C ...}
end;
Blocos de Procedimentos ou Funes
As procedures ou funes so declaradas na seo de tipos de declaraes (abaixo do
comando type) pertencendo ao objeto ou serem do tipo public (pblicas - executadas por outras
unidades) ou private (particulares - restritas a unidade local).
Procedure
procedure {cabealho}; var {declarao das variveis}; {bloco de comandos};
O cabealho da procedure composto pelo nome do procedimento e variveis que sero
recebidas (ou modificadas atravs da declarao var, ex: procedure teste(var x:string);).
procedure soma(a,b: integer); Incio enviando as variveis A e B do tipo inteiro.
var Declarao de variveis locais.
c: integer;
begin Corpo do procedimento.
c := a + b;
end;
Function
function {cabealho} : {resultado}; var {declarao das variveis}; {bloco de comandos};
As funes se diferem dos procedimentos pela obrigatoriedade do retorno de um
resultado, podendo este resultado ser retornado pela declao: {nome da funo} := valor ou
result := valor.
function soma(a,b: integer) : integer; Incio enviando as variveis A e B do tipo inteiro.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
17
begin Corpo do procedimento.
soma := a + b; ou result := a + b;
end;
Junto com o Delphi 2.0 vem o manual de Object Pascal em formato .HLP, caso a
linguagem seja novidade para voc aconselho que voc d uma boa olhada (o Delphi 1.0 traz o
mesmo manual, mas em formato .PDF), mas no se preocupe com o que foi explicado acima j
est mais do que suficiente para uma boa inicializao com o Delphi.
Tudo o que vimos a cima o que normalmente temos em outras linguagens comuns, mas
o caracteriza realmente a linguagem Orientada em Objetos o trabalho e a manipulao com os
mesmos.
Caractersticas de Objetos
Mas afinal de contas, o que um objeto ? Como foi dito anteriormente, um objeto
qualquer tipo de elemento, ou componente, que envolva dados e cdigo dentro de um nico
pacote.
Uma vantagem de programar na POO e quanto a Herana dos objetos, este mtodo faz
com que seja possvel um objeto Filho poder herdar todas as caractersticas e contedos de um
objeto Pai. Tirando um pouco do Pascal da geladeira (a partir do Pascal verso 7.0 a Borland
tornou possvel a utilizao simplificada de todo o conceito de POO) aqui vai um cdigo
completo de declarao de dois objetos, o primeiro chamado de TPai e o segundo de Tfilho:
TPai = object
Nome: PChar;
constructor Init (P: PChar);
destructor Done;
procedure MudaNome(P: PChar);
procedure ShowName;
end;
TFilho = object(TPai)
procedure MudaNome(P: PChar);
end;
O segundo objeto TFilho herda do objeto TPai o ponteiro varivel Nome, a constructor
Init, o destructor Done e a procedure ShowName, apenas a procedure MudaNome ter o
funcionamento como uma caracterstica nica para cada objeto. O Delphi possui inmeros pais
(classes de objetos) prontos para serem usados por voc, tais como:
TForm: Centro das aplicaes Delphi, utilizados na criao de janelas, caixas de dilogo entre outros.
TMenu: Responsvel pela concepo de menus e menu popup.
TButtonControl: Simplifica o refinamento do controle da janela serve de base para os componentes como: Botes,
Check Box e Radio Box.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
18
Programando com objetos Delphi
Quando iniciado o Delphi, criado automaticamente um novo projeto e um objeto
formulrio (derivado da classe TForm) para o suporte dos demais objetos. Explorando o Editor
de Cdigos (Code Editor) voc poder observar a declarao do novo objeto da classe TForm que
foi produzido automaticamente com a criao do novo formulrio. Examinando o contedo deste
cdigo criado para o objeto, teremos:
unit Unit1; Abertura de uma nova unidade
interface Parmetros do obejetos
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Uso de outras unidades
Forms, Dialogs;
type
TForm1 = class(TForm) A declarao do objeto inicia aqui
private
{ Private declarations }
public
{ Public declarations }
end; Aqui o final da declarao
var
Form1: TForm1; Atribui a varivel Form1 as caractersticas do objeto TForm1
implementation Incio da parte a ser implementada
{$R *.DFM} Diretiva de compilao que agrega o desenho da tela (em
.DFM) com o mesmo nome da unidade
end. Final da parte implementada
Um novo tipo de objeto TForm1, declarado derivado da classe TForm, que tambm
um outro objeto. Relembre um objeto um tipo de elemento capaz de guardar dados e cdigo
dentro de um nico pacote. At agora, o tipo TForm1 no contm campos ou mtodos, isso
acontecer com a adio de alguns componentes neste objeto.
Observando o cdigo, notamos que existe uma varivel declarada com o nome Form1
para o novo tipo de objeto TForm1:
var
Form1: TForm1;
Form1 a chamada de instncia ao tipo TForm1. Esta varivel refere-se ao formulrio
em si, aonde ser adicionado componentes e desenhado a interface entre o computador e o
usurio que for operar o sistema. sempre notado declaraes de uma ou mais instncias
referidas ao tipo de objeto. Futuramente ser mostrado o poder deste tipo de declaraes quando
falarmos sobre janela MDI (Multiple Document Interface - Interface de documento mltiplos)
gerenciando vrias janelas filhas, no permitindo que estas janelas filhas saiam do espao
criado pela janela pai.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
19
Adicionando alguns componentes ao formulrio, veremos como o Delphi completar a
aplicao escrevendo automaticamente o cdigo, e permitindo que ao final tornar-se- possvel a
compilao (lembra-se do Clipper
(tais como
fontes, palheta de cores, ...) foram colocados na pgina Dialogs da palheta.
Voc poder criar seus prprios objetos como tambm instalar outros j prontos, para isso
foi colocado os espaos vazios. Por exemplo poder ser instalado novos controles e objetos do
Visual Basic
3.0
os objetos VBX). Uma das principais vantagens da POO que muito em breve dever ser
colocado no mercado pacotes de objetos prontos para serem integrados aos sistemas o que
facilitar ainda mais o desenvolvimento e a manuteno dos mesmos.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
24
Object Inspector
Providncia a conexo entre a interface visual e o cdigo. Composto por duas pginas
Properties (propriedades) e Events (Eventos) que mostrar as propriedades e eventos do objeto
selecionado.
Disponibiliza um fcil caminho para a personalizao dos objetos. Voc usar a pgina
de Propriedades para personalizar os objetos colocados no formulrio (inclusive o prprio
formulrio), e a pgina de Eventos para gerenciar a navegao entre certas partes do cdigo do
programa.
O seletor de objetos (Object Selector - localizado em um objeto do tipo ComboBox no
topo do Object Inspector) mostra o nome e o tipo de todos os componentes do formulrio
corrente (inclusive o prprio). Voc pode usar o seletor de objetos para localizar facilmente
qualquer objeto no formulrio.
SpeedBar
Contm os botes mais freqentemente utilizados. Fornecendo deste modo um atalho de
navegao ao menu principal do Delphi.
possvel a personalizao da SpeedBar colocando nela os caminhos do menu principal
que voc mais utiliza, bastando para isso:
1. Redimensione a SpeedBar. Para tanto posicione o cursor do mouse sobre o ponto de
encontro da SpeedBar com a Component Palette conforme o desenho abaixo:
2. Quando o cursor do mouse mudar de formato, clique o boto esquerdo do mouse e arraste
abrindo a rea da SpeedBar.
3. Clique com o boto direito do mouse na rea aberta, aparea um menu PullDown
contendo entre outras opes a opo Properties, selecione-a.
4. As categorias e os comando so divididos de acordo com o menu, clique em cima dos
comandos disponveis e arraste-os para a rea aberta de acordo com a sua necessidade,
para retirar os botes da SpeedBar faa o processo inverso.
Elementos no Visveis
Alguns elementos no esto prontamente visveis quando o Delphi iniciado mas voc
poder ter acesso a eles bastando para isso selecionar a opo na barra de menu.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
25
Project Manager
O Gerenciador de Projetos contm uma lista de formulrios ou unidades utilizados pela
aplicao, e serve para controlar estes formulrios ou unidades, adicionando-os ou removendo-os
do projeto, organizando as opes do projeto, entre outros.
Voc tambm poder colocar um boto para iniciar o Gerenciador de Projetos atravs
da SpeedBar ,
Menu Designer
O Menu Designer permite a criao de menus para os seus formulrios. Voc pode criar
menus ou menus do tipo pulldown atravs dos objetos MainMenu ou PopupMenu (localizado na
pgina Standard na Component palette). A criao completa de Menus ser colocada de forma
mais abrangente no Captulo IV.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
26
Fields Editor
Para o Delphi possvel editar e modificar as propriedades de quaisquer campos dos
objetos de tabelas associadas ao banco de dados, a Fields Editor em conjunto com a Object
Inspector controlam o modo de mostrar determinados campos de arquivos, importante lembrar
que esta modificao no afetar os campos da tabela, apenas para o formulrio ativo em questo.
Sua utilizao efetiva ser mostrada a partir do Captulo V.
Add fields... responsvel pela adio de
definies de campos da tabela, possvel inserir
um ou mais campos, dependendo de sua
utilizao para o formulrio.
New field... permite a criao de um novo
campo, este pode ser a derivao de um ou mais
campos da tabela.
Cut envia para rea de transferncia e elimina
todas as definies do campo selecionado.
Copy copia para a rea de transferncia todas as
definies do campo selecionado.
Paste recebe da rea de transferncia todas as
definies do campo selecionado criando-o.
Delete exclui quaisquer definio para os
campos.
Select all seleciona todas as definies dos
campos.
Retrieve Attributes atualiza os atributos do
campo selecionado com os campos do dicionrio
de dados.
Save attributes salva os atributos do campo
selecionado para o dicionrio de dados.
Save attributes as... salva os atributos do campo selecionado para o dicionrio de dados permitindo a
renomeao do campo.
Associate attributes... faz a associao dos atributos do campo selecionado com determinado campo do
dicionrio de dados.
Unassociate attributes remove a associao dos atributos do campo selecionado com determinado campo
do dicionrio de dados.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
27
Repositrio de Objetos
O Repositrio de Objetos do Delphi 2.0 armazena e gerencia os objetos da aplicao:
Formulrios, Data Modules, geradores experts, e DLL (Dinamic Linked Library - Bibliotecas de
acesso dinmico). Na essncia, ele centraliza as localizaes dos objetos envolvidos agrupado-os.
A proliferao dos objetos no repositrio incrementa as seguintes vantagens:
Suporte a equipe de desenvolvimento para referncia aos objetos da rede.
Uma customizao de todo o desenvolvimento em grupos lgicos de objetos, facilitando
o re-uso dos mesmos.
O Delphi possui diversas caractersticas quanto a sua utilizao. Tem os Tutors e Experts
que so as ferramentas responsveis para guiar-nos atravs de tcnicas, tais como, manipulao
de componentes e criao de simples aplicaes. Alm disso o Delphi oferece uma coleo de
modelos para formulrios, janelas de dilogo e at mesmo aplicaes completas na ferramenta
New Items. A janela do New Items sempre chamada automaticamente quando a opo File |
New... do menu principal executada.
possvel para voc criar novas janelas, ou projetos, automticos no Delphi. Para a
nossa sorte a Borland no esconde o jogo e mostra como se cria uma template visite o diretrio
\BORLAND\DELPHI 2.0\OBJREPOS, o equivalente no Delphi 1.0 encontrado no diretrio
\DELPHI\GALLERY, todos os exemplos so auto-explicativos.
Para definir o projeto padro que o New Items executar no incio de cada projeto,
clique com o boto direito acima da janela e escolha a opo Properties aparecer as listas Pages
e Objects, defina quaisquer dos objetos como New Form ou Main Form.
Observe que a segunda folha da janela New Items (ter o nome do seu arquivo com a
extenso .DPR) o seu projeto corrente, ou seja, uma nova janela poder ser derivada, por
caracterstica de herana, de uma outra janela j existente.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
28
Estrutura de Aplicaes com o Delphi 2.0
Um dos objetivos de desenhar aplicaes do tipo Client / Server para o desenvolvimento
a reutilizao dos objetos, das regras de negcio e das telas do projeto. O Delphi Client / Server
Suite 2.0 o nico que implementa uma arquitetura incorporando a tecnologia RAD (Rapid
Application Development - Desenvolvimento Rpido de Aplicaes) com o desenvolvimento
totalmente OO (Object Orientation - Orientado a Objetos) para a reduo do tempo de
desenvolvimento e manutenes improvveis. Adicionando, uma arquitetura aonde possvel a
separao da GUI (Grafic Unit Interface - Unidade de Interface Grfica), das regras de negcio
lgicas e do desenho do banco de dados de acordo com o modelo representado abaixo:
Benefcios:
1. A separao do desenho da GUI (atravs dos objetos Forms) com a rea de ligao
lgica de dados (atravs dos objetos Data Modules) permite que se cause um menor
impacto sobre ambas as reas. As mudanas podem ser executadas nas telas de entrada ou
nas ligaes, independentemente, de acordo com os requerimentos do usurio.
2. A separao do desenho da GUI com a rea de ligao lgica de dados realizada com
uma certa habilidade aos eventos envolvidos, poder no necessariamente dever ser
controlada por um habilidoso DBA (Database Administrator - Administrador de Banco
de Dados), com suas fantsticas regras de negcio, podendo inclusive ser mantida por um
analista de informaes.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
29
3. O desenho do banco de dados, a construo das metodologias de negcio e o desenho e a
criao das janelas de entrada so efetivados dentro da aplicao. O desenvolvimento,
ento paralelamente, resultar em uma maior rapidez.
4. Herdando as janelas de entrada, em nveis de utilizao, reduz-se drasticamente o
processo de codificao, e em conseqncia, o processo futuro de manuteno. As
mudanas lgicas das regras de negcio ou a incorporao de novos padres, so feitas
automaticamente para todos os objetos herdados.
5. O repositrio de objetos, os formulrios reusveis e a utilizao dos objetos Data
Modules, envolve em eliminao da duplicao de cdigos e de trabalhos com desenhos
de janelas, e em conseqncia na reduo da equipe de desenvolvimento.
Implementao efetiva
Objetos Data Module
A partir do Delphi 2.0 foi incorporado o uso de objetos conhecidos por Data Module,
que servem para que suas aplicaes providenciem um desenho centralizado da definio de
acesso aos dados e das regras de negcio. Os objetos Data Modules, tambm podem ser
separados por negcios lgicos (como exemplo por reas: compras, vendas, estoque, etc.)
formando caminhos de conexes simples.
Os objetos Data Modules podem ser aplicados a objetos tais como Tables, Stored
Procedures, ou Queries permitindo a centralizao dos eventos envolvidos em antes e
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
30
depois da gravao, excluso, insero ou edio dos dados. E at mesmo na colocao
de novos objetos de controle para maior facilidade.
As relaes de dados Master / Detail so definidas em menor quantidade. Possibilita
ento ao desenvolvedor criar aplicaes do tipo Client / Server de forma mais fcil,
rpida, e segura se utilizando das propriedades dos objetos Datasources ou utilizando o
Database Form Expert.
Os formulrios das aplicaes, podem ser ligados diretamente a um ou mais objetos Data
Module para a propagao das regras de negcio sem a necessidade de execuo de um
cdigo extra.
Os objetos Data Modules so classes de objetos que pertencem a interao dos dados do
database server. Isolando totalmente o acesso ao banco de dados com a aplicao Client,
simplificando deste modo toda a manuteno realizada.
O Acesso ao Delphi aos bancos de dados se processa da seguinte maneira:
Distribuio Lgica da Aplicao:
Os objetos Data Module foram desenvolvidos para criar uma centralizao lgica de
todas as regras de negcio, separando a rea de viso do usurio com a rea do desenho do Banco
de Dados. Este slido fundamento de suporte so distribudos em um n-nmero de aplicaes e
arquiteturas servidoras disponveis, tais como CICS da IBM, TopEnd da ATT, Tuxedo da
Novell, Object Broker da Digital, IONA da Orbix e muitas outras.
Dicionrio de Dados Escalvel
O dicionrio de dados utilizado para armazenar informaes sobre o uso dos dados
contidos nas suas tabelas. O dicionrio deve ser como uma rvore genealgica trabalhando como
um inspetor de modificaes que permitem um armazenamento facilitado. O dicionrio deve
conter informaes dos atributos dos campos tais como: valores mnimo, mximo e comuns
(valores default), mscaras utilizadas, etc. A utilizao do dicionrio de dados traz as seguintes
vantagens:
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
31
1. Consistncia: Campos idnticos so armazenados centralmente no dicionrio isto reduz
o tempo de definio das duplicidades. Um desenvolvedor poder criar os campos
complementares com domnios e aplicaes apropriadas.
2. Reduo do Trfico da Rede: O Delphi permite que a validao dos dados seja feita nas
mquinas client ou no servidor. O Dicionrio de dados permite que a manuteno dos
atributos dos campos do lado client seja validado de forma eficiente reduzindo a
necessidade do trfego da rede.
Herdando os Formulrios
O desenvolvimento de aplicaes corporativas de uma forma padronizada um fato de
suma importncia para as empresas envolvidas. Mas conseguir e manter este padro uma tarefa
considerada praticamente impossvel, j que as aplicaes devem se modernizar na velocidade
que o mercado de informtica exige. Os formulrios herdados do Delphi so simples extenses da
programao orientada a objetos, conseguindo manter, de forma automtica, os padres e as
modificaes realizadas nos projetos. E em conjunto com o Repositrio de Objetos, padroniza,
organiza e centraliza os formulrios resultando em modificaes de curtssimo tempo.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
32
Ferramentas Auxiliares de SQL
Para o trabalho com bases de dados padro SQL (Structure Query Language -
Linguagem estruturada de Consultas), o Delphi conta com as seguintes ferramentas RAD que
auxiliam ao desenvolvimento.
Monitor SQL
Um monitor SQL um ferramenta para testes, depurao e execuo de consultas SQL
em aplicaes Client / Server. Isto resulta em um aumento da produtividade de desenvolvimento e
melhor performance da aplicao.
O monitor SQL, intercepta as chamadas entre as mquinas client e o servidor. Esta
informao auxilia ao desenvolvedor em problemas relacionados as declaraes SQL e otimiza
este tipo de transao. Uma srie de caminhos de interceptaes podem ser traados, dependendo
da necessidade do desenvolvedor, para que as informaes a serem colocadas em um relatrio on-
line sejam as mais imprescindveis o possvel. possvel inclusive salvar e imprimir o relatrio
gerado para consultas ou testes posteriores.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
33
SQL Explorer
A ferramenta SQL Explorer providencia uma informao centralizada do gerenciamento
das demandas da base de dados; tais como, suporte a modificao e criao de tabelas, sinnimos,
procedimentos de gravao, triggers (gatilhos disparados pelo banco) e execuo das regras de
negcio interativas do SQL. Uma ferramenta grfica que proporciona um esquema de integridade
da base da dados e contm as ferramentas essenciais para os administradores de bancos de dados.
O SQL Explorer, unicamente para o Delphi, administra de forma intuitiva e fcil o
banco de dados. A simplicidade de uso da interface grfica um perfeito caminho para
representar o complexo relacionamento que existe no banco de dados do servidor. Apresenta um
esquema para informaes em bancos como Oracle
, Sybase
, InterBase, Informix
, DB2
e
outros. O desenvolvedor poder trilhar campos, tabelas e procedimentos do banco dentro da
construo da aplicao Delphi rapidamente, podendo ser direcionado para mltiplos servidores e
mltiplos bancos.
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
34
O SQL Explorer, tambm administra o Dicionrio de Dados. Sua interface de uso
simplicado permite facilmente definir novos domnios para os atributos dos campos e associao
entre tabelas.
InterBase NT - Banco de Dados Relacional
O Delphi Client / Server Suite 2.0 inclui uma licena para dois usurios do uso do banco
de dados InterBase NT. Desenvolvedores podem criar em mquinas standalone aplicaes
usando este poderoso banco de dados (concorrente de bancos como Oracle
, Sybase
,
Informix
, DB2
3.1, Windows
95, Windows
NT, NetWare
, SCO
, Sun OS
, Sun
Solaris
, HP-UX
, IBM AIX
, SGI IRIX
, etc.
O InterBase um banco a nvel ANSI SQL 92, suportando eventos programados e
excees ocorridas no modelo por acesso de mltiplos usurios. Oferece chaves de controle a
nvel de registros para arquiteturas Multi-Gerenciais causando um performance muito superior a
uma leitura das operaes de banco, em contrrio das leituras de blocagem de operaes escritas
realizadas por outros bancos.
A verso local do InterBase, disponvel apenas com a cpia Client / Server Suite 2.0,
providencia aos desenvolvedores um caminho rpido para o desenvolvimento de prottipos e de
sistemas com um banco de padro ANSI 92 SQL. Esta verso propicia as mesmas funcionalidades
da verso multi-usurio para NT e Unix, incluindo controles de transaes, procedimentos de
gravao (stored procedures), uso de triggers (gatilhos disparados do banco), ou eventos de
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
35
alerta. Imagine o desenvolvimento de um grande sistema sendo realizado em um Laptop dentro
de um trem, avio ou at mesmo na frente do cliente, apenas o acesso ao banco de dados final
que ser modificado.
Utilizando o Delphi Client/Server Suite 2.0, desenvolvedores podero conceber e
desenhar prottipos e testar a aplicao final em uma nica mquina. O InterBase oferece um
excepcional acesso a interface grfica do Windows
(arquivos .HLP).
Captulo III
Projeto Piloto
bvio que fica mais simples o aprendizado de uma nova ferramenta quando se faz
algum tipo de aplicativo, principalmente um que seja til, ento ao longo deste estudo, iremos
desenvolver um aplicativo destinado ao Cadastro de Compact Disc (CDs). Todas as pessoas hoje
em dia tem montes de CDs, virou uma espcie de febre, ento, porque no fazer um sistema para
cadastr-los e control-los, quanto tempo voc j perdeu pensando em qual deles est aquela
msica que voc quer ouvir? Ou uma capa que seu filho rasgou, que tal imprimi-la novamente? E
no captulo multimdia aprenderemos um mtodo para tocar o CD.
Para darmos partida ao nosso primeiro aplicativo (Projeto Piloto), definiremos
inicialmente as nossas necessidades:
1. Permitir o cadastro completo e a consulta aos CDs;
2. Ser possvel separar os CDs em categorias, facilitando deste modo a busca e o
armazenamento;
3. Quanto as msicas deve ser permitido o cadastro do autor e o tempo de durao;
4. Permitir a incluso da foto da capa do CD; e
5. Comportar relatrios de conferncia e reimpresso da capa.
O acesso Delphi a arquivos pode ser feito atravs de duas maneiras local ou remoto,
sendo a segunda apenas possvel pela cpia CLIENT-SERVER voltadas a bases de dados mais
complexas como ORACLE
ou SYBASE
, SYBASE
ou superior
0 megabytes de espao livre para a instalao mnima
0 megabytes de espao livre para a instalao completa
um processador 80386 ou maior (486 recomendado)
megabytes de RAM
Para instalar, rode o programa INSTALL.EXE direto do CD ROM ou do disquete e
prossiga com as instrues. Sero includas informaes adicionais no arquivo README.TXT
normalmente instalado no diretrio \DELPHI.
Alguns exemplos de aplicaes esto contidas no diretrio \DELPHI\DEMOS.
169
Apndice B
Converso de Campos
possvel, com o DELPHI, criarmos um mesmo sistema que rode em diferentes tipos de
bases, atravs de um nico ALIAS. Para isto precisamos que a definio, tamanho e nome dos
campos e tabelas sejam necessariamente os mesmos. Abaixo est a converso para quatro bases
lgicas de dados:
Sintaxe SQL - para InterBase, ORACLE
, Informix
entre outras.
BDE Lgico - A chamada do campo interna ao DELPHI.
Paradox - Bases do tipo Paradox.
dBASE - Bases do Tipo .DBF.
Sintaxe SQL BDE Lgico Paradox dBASE
SMALLINT fldINT16 Short Number (6,10)
INTEGER fldINT32 Long Integer Number (20,4)
DECIMAL(x,y) fldBCD BCD N/A
NUMERIC(x,y) fldFLOAT Number Number (x,y)
FLOAT(x,y) fldFLOAT Number Float (x,y)
CHARACTER(n) fldZSTRING Alpha Character
VARCHAR(n) fldZSTRING Alpha Character
DATE fldDATE Date Date
BOOLEAN fldBOOL Logical Logical
BLOB(n,1) fldstMEMO Memo Memo
BLOB(n,2) fldstBINARY Binary Binary
BLOB(n,3) fldstFMTMEMO Formatted memo No Apresenta
BLOB(n,4) fldstOLEOBJ OLE OLE
BLOB(n,5) fldstGRAPHIC Graphic No Apresenta
TIME fldTIME Time No Apresenta
TIMESTAMP fldTIMESTAMP Timestamp No Apresenta
MONEY fldFLOAT, fldstMONEY Money Float (20,4)
AUTOINC fldINT32, fldstAUTOINC Autoincrement No Apresenta
BYTES(n) fldBYTES(n) Bytes No Apresenta
x = preciso (default: especfico para o driver)
y = escala (default: 0)
n = tamanho em bytes (default: 0)
1-5 = BLOB subtipo (default: 1)
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
170
Tipos de Dados para o InterBase
O InterBase suporta alguns tipos de dados SQL, mas no suporta diretamente dados do
tipo TIME ou TIMESTAMP. A lista abaixo contm os tipos de dados disponveis para as
declaraes SQL no InterBase:
Nome Tamanho Preciso Descrio
BLOB Varivel No apresenta Objeto do tipo binrio largo, possvel guardar
dados grandes, tais como grficos, textos e voz
digitalizada.
CHAR(n) n Caracteres 1 at 32767 Tamanho fixo de caracteres ou tipo de string. O
nome tambm pode apresentar : CHARACTER.
DATE 64 bits 1 jan 100 at 11
jan 5941
Tambm inclui todas as informaes sobre a hora.
DECIMAL
(preciso, escala)
varivel Preciso: 1 at
15 e escala de 1
at 15
Especifica-se por preciso o nmero de dgitos a
serem gravados e por escala o nmero de casas
decimais, exemplo DECIMAL(10,3) igual ao
formato: ppppppp.eee.
DOUBLE
PRECISION
64 bits 1,7 x 10
-308
at
1,7 x 10
308
Utilizado para valores cientficos, com 15 dgitos
de preciso.
FLOAT 32 bits 3,4 x 10
-38
at
3,4 x 10
38
Preciso simples, com 7 dgitos de preciso.
INTEGER 32 bits -2.147.483.648
at
2.147.483.648
Campo do tipo longo.
NUMERIC
(preciso, escala)
varivel Preciso: 1 at
15 e escala de 1
at 15
Especifica-se por preciso o nmero de dgitos a
serem gravados e por escala o nmero de casas
decimais, exemplo NUMERIC(10,3) igual ao
formato: ppppppp.eee.
SMALLINT 16 bits -32.768 at
32.767
Campo mdio.
VARCHAR(n) n Caracteres 1 at 32767 Tamanho varivel de caracteres ou tipo de string. O
nome tambm pode apresentar : VARYING
CHAR ou VARYING CHARACTER.
171
Apndice C
Aplicao rpida com o Objeto Query
Para no ficar quaisquer dvidas sobre o objeto tQuery , vamos utiliz-lo para a
demonstrao de uma pequena aplicao, neste exemplo, utilizaremos a base de dados encontrada
no diretrio C:\DELPHI\DEMOS\DATA utilizaremos as tabelas: Customer, Orders, Parts e
Items. A idia mostrar um formulrio com o nome do cliente ligado a um Grid com todas as
encomendas pertencentes a este cliente. Conforme a figura abaixo:
Para comear, coloque em um novo formulrio um objeto tTable e um objeto
tQuery. O objeto tTable efetuar a ligao com a tabela de Clientes (Tabela Customer),
enquanto que o tQuery ir extrair os detalhes da encomenda (Tabelas Orders, Parts e Items)
apropriados a cada cliente. Os dados esto em uma tabela Paradox, pelo que na propriedade
DataBaseName colocado o nome do diretrio que contm os dados (ou defina o nome do
Alias: DBDemos). A ligao completada atravs da definio das propriedades TableName e
IndexName, e se alternarmos a propriedade Active para true vemos os dados reais, mesmo
durante a fase de construo do formulrio.
Se os registros contendo os detalhes dos pedidos estivessem todos em uma nica tabela, a
juno poderia ser facilmente realizada pela definio das propriedades MasterSource e
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
172
MasterField de um segundo objeto tabela, mas, uma vez que necessitamos de dados de mais de
uma tabela (Orders e Products), esta tcnica simples no funciona. O controle de consulta
recupera um conjunto diferente de registros para cada cliente, extraindo dados das duas tabelas
ligadas. O Delphi oferece duas tcnicas para fazer isto: Uma delas envolve o uso de variveis
Calculadas para uma das trs tabelas em questo; uma outra (mais simples) envolve atribuio
de um valor propriedade SQL do objeto tQuery, ou seja, uma instruo SQL apropriada. Neste
exemplo, vamos fazer colocando algum cdigo no evento OnDataChange do objeto
DataSource. Lembre-se que este evento chamado sempre que o registro corrente alterado.
Insira a seguinte instruo na propriedade SQL do objeto tQuery:
SELECT Orders.OrderNo, Items.Qty, Parts.Description, Parts.ListPrice
FROM Orders, Items, Parts
WHERE Orders.OrderNo = Items.OrderNo AND
Items.PartNo = Parts.PartNo AND
Orders.CustNo = :CustNo;
Repare no cdigo SQL na varivel :CustNo, v para a propriedade Params do objeto
tQuery e coloque para a varivel CustNo criada o Data type como Float, est varivel ser
passada para o SQL atravs do evento OnDataChange do objeto DataSource, insira o seguinte
cdigo:
procedure TForm1.DataSource2DataChange(Sender: TObject; Field: TField);
begin
Query1.Close;
Query1.Params[0].AsFloat := Table1CustNo.Value;
Query1.Open;
end;
Relembrando no Delphi os dados fluem da base de dados para o formulrio na
seguinte seqncia:
Base de Dados objeto DataSet (tTable ou tQuery) objeto DataSource objeto Campo
O objeto DataSource necessrio, pois os objetos de campo no podem ligar-se
diretamente aos objetos do DataSet, mas apenas atravs de um objeto DataSource.
Por conseguinte, para cada objeto DataSet tambm colocado no formulrio um objeto
DataSource. Finalmente, so adicionados objetos de caixa de edio de texto, um objeto Grid
para as linhas da encomenda e um objeto dbNavigator ligado a tabela de Customer, rode o
projeto.
objeto Grid est ligado ao objeto tQuery (atravs do objeto DataSource), ento este
se atualiza automaticamente com os novos resultados das consultas.
173
Apndice D
Imprimindo um Formulrio
Para imprimir um formulrio no tem nenhum segredo, existe o comando PRINT
relacionado a formulrios, o problema se inicia quando o formulrio ultrapassa as dimenses da
tela do seu monitor, ou seja, a largura e altura dele maior que a tela. Digamos um formulrio
qualquer que tenha a propriedade HorzScrollBar.Range = 768 e VertScrollBar.Range = 1008 (isto
corresponde a uma folha de papel tamanho A4).
O programa abaixo resolve exatamente este problema, imprimindo somente objetos:
Tlabel, TEdit, TMemo, TDBText, TDBEdit e TDBMemo, utiliza a biblioteca Printers para
fazer o servio, coloque um boto qualquer no formulrio que deseje imprimir e para o evento
onClick, digite os seguintes comandos:
procedure Tform1.SpeedButton1Click(Sender: TObject);
var
C : array[0..255] of char;
CLen, ScaleX, ScaleY, Ind : Integer;
Format : Word;
DC : HDC;
MComp : Tmemo;
R : TRect;
begin
Printer.BeginDoc;
DC := Printer.Canvas.Handle;
ScaleX := GetDeviceCaps(DC, LOGPIXELSX) div PixelsPerInch;
ScaleY := GetDeviceCaps(DC, LOGPIXELSY) div PixelsPerInch;
for Ind := 0 to ComponentCount -1 do
if (Components[Ind] is TCustomLabel) or (Components[Ind] is TCustomEdit) then
begin
MComp := TMemo(Components[Ind]);
if (MComp.visible) then
begin
Printer.Canvas.Font := MComp.Font;
DC := Printer.Canvas.Handle;
R := MComp.BoundsRect;
R.Top := (R.Top + VertScrollBar.Position) * ScaleY;
R.Left := (R.Left + HorzScrollBar.Position) * ScaleX;
R.Bottom := (R.Bottom + VertScrollBar.Position) * ScaleY;
R.Right := (R.Right + HorzScrollBar.Position) * ScaleY;
if (not (Components[Ind] is TCustomLabel)) and (MComp.BorderStyle = bsSingle) then
Printer.Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
Format := DT_LEFT;
if (Components[Ind] is TEdit) or (Components[Ind] is TCustomMaskEdit) then
Format := Format or DT_SINGLELINE or DT_VCENTER
else
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
174
begin
if MComp.WordWrap then
Format := DT_WORDBREAK;
if MComp.Alignment = taCenter then
Format := Format or DT_CENTER;
if MComp.Alignment = taRightJustify then
Format := Format or DT_RIGHT;
R.Bottom := R.Bottom + Printer.Canvas.Font.Height + 1;
end;
CLen := MComp.GetTextBuf(C,255);
R.Left := R.Left + ScaleX + ScaleX;
DrawText(DC, C, CLen, R, Format);
end;
end;
Printer.EndDoc;
Close;
end;
Se voc conhece um pouco de Pascal 7.0 no acredito que voc teve dificuldades em
interpretar o programa, se voc no conhece aqui vo algumas dicas:
Inicialmente foi declarado uma srie de variveis que sero utilizadas posteriormente. E
ento iniciado o objeto de impresso Printer atravs do comando:
Printer.BeginDoc;
O objeto imprime atravs de uma subclasse conhecida por Canvas. Esta classe e que
torna possvel a criao de toda a interface grfica do Delphi (Este objeto parte de um
encapsulamento da Windows HDC). Uma forma simples de se imprimir seria utilizar os seguintes
comandos:
Printer.BeginDoc;
Printer.Canvas.TextOut(0, 0, Est imprimindo...);
Printer.EndDoc;
Mas, para se obter uma cpia fiel do formulrio preciso fazer mais do que isto,
inicialmente e chamada a propriedade handle (esta faz uma chamada a Windows GDI chamando
funes da API para requerer o modo de desenho dos objetos envolvidos), prximo passo
verificar o tipo de escala (em pixels) da largura e altura da janela a ser impressa.
Agora resta verificar objeto a objeto (do tipo Label ou do tipo Edit) e enviar suas
caractersticas para os dados da classe Canvas e imprim-los. Lembre-se o padro de impresso
do Windows
) a partir de um aplicativo
(de trs maneiras diferentes: normal, maximizado e minimizado):
WinExec(C:\windows\notepad.exe, SW_SHOWNORMAL);
WinExec(C:\windows\notepad.exe, SW_SHOWMAXIMIZED);
WinExec(C:\windows\notepad.exe, SW_SHOWMINIMIZED);
7. Como varrer uma tabela inteira:
Table1.First;
if not Table1.Eof then
repeat
{ seus comandos para a tabela }
Table1.Next
until Table1.Eof;
8. Como interceptar as teclas de funo:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_F5 then
ShowMessage(Voc pressionou a F5);
end;
{ pode ser usado da VK_F1 a VK_F12 }
9. Como os valores de campos de uma tabela para outra:
{ Este exemplo copia apenas tabelas de mesma estrutura }
var
Num: SmallInt;
begin
for Num := 0 to TabelaOrigem.FieldCount - 1 do
begin
TabelaDestino.Insert;
TabelaDestino.Fields[Num].Assign(TabelaOrigem.Fields[Num]);
TabelaDestino.Post;
end;
end;
10. Como verificar se um campo inteiro par ou mpar:
function TestaParaPar(TestaInteiro : Integer) : boolean;
begin
if (TestaInteiro div 2) = (TestaInteiro/2) then
result := True
else
result := False;
end;
11. Como verificar se uma string contm um inteiro:
function IsInteger(TestaString: String) : boolean;
begin
try
StrToInt(TestaString);
except
On EConvertError do result := False;
else
result := True;
end;
end;
12. Como subtrair datas:
function SubData(DataEmprestimo: TDataTime) : Integer;
begin
result := Date - DataEmprestimo;
end;
Borland
Delphi e Delphi Client/Server Desvendando o Caminho das Pedras
182