You are on page 1of 90

Centro de Treinamento Invictos Tecnologia (www.invictos.com.

br/cti ) Delphi Bsico


Pgina 1 de 90
Verso 05/04/2013
















CURSO DE DELPHI BSICO
EMBARCADERO RAD STUDIO XE3









Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 2 de 90
Verso 05/04/2013

CONTEDO PROGRAMTICO

Conhecendo a IDE do Delphi
Projetos, Units e Formulrios
Pascal para Programadores C - Entenda as principais diferena e entendenda
a Delphi Language: Variveis, operadores, laos de repetio (For, while e
repeat), estrutura de deciso (IF, then, else, case), Procedimento e Funo,
uso de with com componentes e objetos.
Estrutura de Programa e Escopo
Programao dirigida a eventos e objetos
Conhecendo propriedades e eventos do Form, Label, Edit, Button, CheckBox,
Radio Button, Panel, Image, BitButton e MaskEdit.
OpenImageDialog e SaveImageDialog
Interao com o usurio atravs de Mensagens e Caixas de Entradas
(showmessage, messagedlg e inputquery).
Criando Menus e Popup Menus
Mltiplos Formulrios
O Poder da Classe StringList e o seu uso nos componentes Memo, ListBox,
Combobox e Rdio Group
Uso da TabbedNotebook, PageControls, TrackBar e ProgressBar
Status Bar e Toolbar
Uso de Timers
StringGrid bsico para mostrar informaes
Criando Units com Funes
Passando componentes e formulrios de parmetro
Manipulando Arquivos Textos
Desenvolvimento de um Software de Agenda com arquivo texto


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 3 de 90
Verso 05/04/2013
Conhecendo a IDE do Delphi

IDE (Integrated Development Environment), um ambiente integrado para desenvolvimento de
software



Welcome Page - Pgina de Boas Vindas



Nesta pgina voc encontrar possibilidade de visualizar os projetos abertos recentemente,
criar novos projetos, verificar as novidades dos produtos Embarcadero, ter acesso a
documentao e helps entre outras funes.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 4 de 90
Verso 05/04/2013
Palheta Standard



Palheta responsvel por criar novas units, abrir units existentes, salvar a unit atual, salvar tudo
e adicionar ou remover units externas aos nossos projetos.

Palheta Desktop



Esta palheta serve para configurarmos o nosso ambiente de trabalho, j existem alguns
modelos prontos, porm voc pode personalizar seu ambiente de trabalho, com as janelas e
posies das mesmas da forma que voc preferir.

Palheta View



Responsvel por Visualizar as units, formulrios e alternar entre Visual (form) e Cdigo (unit)

Palheta Debug



Palheta Responsvel pela Depurao do Projeto, ou seja, compilar, compilar e executar,
pausar a depurao, fazer depurao linha a linha, entre outras opes de depurao.
Veremos a funo de cada uma dessas opes mais adiante.

Tool Palette - Palheta de Ferramentas (Ctrl + Alt + P)

Nesta palheta voc encontrar as ferramentas necessrias para trabalhar, quando no
estamos com nenhum projeto aberto a palheta de ferramentas mostrar os possveis projetos
que podem ser criados.



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 5 de 90
Verso 05/04/2013
No curso bsico trabalharemos com projetos do tipo VCL Forms Application, d dois cliques
sobre essa opo e um novo projeto ser criado.

Veja que agora a Palheta de Ferramentas ir mostrar as opes de componentes referentes ao
tipo de projeto escolhido:



Project Manager Gerenciador de Projetos (Ctrl +.Alt + F11)

Nesta palheta voc poder gerenciar os projetos abertos, visualizando seus arquivos,
plataforma que ser usada para depurao (Windows, Mac, Ios..), adicionando e removendo
novos arquivos ao projeto.



Structure Palheta de Estrutura dos componentes (Shift + Alt + F11)

No exemplo abaixo eu inseri dois componentes no formulrio e a palheta Estrutura mostrou
como eles esto organizados, ou seja o Edit1 e o Memo1 esto dentro do Formulrio Form2.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 6 de 90
Verso 05/04/2013


Object Inspector Palheta Inspetor de Objetos (F11)

Esta uma das palhetas que teremos o maior contato durante o desenvolvimento, atravs
dela que acessaremos as propriedades e eventos do componente selecionado, no exemplo
abaixo foi selecionado um Edit (caixa de entrada) e o object inspector est listando todas as
propriedades do mesmo, na segunda imagem o object inspector est listando todos os eventos
do Edit selecionado.



Menu View

Atravs deste Menu voc poder abrir janelas e visualizar os atalhos para cada uma delas.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 7 de 90
Verso 05/04/2013



Projetos, Units e Formulrios



Um projeto uma coletnea de arquivos necessrios para que um programa possa funcionar,
no Delphi XE3 existem diversos tipos de projetos, como por exemplo:

VCL Forms Aplicattion Aplicao baseada em formulrios VCL (Visual Component Library),
biblioteca de componentes visuais, a VCL herda do Windows o visual de seus componentes,
podendo inclusive serem modificados caso o tema do Windows seja modificado.

Firemonkey Desktop Application Aplicao que pode ser usada em mltiplas plataformas
desktop (Windows, Mac Os), com componentes redesenhados e estilizados.

VCL Metropolis UI Application Aplicao baseada em VCL, porm com recursos visuais do
tema Metropolis (Windows 8).
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 8 de 90
Verso 05/04/2013
Entre outros projetos.

Vcl Forms Applicattion

Este ser o projeto que utilizaremos durante o curso, baseado em uma biblioteca de
componentes visuais, herdadas da API (Application Programming Interface - Interface de
Programao de Aplicativos) do Windows, caso voc troque a aparncia do Windows, a
aplicao sofre modificaes visuais, pois a prpria API do Windows que desenha os
componentes.

Um projeto uma coletnea de units e formulrios para gerar uma aplicao.
Uma unit (.pas) pode existir por si s.
Um formulrio depende de uma Unit (.pas) e de um arquivo (.dfm), a unit contm o cdigo
funcional da aplicao e arquivo dfm contm o cdigo dos componentes visuais do formulrio.

Exemplo de um projeto



Exemplo de uma unit que contm um formulrio



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 9 de 90
Verso 05/04/2013

Entendendo a estrutura de uma UNIT

unit Unit2; //nome da Unit

interface //bloco de interface responsvel pelas declaraes

uses //declara as units (bibliotecas) que sero usadas
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

Type //criao de novos tipos

//Criando uma classe herdada da classe TFORM
TForm2 = class(TForm)
private
{ Private declarations }
Public
{ Public declarations }
end;


var //variveis globais a esta unit
Form2: TForm2;

implementation //Bloco de implementao

{$R *.dfm}

//rea onde sero implementados os mtodos, procedimentos e funes


end. //indica o fim da unit

Exemplo do dfm deste formulrio

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 10 de 90
Verso 05/04/2013



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 11 de 90
Verso 05/04/2013
Um pouco da Delphi Language e converso de sintaxe


Como o foco de nosso curso so alunos que j tem um certo conhecimento em C ou Java,
explanaremos aqui as principais diferenas de sintaxe entre as duas linguagens.

Operadores

+ Soma
- Subtrao
* Multiplicao
/ Diviso

Comentrios

// comentrio de uma linha

(*
Comentrio em
Bloco
*)

{
Comentrio em
Bloco

}


Em C Em Pascal
Atribuio = :=
Comparao == =
Estrutura condicional If (cont==3)
{

}
If (cont=3) Then
Begin

End;

Estrutura condicional com else If (cont==3)
{

}
else
{
}
If (cont=3) Then
Begin

End
else Begin

End;
Lao de Repetio FOR for (i=0;i<=3;i++)
{

}

for (i=3;i>=0;i--)
{

}


for cont:=0 to 3 do
Begin

End;

for cont:=3 downto 0 do
Begin

End;


Lao de Repetio WHILE
while( i <= 100 )
While (i<=100)
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 12 de 90
Verso 05/04/2013
{

}
Do Begin

End;
Mdulo ou resto da Diviso If ((4 % 2) ==0)
{
printf (" par );
}
If ((4 mod 2)=0)
Then Begin
Showmessage( par);
End;


Modularizao: Funes e Procedimentos

Procedimentos

Em C

void soma()
{

}

Em Pascal

Procedure Soma;
Begin

End;

Funes

Em C

Int soma()
{
return 30; // sai da funo nesta linha e retorna 30
}

Em Pascal

Function soma:integer;
Begin
Result:=30; //armazena 30 na varivel de retorno, mas no sai nesta linha
Exit; //no obrigatrio, mas serve para sair da funo.
End;

Passagem de parmetros em procedimentos e funes

Passagem por argumento

Em C

int soma (int a,int b)
{
return a+b;
}

Em Pascal

Function soma (a,b:integer):integer;
Begin
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 13 de 90
Verso 05/04/2013
result:=a+b;
End;

Passagem por referncia

Em C

int soma (int& a,int& b)
{
}

Em Pascal

Function soma (var a,b:integer):integer;
Begin
End;

ESCOPO DE VARIVEIS

Assim como em C, se uma varivel for declarada dentro de uma funo, o escopo dela apenas a
funo.

Para declarar uma funo em Pascal existem reas especficas para esse procedimento, diferentemente
de C que uma varivel pode ser declarada em qualquer parte do cdigo.

Declarando variveis dentro de um procedimento (entre o nome da funo e o Begin)

Procedure Soma;
Var
A,b:integer;
Texto:string;
Begin
End;

Declarando uma varivel Global a uma Unit (no var antes do implementation da unit, junto a varivel do
formulrio)

var
Form2: TForm2;
Aglobal:integer; //aqui

implementation

{$R *.dfm}

....


TIPOS DE DADOS COMUNS

Inteiros

Tipo Faixa Aproximada
ShortInt -128..127
SmallInt -32768..32767
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 14 de 90
Verso 05/04/2013
LongInt -2147483648..2147483647
Integer -2147483648..2147483647
Int64 -2^63..2^63-1
Byte 0..255
Word 0..65535
LongWord 0..4294967295
Cardinal 0..4294967295
UInt64 0..2^64-1

Tipos Float

Tipo Faixa Aproximada Dgitos sig.
Real48 2.9e-39 .. 1.7e+38 11-12
Single 1.5e-45 .. 3.4e+38 7-8
Double 5.0e-324 .. 1.7e+308 15-16
Real 5.0e-324 .. 1.7e+308 15-16
Extended
32-bit platforms 3.4e-4932 .. 1.1e+4932
64-bit platforms 5.0e-324 .. 1.7e+308
10-20
15-16
Comp -2
63
+1 .. 2
63
-1 10-20
Currency -922337203685477.5808.. 922337203685477.5807 10-20


Tipo Booleano

Boolean aceita true ou false;

Tipo Data e hora

TDate guarda data
TTime guarda hora
TDateTime guarda data e hora

Tipos de caracteres

Char representao de 1 bytes (1 caracter)
String vetor de caracteres

Funes de String

S:=texto que ser enviado para a varivel S;

A:=teste;
B:=de texto;
C:=A+B+ usando concatenao de strings;

Funo length retorna a quantidade de caracteres de uma string
Quantidadecaracteres:=Length(C);

Uma string inicia em 1 e no em 0, ento para percorrer uma string
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 15 de 90
Verso 05/04/2013

For cont:=1 to length(c) do
Begin
Stringfinal:=StringFinal + C[cont];
End;

Algumas funes importantes de converses entre tipos

Na converso o parmetro deve conter um valor correto para o tipo destino, caso contrrio gerar uma
excesso.

Strtodate = Converte uma String para Data

Strtodatetime = Converte uma string para um campo data/hora

DateTimetostr = Converte um valor Data/Hora para String

Formatdatetime = Formata um valor Data/Hora convertendo para String

Strtoint = Converte uma string para um valor inteiro

StrtoCurr = Converte uma string para um valor currency

Strtofloat = Converte uma string para um valor de ponto flutuante

InttoStr = Converte um valor inteiro para uma string

CurrtoStr = Converte um valor currency para uma string

FloattoStr = Converte um valor de ponto flutuante para uma string

Exemplo de Uso das funes em um click de um boto

procedure TForm2.Button1Click(Sender: TObject);
Var
ValorData:Tdate;
ValorDataHora:TDatetime;
ValorString:String;
ValorInteiro:integer;
ValorCurrency:Currency;
ValorFloat:Double;
Begin

ValorData:=strtodate('01/01/2000');
ValorDataHora:=strtodatetime('01/01/2000 00:00');
ValorString:=datetostr(ValorData);
ValorString:=FormatDatetime('yyyy/mm/dd', ValorDataHora);
ValorInteiro:=strtoint('22');
ValorCurrency:=strtocurr('10,25');
ValorFloat:=strtofloat('10,2252');
ValorString:=inttostr(332);
ValorString:=CurrtoStr(200.25);
ValorString:=CurrtoStr(200.2566);
End;
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 16 de 90
Verso 05/04/2013

COMPONENTES BSICOS

Form Formulrio



Propriedades Principais

Name = Nome do Componente
Caption = Texto que aparece na barra de ttulo
Color = Cor do Formulrio
Font = Fonte do Formulrio (fonte, tamanho, cor e estilos)
Height = Altura do Formulrio
Width = Largura do Formulrio
State = Estado que ele aparecer
wsNormal = Normal
wsMaximized = Maximizado
wsMinimized - Minimizado

Position = Posio que o formulrio aparecer na tela
poDesigned = Posio do desenvolvimento
poDefault = Posio e tamanho determinado pelo SO
poDefaultPosOnly = Posio determinado pelo SO, porm tamanho no.
poDefaultSizeOnly = Tamanho controlado pelo SO, mas posio no desenvolvimento
poScreenCenter = Centro da tela, tamanho do desenvolvimento, no monitor default
poDesktopCenter = Centro do Desktop, mesmo com mltiplos monitores
poMainFormCenter Centro do Formulrio Principal (quando janela secundrio)
poOwnerFormCenter = Centro do Formulrio proprietrio (criador).

BorderStyle = Estilo da Borda
bsDialog = No redimensionvel, somente boto fechar.
bsSingle = No redimensionvel, menu de minimizar / maximizar.
bsNone = No redimensionvel, sem linha de borda visvel.
bsSizeable = Redimensionvel
bsToolWindow = Igual bsSingle mas com uma barra de ttulo menor.
bsSizeToolWin = Igual bsSizeable com uma barra de ttulo menor.

KeyPreview = Intercepta as teclas pressionadas em outros componentes

Eventos

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 17 de 90
Verso 05/04/2013
Grande parte destes eventos existiro em outros componentes da VCL, portanto a explicao
para eles estendem-se para outros eventos, inclusive alguns cdigos de eventos sero
exemplificados aqui em outros componentes, como por exemplo Edits.

OnCreate(Sender: TObject);

Procedimento invocado quando o formulrio criado na memria (instanciado)

Parmetros

Sender do tipo Tobject = um parmetro comum na maioria dos eventos, indica que invocou
o evento (sender = remetente), o tipo dele o tipo de onde descendem todos os objetos da
VCL, podemos usar este evento para saber qual componente invocou o mtodo, entre outras
manipulaes mais avanadas.

procedure TForm3.FormCreate(Sender: TObject);
begin

end;

OnDestroy(Sender: TObject);

Procedimento invocado quando o formulrio destrudo na memria (memria liberada)

Parmetros

Sender = J estudado

procedure TForm3.FormDestroy(Sender: TObject);
begin

end;

OnShow(Sender: TObject);

Procedimento invocado quando o formulrio mostrado

Parmetros

Sender = J estudado

procedure TForm3.FormShow(Sender: TObject);
begin

end;

OnClose(Sender: TObject; var Action: TCloseAction);

Este evento invocado no momento que o formulrio recebe um comando de fechamento, seja
ele via cdigo ao clicar no cone para fechar ou com teclas de atalho (Alt+F4).

Parmetros

Sender = j estudado

Action do tipo TCloseAction = um parmetro que indica a ao a ser tomada pelo formulrio,
os possveis valores so: caNone, caHide, caFree, caMinimize

Exemplo de como abortar o fechamento de um formulrio

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 18 de 90
Verso 05/04/2013
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone; //exemplo de como abortar o fechamento do formulrio
end;

OnActivate(Sender: TObject);

Este evento invocado na ativao do Formulrio (toda vez que a janela do formulrio entra
em Foco)

Parmetros

Sender = j estudado

procedure TForm3.FormActivate(Sender: TObject);
begin

end;

OnClick(Sender: TObject);

Este evento invocado toda vez que o formulrio recebe um click do mouse

Parmetros

Sender = j estudado

procedure TForm3.FormClick(Sender: TObject);
begin

end;

OnDblClick(Sender: TObject);

Este evento invocado toda vez que o formulrio recebe um duplo click do mouse

Parmetros

Sender = j estudado

procedure TForm3.FormDblClick(Sender: TObject);
begin

end;

OnKeyPress(Sender: TObject; var Key: Char);

Este evento invocado toda vez que o formulrio recebe o pressionamento de uma tecla

Parmetros

Sender = j estudado

Key do tipo Char sinalizado como o identificador var, isto significa que ele foi enviado via
referncia e que seu valor pode ser alterado, esse parmetro contm a tecla que foi
pressionada, portanto possvel fazer tratamento com esse parmetro.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 19 de 90
Verso 05/04/2013
O formulrio s intercepta o pressionamento de teclas em outros controles se a propriedade
KeyPreview estiver com true, caso contrrio ele s tratar o evento se nenhum controle estiver
com o Foco, porque se estiver com o Foco o tratamento do evento fica com o controle.

procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin

end;

Exemplos de tratamento de OnKeyPress em um Edit

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

if (key=#13)
then Self.Edit1.SetFocus;

if (key<>'1')
then Key:=#0;

end;

Neste exemplo se a tecla pressionada foi o Enter (#13 o cdigo ASC da tecla) ele ir enviar o
Foco para o Edit1.

Se qualquer tecla diferente do 1 for pressionado a Key anulada, enviando o cdigo #0 para
ela, isso far com o que for digitado seja descartado e nem seja mostrado no edit1.

No exemplo abaixo um cdigo que s aceitar numricos no Edit e o Backspace (#8).

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in ['0'..'9',#8])
then Key:=#0;
end;

Neste exemplo foi usado o conceito de conjunto, entre os [ ] encontra-se os valores do
conjunto.

OnKeyDown (Sender: TObject; var Key: Word; Shift: TShiftState);

Este evento invocado toda vez que o formulrio recebe o pressionamento de uma tecla para
baixo.

procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
end;

A principal diferena entre o evento OnKeyPress e o evento OnKeyDown que o evento
OnKeyPress no chamado quando teclas que no so da tabela ASCII so pressionadas.

Teclas Alfa Numricas (abc...1234...), acentos, Enter e BackSpace invocam o mtodo
OnKeyPress, porm teclas de Funo (F1,F2....), teclas de navegao (setas para cima, baixo,
esquerda e direita), teclas Shift e Control no invocam o mtodo OnKeyPress, mas invocam o
mtodo OnKeyDown.

A outra diferena entre as funes que o parmetro Key da OnKeyPress um caracter ASC,
j o parmetro Key da OnKeyDown um caracter WORD, ou seja, o cdigo numrico da
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 20 de 90
Verso 05/04/2013
tecla e no seu correspondente na tabela ASC, at porque algumas teclas no tem
correspondente na tabela ASC como por exemplo as teclas de Funo.

Algumas teclas tem constantes pr-definidas, assim voc no precisar saber o cdigo
numrico delas, a lista de constantes imensa, para pesquis-la inteira procure por Virtual key
Codes no Help do Delphi, ou use o link

ms-help://embarcadero.rs_xe3/rad/Virtual_Key_Codes.html

Listarei algumas importantes, com o cdigo correspondente:

VK_LEFT = Tecla de Navegao para a Esquerda (37)
VK_RIGHT = Tecla de Navegao para a Direita (39)
VK_UP = Tecla de Navegao para Cima(38)
VK_DOWN = Tecla de Navegao para Baixo (40)
VK_DELETE = Tecla Delete (46)
VK_ESCAPE = Tecla ESC (27)

Parmetros

Sender = j estudado

Key do tipo Word, contm o cdigo numrico da tecla pressionada, pode ser alterado

Exemplo de como verificar se o ESC foi pressionado.

Primeira forma, usando o cdigo da tecla

procedure TForm2. FormKeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=27) //cdigo do ESC
Then Self.Close;//fecha o formulario
end;

Segunda forma usando a constante Virtual key Code

procedure TForm2. FormKeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=VK_ESCAPE)
Then Self.Close;//fecha o formulario
end;

Parmetro Shift

O parmetro Shift serve para indicar se teclas como o Shift, Ctrl, Alt, botes de mouse ou
dispositivos touchs esto pressionadas tambm.

Exemplo

if (ssCtrl in Shift)
Then Showmessage(Control pressionado);


Alguns valores para o parmetro:

ssShift Shift Pressionado
ssAlt Alt Pressionado
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 21 de 90
Verso 05/04/2013
ssCtrl The CTRL pressionado
ssLeft Boto esquerdo do mouse
ssRight Boto Direito do Mouse
ssMiddle Boto do Meio do Mouse

Exemplo de como simular o Atalho Ctrl + T para selecionar todo o texto do Edit

procedure TForm3.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((ssCtrl in Shift) and (chr(key)='T'))
Then Self.Edit1.SelectAll;
end;

Veja que foi usado o comando CHR(key), este comando retorna o caractere ASCII
correspondente ao cdigo enviado de parmetro.

OnKeyUP (Sender: TObject; var Key: Word; Shift: TShiftState);

Este evento invocado toda vez uma tecla solta, inverso do onkeydown, ele segue os
mesmos parmetros do OnKeyDown j estudado.


Label

Encontrado Palheta Standard



Propriedades Principais


Align = Alinhamento da Label dentro do proprietrio
alBottom = Na parte inferior
alClient = Toma todo o proprietrio
alCustom = Sem alinhamento
alLeft = Alinhado a esquerda
alNone = Sem alinhamento
alRight = Alinhado a direita
alTop = Alinhado na parte superior
Alignment = Alinhamento do texto dentro da label
taCenter = No Centro
taLeftJustify = Alinhado a esquerda
taRightJustify = Alinhado a direita
AutoSize = Tamanho automtico
Caption = Texto da Label
Enabled = Ativa ou no a Label
Font = Propriedades da Fonte
Color = Color de Fundo da Label
Transparent = Indica se a label ter fundo ou no
Visible = Indica se a label ser mostrada ou no
WordWrap = Quebrar o texto automaticamente

Eventos principais

OnClick, OnDblClick,
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 22 de 90
Verso 05/04/2013


Edit = caixa de texto

Palheta Standard





Principais Propriedades

Align, Alignment, AutoSize, Color, Font, Enabled, Visible
Maxlength = Quantidade maxima de caracteres (0 = desativa esta opo)
Text = Texto do Edit
CharCase = Determina se ser normal, minscula ou maisculas
TabOrder = Ordem que o componente est no uso do TAB (mudana de foco)
PasswordChar = Caractere que ser usado no lugar dos caracteres que forem sendo
digitados, ideal para campos de senha (password), para desabilitar esta opo deixe-a
preenchida com #0

Principais eventos

OnClick, OnDblClick, OnKeyPress, OnKeyDown, OnKeyUp (j estudados)

OnChange (Sender: Tobject);

Mtodo invocado toda vez que o contedo do Edit sofre modificao.

Parmetros

Sender = j estudado

procedure TForm3.Edit1Change(Sender: TObject);
begin
Self.edit2.text:=Self.edit1.text;
end;

OnEnter (Sender:TObject);

Este mtodo invocado quanto o edit recebe o foco

Parmetro

Sender = J estudado

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 23 de 90
Verso 05/04/2013
procedure TForm3.Edit1Enter(Sender: TObject);
begin
end;


OnExit (Sender:Tobject);

Este mtodo invocado quando o Edit perde o foco, ou seja, o foco enviado para outro
controle.

Parmetro

Sender = j estudado.

procedure TForm3.Edit1Exit(Sender: TObject);
begin
end;

SetFocus

Mtodo que envia o foco para o componente.

Self.Edit1.setfocus;


Button = Boto

Encontrado na Palheta Standard



Principais Propriedades

Caption = Texto do Boto, o uso do caractere & indica o caractere de atalho para o boto.

Exemplo: &Abrir = A Letra A ser o atalho (Alt A) pois foi precedida do caractere &

Enabled, Visible, TabOrder ( j estudados em outros componentes)

Principais eventos

OnClick, OnEnter, OnExit, OnKeyPress, OnKeyDown, OnKeyUp (j estudados em outros
componentes)

Funes Auxiliares

Now - varivel global do tipo datetime que retorna a data e a hora atual

Showmessage - Utilizada para enviar uma mensagem simples ao usurio. Exemplos

Showmessage(Teste de Mensagem);
Showmessage(A hora agora +timetostr(now)); //mensagem indicando a hora atual

Tratamento de Exceo (Except)

Se uma Exceo ocorrer no sistema sem o uso do bloco Try Except o sistema paralisa a
execuo na linha que gerou o erro e mostra uma mensagem de erro na tela.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 24 de 90
Verso 05/04/2013
As excees so tratadas em bloco


Try
//regras de negcios
Except
//tratamento do erro
End;

Exemplo

Try
Strtoint(esta conversao vai gerar um erro);
Showmessage(esta mensagem no ser mostrada);
Except
Showmessage (Erro na converso de string para inteiro);
//... aqui voc pode digitar outros comandos
End;




Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 25 de 90
Verso 05/04/2013

Exerccio 01

Criar um projeto chamado calculadora, com a aparncia abaixo



Nomes dos Componentes

EdtValorInteiro
EdtOperador
EdtValorFloat
BtCalcula
BtLimpar
LbResultado (label com o texto 0,00)

Regras de Negcio

Ao entrar no programa os edits devem estar limpos, a lbresultado deve estar com o
valor 0,00 e o foco deve estar no edtvalorinteiro
Ao sair do EdtValorInteiro o sistema dever verificar se ele contm um valor inteiro
vlido, caso no tenha o sistema deve emitir uma mensagem de erro e retornar o foco
para o edtValorInteiro
Ao sair do Edtoperador o sistema dever verificar se ele contm um operador (+ - / *)
vlido, caso no tenha o sistema deve emitir uma mensagem de erro e retornar o foco
para o EdtOperador
Ao sair do EdtValorFloat o sistema dever verificar se ele contm um valor float vlido,
caso no tenha o sistema deve emitir uma mensagem erro e retornar o foco para o
EdtValorFloat.
Ao clicar no boto BtCalcula o sistema dever realizar a operao utilizando os valores
e o operador digitado, retornar o resultado na label LBRESULTADO e voltar o foco
para edtvalorinteiro.
Ao clicar no Boto limpar o sistema dever limpar os valores dos edits, deixar a
lbresultado com o valor 0,00 e setar o foco para o edtvalorinteiro
O foco deve estar correto de acordo com a ordem dos componentes na tela



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 26 de 90
Verso 05/04/2013
CheckBox = Caixa de checagem

Encontrado Palheta Standard



Principais Propriedades

Checked = Propriedade que indica se a checkbox est marcada (checkada) ou no.

Caption, Enabled, Visible, TabOrder ( j estudados em outros componentes)

Principais eventos

OnClick, OnEnter, OnExit, OnKeyPress, OnKeyDown, OnKeyUp (j estudados em outros
componentes)

Exemplo

if (Self.CheckBox1.Checked=True)
then Showmessage('Caixa selecionada')
Else Showmessage('Caixa no selecionada');

RadioButton = Boto Radial

Encontrado Palheta Standard

semelhante ao CheckBox, porm s permitido que um RadioButton do grupo esteja marcado
(checked).



Principais Propriedades

Checked = Propriedade que indica se o RadioButton est marcado (checked) ou no.

Caption, Enabled, Visible, TabOrder ( j estudados em outros componentes)

Principais eventos

OnClick, OnEnter, OnExit, OnKeyPress, OnKeyDown, OnKeyUp (j estudados em outros
componentes)

Exemplo

if (Self.RadioButton1.Checked=True)
then Showmessage('Caixa selecionada')
Else Showmessage('Caixa no selecionada');

Panel = Painel

Encontrado Palheta Standard.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 27 de 90
Verso 05/04/2013
um painel que pode ser usado para organizar os componentes e criar grupos, por exemplo
se um panel for desativado (enabled=false), nenhum dos componentes do Panel poder ser
acessado, se um panel for movido, todos os componentes do panel sero movidos juntos com
ele.



Principais Propriedades

BevelOuter = Propriedade que indica a aparncia do Painel.

Align, Caption, Enabled, Visible, TabOrder ( j estudados em outros componentes)

Principais eventos

OnClick, OnDblClick, OnEnter, OnExit (j estudados em outros componentes)

Exemplo

Self.Panel1.Enabled:=False;


Image = imagem

Encontrado na Palheta Additional.




Principais Propriedades

Picture = Propriedade que indica qual a imagem ser usada. Clique no boto mostrado abaixo
e escolha a figura que deseja que seja mostrada no Image.


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 28 de 90
Verso 05/04/2013
Stretch = Indica se a imagem ser ajustada de acordo com o tamanho do objeto (esticada), no
recomendado em alguns casos devido a distoro da imagem no resultado final.

Proportional = Indica se a imagem ficar proporcional se for ajustada (stretch).

Align, Enabled, Visible ( j estudados em outros componentes)

Principais eventos e mtodos

OnClick, OnDblClick (j estudados em outros componentes)

Picture.LoadFromFile(stringcomocaminho); = Funo usada para Carregar uma imagem
do Disco.

Picture.SaveToFile(stringcomocaminho); = Funo usada para Salvar uma imagem no
Disco.

Exemplos

Para carregar uma imagem do disco via cdigo, use a funo loadfromfile da propriedade
picture

Exemplo:

Self.Image1.Picture.LoadFromFile('d:\exemplo.png');

Posso abrir imagens de diversos tipos, no exemplo acima eu abri uma imagem do tipo PNG,
neste caso necessrio adicionar a minha lista de uses uma unit especial para este
tratamento: Vcl.imaging.pngimage

Uma dica para no precisar decorar o nome das units, inserir dois Timages em um formulrio
e inserir uma imagem jpeg e uma png, depois compilar, voc perceber que sero adicionadas
as units automaticamente na seo interface, aps isso pode apagar os componentes do
formulrio que as units continuaro.

Para salvar uma imagem que esteja em um TImage no disco utilize o comando
Picture.SavetoFile

Exemplo

Self.Image1.picture.savetofile(c:\temp\teste.jpeg);

Lembrando que a extenso da imagem deve ser a mesma do arquivo que foi carregado, caso
necessite fazer converso, como por exemplo abrir um bitmap e salvar em Jpeg existem
funes especficas para isso.

Para limpar uma imagem do TImage sete a propriedade Picture para nil. Exemplo:

Self.image1.picture:=Nil;

OpenPictureDialog

Encontrado na Palheta Dialogs

um componente usado para encontrar imagens no computador, a principal funo dele
navegar entre as pastas do computador e retornar o nome do arquivo escolhido.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 29 de 90
Verso 05/04/2013


Principais Propriedades e Mtodos

Execute; = Esse mtodo executa o openpicturedialog, ele retorna True se o usurio
escolheu uma imagem ou false se o usurio cancelou a operao.
FileName = Indica o nome do arquivo escolhido pelo usurio.

Exemplo de Abertura de uma Imagem Usando o OpenPictureDialog

if (OpenPictureDialog1.Execute=False)
Then exit;

self.Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);


SavePictureDialog

Encontrado na Palheta Dialogs

Semelhante ao OpenPictureDialog um componente que abre a caixa de dilogo padro do
Windows para salvar uma imagem.

Principais Propriedades e Mtodos

Execute; = Esse mtodo executa o savepicturedialog, ele retorna True se o usurio
escolheu uma imagem ou false se o usurio cancelou a operao.
FileName = Indica o nome do arquivo digitado pelo usurio.


Exemplo de como Salvar uma Imagem Usando o SavePictureDialog

if (SavePictureDialog1.Execute=False)
Then exit;

Self.Image1.Picture.SaveToFile(SavePictureDialog1.FileName);

BitButton

Encontrado na palheta Additional

um boto com a possibilidade de inserir imagens.

Principais propriedades

Glyph = imagem que ser mostrada no boto

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 30 de 90
Verso 05/04/2013



MaskEdit = Edit (caixa de texto) com Mscara

Encontrado Palheta Additional.





O MaskEdit um Edit porm a opo de mscara de digitao, ideal para formatar a digitao
de telefones, campos de documentos (CPF, CNPJ) e datas.

Principais Propriedades

EditMask = Mscara que ser aplicada, clique no boto mostrado abaixo para ver as opes de
mscaras pr-formatadas, porm nada impede que voc crie sua prpria mscara.




No exemplo acima foi utilizada uma mscara de data com dois dgitos no Ano.

Outras propriedades j estudadas

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 31 de 90
Verso 05/04/2013
Align, Alignment, AutoSize, Color, Font, Enabled, Visible, Maxlength, Text, CharCase,
TabOrder e PasswordChar (estudados em outros componentes)

Principais Eventos

OnClick, OnDblClick, OnKeyPress, OnKeyDown, OnKeyUp, OnChange, OnEnter, OnExit
( j estudados em outros componentes)

Interao com o usurio com Mensagens e Caixas de Entrada

Showmessage = Mensagem Simples

Exemplo

Showmessage(Mensagem Simples);

Messagedlg = Mensagem com cones e botes

Paramtros

Messagedlg(Msg,DlgType,[Buttons],HelpCtx,DefaultButton);

Onde
Msg = String com a mensagem.
DlgType = Tipo de cone que ir aparecer (mtwarning, mterror, mtinformation,
mtconfirmation)
Buttons = Botes que iro aparecer
mbOK, mbCancel, mbYes, mbNo, mbAbort, mbRetry, mbIgnore, mbAll,
mbNoToAll, mbYesToAll, mbClose
Cada boto desses tem um cdigo de resposta se quisermos capturar qual foi
pressionado
mrOK, mrCancel, mrYes, mrNo, mrAbort, mrRetry, mrIgnore, mrAll, mrNoToAll,
mrYesToAll, mrClose

HelpCtx = Cdigo de erro se pressionado F1
DefaultBtn = Boto que estar com o Foco, este parmetro no obrigatrio.

Exemplo simples com um boto

Messagedlg('Mensagem com um botao',mtinformation,[mbok],0);

Mensagem com dois botes

Messagedlg('Mensagem com dois botes', mtwarning,[mbyes,mbno],0);

Mensagem com boto default e com captura do boto pressionado

If (Messagedlg('Deseja sair?', mtconfirmation,[mbyes,mbno],0,mbno)=mrYes)
Then Showmessage('Voc escolheu sair');

InputQuery = Pergunta com Caixa de Texto

Parmetros

InputQuery(titulo,mensagem,variavelquevaireceber):boolean;

Exemplo de uso

procedure TForm3.BitBtn1Click(Sender: TObject);
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 32 de 90
Verso 05/04/2013
var
variavelString:String;
begin
variavelstring:= 'digite aqui... ';
if (inputquery('Ttulo da Barra de Ttulo','Texto da Mensagem - Digite seu nome',variavelstring)=True)
then Showmessage(' Seu nome '+variavelString)
Else Showmessage(' Processo cancelado');
end;

Exerccios

Dicas de Exerccio

Desenvolver uma Calculadora Completa

Desafio: Jogo da Velha

Disponvel para Download com o Fonte

Dicas para Randomizar nmeros

Randomize; //necessrio antes de chamar o random
PnumeroInteiro:=Random(100);//randomiza de 0 a 99




Main MENU = Menu principal

Encontrado na Palheta Standard




Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 33 de 90
Verso 05/04/2013
Este componente usado para criao de Menus, aps adicion-lo no formulrio, d um duplo
click sobre ele para abrir o Editor de Menu.

Atravs do Editor possvel criar novos items do menu (TmenuItem), alterar e excluir os
existentes.


Principais Propriedades do TMenuItem

Caption = texto do menu (digitando ele criar um item separador)
ShortCut = atalho que ser associado a este Item do Menu.

Exemplo de criao de um Item separador, basta digitar no lugar do caption.



Arraste os items com o mouse para mudar a posio deles, pressione delete para apag-los e
insert para inserir novos itens.

Eventos

Para cada TMenuItem existe um mtodo OnClick onde deve ser digitado o cdigo que deseja
que seja executado.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 34 de 90
Verso 05/04/2013


Exemplo

procedure TForm3.Sair1Click(Sender: TObject);
begin
Self.Close;
end;

Popup Menu = Menu acionado pelo boto direito do Mouse

Encontrado na palheta Standard




Este menu usado como uma lista suspensa de opes (popup), segue o mesmo princpio do
MainMenu para configurao de novos itens, clique duas vezes sobre ele e adicione os itens
que desejar.



Aps configurar o PopupMenu necessrio indicar qual componente ir us-lo, para isso
escolha o componente (Edit, boto, formulrio) e depois escolha na propriedade PopupMenu o
componente configurado.
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 35 de 90
Verso 05/04/2013


Exemplo em funcionamento



Mltiplos Formulrios

As vezes faz-se necessrio em uma aplicao conter mais de um formulrio (form), para que
as funes possam distribudas em mltiplas telas da aplicao.

Quando criamos uma Aplicao VCL ela composta por um nico formulrio, o formulrio
principal, caso este formulrio seja fechado a aplicao encerrada (o formulrio padro pode
ser alterado), para adicionar novos formulrios clique no menu File \ New \ Vcl Form - Delphi



Veja que agora apareceram dois formulrios na janela de navegao



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 36 de 90
Verso 05/04/2013
Para visualizar quais formulrios fazem parte da aplicao voc pode utilizar a Palheta View,
boto View Form (Shift+F12) conforme imagem abaixo:



No meu exemplo vou renomear o primeiro formulrio criado como Fprincipal



E o segundo como Fauxiliar


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 37 de 90
Verso 05/04/2013
Se rodarmos a aplicao o formulrio que ser mostrado o Fprincipal, porque ele foi primeiro
formulrio a ser criado, se quiser alterar essa configurao, acesse:

Menu Project \ Options

Escolha o Item Forms e troque o Main Form, conforme figura abaixo



Nesta tela podemos tambm configurar quais formulrio sero criados automaticamente pela
aplicao (auto-create), caso seja retirado um formulrio desta lista necessrio fazer a
criao do mesmo (instanci-lo na memria) antes de us-lo e destru-lo aps o uso, porm
esse assunto no escopo do nosso curso bsico.

Formas de invocar outros formulrios

Supondo que o nosso Main Form seja o Fprincipal, para acessar o Fauxiliar necessrio um
comando para mostr-lo, existem duas formas de mostrar um formulrio:

Chamadas Modais (janelas restritas) - Quando invocamos um formulrio com uma chamada
modal todos os demais formulrios abertos no podero ser acessados at que este formulrio
seja fechado.

Chamadas No-Modais (janelas no restritas) Quando invocamos um formulrio com uma
chamada no-modal podemos acessar outros formulrios que estejam abertos.

Showmodal

Fauxiliar.Showmodal; //este comando invoca o Fauxiliar em uma chamada modal.

Show

Fauxiliar.Show;//este commando invoca o Fauxiliar em uma chamada no-modal.


Adicionando a Unit correspondente
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 38 de 90
Verso 05/04/2013

Tanto em um mtodo quanto no outro necessrio que a Unit do formulrio que se deseja
invocar esteja listada na lista de units que sero usadas, elas podem estar adicionadas na lista
de uses do interface ou do implementation, caso voc compile a aplicao sem adicionar a unit
o prprio Delphi ir avis-lo disso:




Veja que a mensagem do exemplo foi

O Formulrio Fprincipal est referenciando o formulrio Fauxiliar declarado na unit Unit4 que
no est na sua lista de USES. Deseja adicion-la?

Se voc escolher a opo Yes o prprio Delphi ir adicion-la a lista de uses, se escolhar no o
programa no ser executado.



Chamadas Recursivas a Janelas Modais

Imagine a situao que o Formulrio Fprincipal invoca o Fauxiliar em uma chamada
ShowModal e o Fauxiliar invoca o Fprincipal tambm em uma chamada ShowModal, o sistema
ir gerar um erro:





Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 39 de 90
Verso 05/04/2013
Porm nada impediria que o Fauxiliar invocasse outro Formulrio qualquer em uma chamada
Showmodal.

Erro de referncia Circular Out of Memory

No exemplo acima o sistema no geraria erro em tempo de compilao porque os dois
formulrios referenciam um ao outro na seo de implementation:



Porm se formos no Fauxiliar e trocarmos a referncia a Unit3(Fprincipal) para a seo de
Interface, veja o erro que ocorre ao tentarmos compilar a aplicao:


Referncia da Fprincipal a Fauxiliar na Interface


Referncia da Fauxiliar a Fprincipal na interface

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 40 de 90
Verso 05/04/2013

Erro gerado pelo compilador


Foi gerado um erro de Out of Memory, nas verses anteriores do Delphi seria gerado um Erro
de Referncia Circular, ou seja, duas units no podem referenciar uma a outra na seo de
interface, apenas na seo de implementation.

TStrings e TStringList

As classes TStrings e TStringList so classes poderosssimas do Delphi que simulam listas
encadeadas de strings, contendo mtodos para adicionar, remover, pesquisar, ordenar,
acessar e alterar itens desta lista, muitos componentes da VCL possuem propriedades do tipo
TStrings, portanto no possvel aprender estes objetos sem antes entender a classe Tstrings.

Para nossos exemplos iremos criar uma instncia da classe TStringList que uma
implementao da classe TStrings

TStringList

Usado para armazenar e manipular uma lista de strings. TStringList implementa as
propriedades e mtodos abstratos introduzidas pela TStrings, e introduz novas propriedades,
eventos e mtodos para:

Classificar as strings na lista.
Proibir duplicao de strings em listas ordenadas.
Responder a alteraes no contedo da lista.
Controlar a classificao por ordem alfabtica

Para fazer nossos testes iremos adicionar um boto ao nosso formulrio e no evento on click
iremos codific-lo da seguinte maneira:

procedure TFprincipal.Button2Click(Sender: TObject);
var
Lista:TStringList;
posicao,cont:integer;
begin
Lista:=TStringList.Create;

Lista.Clear;//limpa os itens

Lista.Sorted:=False;//indica que a lista no ser ordenada a cada insero

//adicionando itens
Lista.Add('e-String 1');
Lista.Add('d-String 2');
Lista.Add('c-String 3');
Lista.Add('b-String 4');
Lista.Add('a-String 5');

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 41 de 90
Verso 05/04/2013
Showmessage ('Lista Completa: '+#13+Lista.Text); //mostrando o texto completo (concatenao de
todos os itens)

Showmessage (lista[2]); //acessando um item especfico da lista (3 item)

for cont := 0 to lista.Count-1 do//percorrendo todos os itens da lista
Begin
Showmessage('Item '+inttostr(cont)+' '+lista[cont]);
End;


lista.Delete(2); //apagando um item especifico da lista

Showmessage ('Apagado Item 2. Lista Completa'+#13+Lista.Text); //mostrando o texto completo
(concatenao de todos os itens)

Lista.Sort; //ordenando a lista em ordem alfabtica

Showmessage ('Lista Ordenada '+#13+Lista.Text); //mostrando o texto completo (concatenao de
todos os itens)

Lista.CaseSensitive:=true;//indica que DEVE diferenciar maisculas e minsculas
posicao:=lista.IndexOf('E-STRING 1');
if (posicao<0)
then Showmessage('String "E-STRING 1" no encontrada')
Else Showmessage('String "E-STRING 1" encontrada na posio '+inttostr(posicao));

Lista.CaseSensitive:=False;//indica que NO DEVE diferenciar maisculas e minsculas
posicao:=lista.IndexOf('E-STRING 1');
if (posicao<0)
then Showmessage('String "E-STRING 1" no encontrada')
Else Showmessage('String "E-STRING 1" encontrada na posio '+inttostr(posicao));

//Gerar erro em caso de duplicao s funciona se a lista estiver marcada para ordenar na insero
Lista.Sorted:=True;//indica que a lista ser ordenada a cada insero
Lista.Duplicates:=dupError;//indicando que dever gerar erro se inserir um item duplicado

Try
Lista.Add('e-String 1');//forando o erro
Finally
FreeAndNil(Lista);
End;

end;

Entendendo as funes usadas no exemplo

Lista:=TStringList.Create;

Neste comando estamos instanciando a classe TstringList na varivel Lista (criando ela na
memria)

Lista.Clear;//limpa os itens

O mtodo clear limpa os itens da lista, apagando-os



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 42 de 90
Verso 05/04/2013
Lista.Sorted:=False;//indica que a lista no ser ordenada a cada insero

O mtodo sorted indica se a lista ser ordenada ou no a cada insero de itens.

Lista.Add('e-String 1');

O mtodo add insere um novo item a lista

Showmessage ('Lista Completa: '+#13+Lista.Text);

No exemplo acima estamos usando o mtodo text que retorna uma string com a concatenao
de todas as strings da lista, note que na caixa de mensagem ele mostrou um item por linha,
isso se d pelo fato que o separador dos itens na lista so caracteres de quebra de linha e
retorno (#13 e #10)

Showmessage (lista[2]);

No exemplo acima estamos acessando um item especfico da lista, este comando retorna uma
string com o valor do item, o item de posio 3 da lista, digitamos 2 no exemplo porque o
primeiro item da lista o item 0.

for cont := 0 to lista.Count-1 do

No exemplo acima estamos usando o comando COUNT que um mtodo que retorna a
quantidade de itens da lista

lista.Delete(2);

O mtodo delete exclui um item da lista, no exemplo estamos excluindo o terceiro item da lista

Lista.Sort;

O mtodo SORT ordena os itens da lista em ordem alfabtica

Lista.CaseSensitive:=true;

O mtodo CaseSensitive indica se a pesquisa dever considerar a diferena entre maisculas
e minsculas ou no.

posicao:=lista.IndexOf('E-STRING 1');

O mtodo INDEXOF( ) retorna o ndice do texto pesquisado dentro da lista, caso no seja
encontrado retorna o valor -1

FreeAndNil(Lista);

O mtodo FreeAndNil um mtodo utilizado para desalocar (destruir) memria de objetos e
setar a varivel para nil aps isso, caso esqueamos de destruir um objeto instanciado
manualmente geraremos fuga (leaks) de memria em nossa aplicao.

A regra geral : Todo objeto que construmos manualmente, sem ligao de parents, temos
que desaloc-lo manualmente. A StringList um exemplo de classe que deve ser desalocada
manualmente pois em sua criao no permite que adicionemos um parent.

Lista.Duplicates:=dupError;

O mtodo Duplicates indicar como a Lista se comportar se receber um item duplicado, este
mtodo s pode ser usado para gerar erro se a lista estiver marcada para ser ordenada
durante a insero (Sorted=True) caso contrrio ele no ter efeito algum. No exemplo acima
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 43 de 90
Verso 05/04/2013
foi configurado para gerar erro em caso de duplicao de itens, porm para testar esse mtodo
necessrio que usemos o bloco de tratamento de excees (Try Except) caso contrrio a
exceo gerada pelo erro ir desviar o programa e a linha do freeandnil no ser executada,
para garantirmos essa execuo iremos utilizar o Bloco Try Finally

Blocos Try Finally

O bloco Try Finally utilizado quando queremos garantir que determinado comando seja
executado independente de algum erro que possa ocorrer, ou no, mesmo que seja executado
o comando exit; para sairmos de uma rotina, o comando que se encontra dentro do bloco
Finally ser executado.

Try
Lista.Add('e-String 1');//forando o erro
Finally
FreeAndNil(Lista);
End;

No exemplo acima, a lista que tentaremos adicionar um novo item igual a outro ir gerar um
erro, caso no tivssemos o bloco try finally o programa encerraria a execuo do
procedimento nesta linha, como temos um bloco try finally obrigatoriamente ele ir passar pelos
comandos que se encontram dentro do bloco Finally, neste caso o comando de liberao de
memria (freeandnil), poderamos utilizar tambm um bloco TryExcept, porm qualquer outro
desvio da aplicao pularia o comando de desalocao, o correto no uso do Try Finally
envolver todo o cdigo logo aps o comando create. O Correto seria:

Lista:=TStringList.Create;

Try
.... todo os comandos....
...
...
Finally
FreeAndNil(Lista);
End;

Memo = Memorando

Encontrado na Palheta Standard

uma caixa de entrada com mltiplas linhas.




Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 44 de 90
Verso 05/04/2013


Principais Propriedades

Align, Aligment, BorderStyle, CharCase, Color, Font, Enabled, MaxLength, Height, Width,
WordWrap (estudado em outros componentes)

WantReturns = Indica se o Memo aceitar o uso da tecla ENTER para criar novas linhas
WantTabs = Indica se o Memo aceitar o uso de TABS dentro do MEMO
Text = Retorna uma String com todo o texto do Memo.

Lines = Propriedade do Tipo TStrings, controla as linhas do mesmo, podem ser aplicadas a
ela os mtodos : clear, add, text, delete, indexof, count e acesso a itens [ ] , entre outros.
Lines .SaveToFile(nomearquivo); = salva o contedo do Lines em um arquivo fsico
Lines.LoadfromFile(nomedoarquivo); = carrega o contedo de um arquivo texto para as linhas
do memo.


Exemplo de Manipulao da propriedade Lines do Tmemo

procedure TFprincipal.Button3Click(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Linha um');
Memo1.Lines.Add('Linha Dois');
Memo1.Lines.add('Linha Trs');
Showmessage(Memo1.Lines.text);
Memo1.Lines.Delete(1);
Showmessage(Memo1.Lines.text);
Showmessage('A posio do texto "Linha Trs" '+inttostr(Memo1.Lines.IndexOf('LINHA TRS')));
Showmessage('A quantidade de Linhas '+inttostr(Memo1.Lines.Count) );
Memo1.Lines.savetofile('c:\temp\teste.txt');//salvando as linhas em um arquivo
Memo1.lines.clear;
Memo1.Lines.loadfromfile('c:\temp\teste.txt');//Abrindo um arquivo texto
end;


Principais Eventos

OnChange, OnClick, OnEnter, OnExit, OnKeyPress, OnKeyDown, OnKeyUp (estudado em
outros componentes)

ListBox = Caixa de Listagem

Encontrado na Palheta Standard
uma Caixa de Listagens de Itens, semelhante ao memo mas no permite a entrada de itens
digitando dentro do ListBox, necessrio adicion-lo via comando.
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 45 de 90
Verso 05/04/2013




Principais Propriedades

Align, BorderStyle, Color, Font, Enabled, Height, Width (estudado em outros componentes)

Sorted = Indica se a lista ser ordenada na insero
ItemIndex = Indica qual a posio do Item que est selecionado, se nenhum estiver
selecionado retorna -1

Exemplo de Uso

procedure TFprincipal.Button6Click(Sender: TObject);
begin
Showmessage('Item selecionado '+inttostr(ListBox1.ItemIndex)+'
'+ListBox1.Items[ListBox1.ItemIndex]);
end;

ITEMS = Propriedade do Tipo TStrings, controla as linhas do TListBox, podem ser aplicadas a
ela os mtodos : clear, add, text, delete, indexof, count e acesso a itens [ ] , entre outros.

Principais Eventos

OnClick, OnEnter, OnExit, OnKeyPress, OnKeyDown, OnKeyUp (estudado em outros
componentes)

ComboBox = Caixa Combo

uma caixa com uma lista suspenda de itens.
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 46 de 90
Verso 05/04/2013




Principais Propriedades

Align, CharCase, Color, Font, Enabled, Height, Width, Sorted, ItemIndex (estudado em outros
componentes)

DropDownCount = Quantidade de Itens que sero mostrados na lista sem a barra de
rolagem.
Text = Texto que est sendo mostrado no Combo, nem sempre ele est
associado a um item da lista, ele pode estar associado ao itemindex= -1

ITEMS = Propriedade do Tipo TStrings, controla as linhas do mesmo, podem ser aplicadas a
ela os mtodos : clear, add, text, delete, indexof, count e acesso a itens [ ] , entre outros.

Principais Eventos

OnChange, OnClick, OnEnter, OnExit, OnKeyPress, OnKeyDown, OnKeyUp (estudado em
outros componentes)

RadioGroup = Grupo de RadioButton

um Grupo da RadioButtons





Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 47 de 90
Verso 05/04/2013
Principais Propriedades


Align, Color, Font, Enabled, Height, Width, ItemIndex (estudado em outros componentes)

ITEMS = Propriedade do Tipo TStrings, controla as linhas do mesmo, podem ser aplicadas a
ela os mtodos : clear, add, text, delete, indexof, count e acesso a itens [ ] , entre outros.


Principais Eventos

OnClick, OnEnter, OnExit (estudado em outros componentes)


TabbedNotebook

Encontrado na Palheta Win 3.1


Principais Propriedades

PageIndex : Propriedade do Tipo integer que usamos para saber qual a pgina atual e
para trocar a pgina atual.
Style : Configura o Estilo visual da Aba, os estilos so: tsButtons, tsFlatButtons,

Pages = Propriedade do Tipo TStrings que configura as pginas, clique no boto (...)
para iniciar o editor de Pginas do Componente, neste editor possvel editar o nome das
pginas, adicionar ou excluir novas pginas e alterar a disposio das mesmas.





Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 48 de 90
Verso 05/04/2013

Principais Eventos

OnChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean);

Esse evento invocado quando ocorre uma tentative de mudana de Aba, o parmetro
NewTab indica a aba que ser mostrada e o parmetro AllowChange indica se ser permitida
ou no a mudana, sete esse parmetro para false e a mudana no ocorrer.

PageControls

Encontrado na Aba Win32





Principais Propriedades

TabIndex : Propriedade do Tipo integer que usamos para saber qual a Pgina atual e
para trocar a pgina atual.
Style : Configura o Estilo visual da Aba, os estilos so: tsButtons, tsFlatButtons,
tsTabs
TabPosition : Configura a posio da Aba, s funciona para o Estilho tsTabs

Principais Eventos

Onchanging : Mtodo que invocado ao tentar mudar de aba, ele antecede a mudana,
podendo inclusive ser usado para abortar a mudana.

Sintaxe: TabControl1Changing(Sender: TObject; var AllowChange: Boolean);

O parmetro AllowChange serve para indicar se ser permitido ou no a mudana, alterando
para false a mudana no ocorrer.

OnChange : Mtodo que invocado aps a mudana de aba.

Para criar novas Abas clique com o boto direito e escolha a Opo New Page

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 49 de 90
Verso 05/04/2013



TrackBar

Encontrado na palheta Win32




Principais propriedades

Min Valor Mnimo da Trilha
Max Valor Mximo
Frequency Frequncia que ser usada ao arrastar (incremento)
Position Posio atual
SelStart Incio da Seleo
SelEnd Fim da Seleo
SliderVisible Indica se o marcador da trilha ser visvel
ShowSelRange Indica se mostra ou no a faixa de seleo
TickMarks Indica a posio dos marcadores (embaixo, cima ou duplo)

Principal Evento

OnChange Invicado toda vez que ocorre uma mudana no Track

ProgressBar

Encontrado na palheta Win32


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 50 de 90
Verso 05/04/2013


Principais Propriedades

Min, Max, Position (Estudados em outros componentes)

StatusBar

Encontrado na palheta Win32



Principais Propriedades

Panels = Propriedade do tipo TstatusPanels, nesta propriedade configuramos os
painis que sero usados para mostrar informaes de Status.

Clique no boto (...) desta propriedade ou cliente com o boto direito sobre o componente no
formulrio e escolha a Opo Panels Editor




No Editor clique na opo Add New, adicione quantos painis desejar



Depois configure as opes dos painis, conforme a figura abaixo:
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 51 de 90
Verso 05/04/2013


possvel configurar o estilo, o texto, a largura do Painel entre outras opes.

Para acessar o texto do painel via cdigo use a propriedade Panels, no exemplo estamos
alterando o texto do Panel com ndice zero, para acessar outros painis altere o valor do
ndice.

StatusBar1.Panels[0].Text:='Teste';



ToolBar

Encontrado na palheta Win32



A Toolbar uma barra de ferramentas, ideal para adicionar botes. Para adicionar um boto
clique com o boto direito e escolha a Opo New Button, possvel tambm adicionar
separadores visuais entre os botes, para isso clique com o boto direito e escolha a opo
New Separator






Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 52 de 90
Verso 05/04/2013


possvel configurar cada boto da ToolBar individualmente, basta selecionar o boto que
deseja alterar as propriedades.

Adicionando imagens nos botes

Para adicionar imagens nos botes necessrio utilizar um ImageList, pois os botes no
possuem uma propriedade para inserir uma imagem por boto.

Adicione um ImageList



Timers

Encontrado na Palheta System



O Timer serve para executar cdigos a cada X milissegundos.

Principais Propriedades

Enabled = Inicia ou para o timer e indica se o mesmo ativado ou no
Interval = Inteiro que indica a quantidade de milissegundos que o timer ir temporizar
at a prxima execuo (1000 = 1segundo)

Evento

OnTimer = Este evento disparado quando o tempo configurado em Interval estourar,
lembre-se de desativar o timer dentro deste evento para evitar que o mesmo seja chamado
recursivamente caso o intervalo seja muito pequeno, ou caso o cdigo que seja executado
neste evento seja muito demorado. Uma dica usar um bloco Try Finally. Exemplo:

procedure TForm8.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;

Try
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 53 de 90
Verso 05/04/2013
// Adicione aqui neste o bloco de cdigos que deseja executar a cada
//Execuo do Timer

Finally
Timer1.Enabled:=True;
End;


end;



StringGrid

Encontrado na palheta Additional





O componente StringGrid um componente que implementa uma grade (linhas e colunas) de
Strings, um componente muito interessante para mostrar mltiplas informaes.


Principais Propriedades

ColCount : Inteiro que indica quantas colunas tero a Grid
RowCount : Inteiro que indica quantas linhas tero a Grid
FixedCols : Inteiro que indica quantas colunas fixas tero a Grid
FixedRows : Inteiro que indica quantas linhas fixas tero a grid
FixedColor : Cor das Colunas e Linhas Fixas
Row : Inteiro que Indica a linha atual ou altera a linha atual
Col : Inteiro que Indica a coluna atual ou altera a coluna atual

Options : Conjunto de Opes, listamos abaixo as mais importantes
goFixedVertLine : Indica se Mostrar as linhas de diviso vertical nas colunas fixas
goFixedHorzLine : Indica se mostrar as linhas de diviso horizontal nas linhas fixas
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 54 de 90
Verso 05/04/2013
goVertLine : Indica se mostrar as linhas verticais
goHorzLIne : Indica se mostrar as linhas horizontais
goRangeSelect : Indica se permitir seleo em faixas de clulas
goDrawFocusSelected: Indica se a clula de foco ser desenhada como selecionada
goRowSizing : Indica se as linhas podero ser redimensionadas
goColSizing : Indica se as colunas podero ser redimensionadas
goEditing : Indica se permitir a edio dos dados das clulas
goTabs : Indica se o tab funcionar como navegao entre as clulas
goRowSelect : Indica se a linha ficar toda selecionada
goAlwaysShowEditor : Indica se sempre as clulas estaro em edio, sem necessidade de
pressionar alguma tecla para entrar em modo de edio.

Cells : Propriedade para acessar e alterando os dados das clulas

No exemplo abaixo estamos alterando o contedo da clulas posicionada na coluna 0 e na
linha 1.

StringGrid1.Cells[0,1]:='Teste Col 0 Linha 1';

Exemplo de um Grid preenchido




Acessando colunas e linhas inteiras

Propriedades Rows e Cols

Exemplos:

Rows[0].clear; //limpando a linha zero
Cols[1].clear;//limpando a coluna um

Rows[0].text; //acessando todo o texto, todos os itens, da linha zero

Cols[1].indexof(abc); //procurando a palavra abc na coluna 1 se existir ele retorna o ndice do
item, que corresponde a linha que ele se encontra.





Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 55 de 90
Verso 05/04/2013
Funes Importantes


ExtractFilePath(Application.ExeName);

Retorna uma string com o caminho da aplicao.

FileExists(pcaminhodoexe);

Retorna se o arquivo indicando na string do parmetro existe ou no

Criando Units

Muitas vezes necessrio o reaproveitamento de cdigo, sendo assim a melhor maneira
criando funes que podem ser usadas diversas units ou at mesmo por diversos projetos,
para isso necessrio a criao de units, desvinculadas de formulrios, contendo as funes
importantes a serem reutilizadas, como orientao a objeto foge do escopo deste curso
ensinaremos a criao de units simples com funes.

Para criar uma nova unit

Menu File \ New \ Unit - Delphi



A nova unit ser criada com um nome padro, salve essa unit no menu File \ Save

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 56 de 90
Verso 05/04/2013

No exemplo abaixo salve minha unit com o nome de Uglobal



Na seo de interface digitaremos o cabealho das funes e na seo implementation a
implementao da funo.

No exemplo abaixo criaremos uma funo que mostra uma mensagem de informao
recebendo como parmetro uma string com a mensagem que desejamos que seja mostrada



Veja que foi necessrio a declarao do uso da unit Vcl.dialogs, pois a funo Messagedlg j
estudada anteriormente pertence a unit.

Agora se quisermos aproveitar essa funo em nosso programa basta que declaremos o uso
da Unit Uglobal nas units que queremos us-la.

Como exemplo chamaremos a funo a partir do click de um boto em outra unit.




Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 57 de 90
Verso 05/04/2013



Veja no exemplo acima que para poder utilizar as funes da unit Uglobal tivemos que declarar
o uso dela na seo implementation do form, isso pode ser feito utilizando o atalho Alt+F11 e
escolhendo a unit que desejamos usar.




Regra Importante

Como no estamos trabalhando com orientao a objetos, no caso do uso de mltiplos
procedimentos ou funes em uma unit em que uma funo pode utilizar outra da mesma unit,
devemos declar-los na ordem de criao correta, ou seja, a funo que ser chamada por
outra dever estar implementada antes da funo que a usar. Exemplo de um erro:

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 58 de 90
Verso 05/04/2013


A funo MostraMensagem2 no foi encontrada porque foi declarada depois da funo que
necessita utiliz-la. O correto seria:







Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 59 de 90
Verso 05/04/2013


Passagem de Parmetro com classes


Quando passarmos uma classe de parmetro estamos passando necessariamente como
referncia, ou seja, tudo que modificarmos dentro da funo no parmetro, estar modificando
a classe original, portanto podemos passar qualquer classe de parmetro para funes, desde
botes, labels ou at mesmo formulrios. Veja o exemplo de um procedimento na nossa unit
UGlobal que recebe um formulrio de parmetro e troca o caption do mesmo.



Veja que a Unit Vcl.Forms teve que ser declarada na seo interface porque a classe TForm
est presente no parmetro da funo.

Para testar basta por um boto em um formulrio e chamar a funo:




Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 60 de 90
Verso 05/04/2013

DELPHI COM FIREBIRD

No est no escopo do Curso, mas faremos uma breve apresentao sobre o uso de banco de
dados Firebird com Delphi, no pretendemos abordar teorias de banco de dados neste curso,
supe-se que o aluno j conhea uma teoria fundamental de banco de dados envolvendo:
Tabelas, Chaves Primrias, Chaves Estrangeiras, Vises, Procedimentos, Gatilhos (triggers),
bem como os comandos sql : Select, Insert, Update e Delete

Criao de um novo banco de dados

Entre no IboConsole, conecte-se ao servidor local, o usurio e senha padro do firebird so:

Sysdba
masterkey

Clique com o boto direito sobre a opo databases e escolha a opo Create Database



Escolha o arquivo que deseja criar



Digite um nome no Alias (Apelido) que ser mostrado na rvore de databases.

Abra o Interactive SQL para execuo de comandos SQL

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 61 de 90
Verso 05/04/2013




Para executar comandos utilize a opo Execute Query, ou use um dos atalhos CTRL + E ou
CTRL+ENTER



Para navegar entre os comandos j executados use CTRL+P e CTRL+N (previous e next), ou
use os botes de atalho.




Criando Tabelas

CREATE TABLE TABAGENDA
(
CODIGO INTEGER NOT NULL,
NOME VARCHAR(100),
TELEFONE VARCHAR(20),
DATANASCIMENTO DATE,
SALARIO DECIMAL(6,2),
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 62 de 90
Verso 05/04/2013
HORACADASTRO TIME,

PRIMARY KEY (CODIGO)
);

No exemplo acima criamos uma tabela com diversos campos, os tipos usados acima foram


Integer = Inteiro
Varchar(100) = String de 100 caracteres
Varchar(20) = String de 20 caracteres
Date = Data
Decimal(6,2) = ponto fluante com preciso de duas casas decimais
Time = Hora

Foi definido que o campo cdigo no poder ser nulo

CODIGO INTEGER NOT NULL,

Foi definido que o campo cdigo ser a chave primria da tabela, ou seja, no poder se
repetir:

PRIMARY KEY (CODIGO)

Comando Insert

Sintaxe

Insert into nometabela (campos) values (valores dos campos);


No exemplo abaixo estamos inserindo um registro com o cdigo 1 e o nome JOO, os demais
campos (colunas) ficaro com nulos pois no foram preenchidos no SQL

insert into tabagenda (codigo,nome) values (1,'JOO');

No exemplo abaixo vamos inserir um registro completo com as seguintes informaes

Cdigo 2
Nome Natal
Telefone 3411-7777
Data de Nascimento 31/12/2000
Salrio 1500,75
Hora do Cadastro 14:25

insert into tabagenda (codigo,nome,telefone,datanascimento,salario,horacadastro)
values (2,'Natal','3411-7777','12/31/2000',1500.75,'14:25')

Veja no exemplo acima que os tipos Varchar, Date e Time foram inseridos utilizando um
apstrofo delimitando o contedo, o tipo Date no formato mm/dd/yyyy ou seja ms/dia/ano e
que o tipo Decimal quando temos valores decimais delimitamos por . (ponto) e no utilizamos o
separador de milhar.

Comando Select simples

Estrutura simples

Select campos from nomedatabela

Exemplo
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 63 de 90
Verso 05/04/2013

Select codigo,nome from tabagenda

Podemos utilizar o * (asterisco) para que o comando retorno todos os campos (colunas)

Select * from tabagenda


Comando Select simples com filtro where

Select campos from nometabela where REGRAS

Exemplos

Select * from tabagenda where codigo=1

Select * from tabagenda where nome=Natal

Select * from tabagenda where codigo>0

Select * from tabagenda where codigo<>1

Usando and

Select * from tabagenda where codigo>0 and nome=Natal

Usando or

Select * from tabagenda where codigo=1 or nome=Natal

Usando and e or

Select * from tabagenda where (codigo=1 or codigo=2 ) and Nome<>TESTE

Verificando nulos

Select * from tabagenda where telefone is null

Verificando no nulos

Select * from tabagenda where not telefone is null

Pesquisando Substrings com like

O % indica qualquer coisa

No exemplo abaixo pesquisamos nomes que contenham a letra a minscula em qualquer parte
do nome

Select * from tabagenda where nome like '%a%'

No exemplo abaixo pesquisamos nomes que contenham a letra N maiscula no incio

Select * from tabagenda where nome like 'N%'

No exemplo abaixo pesquisamos nomes que contenham a letra O maiscula no fim

Select * from tabagenda where nome like '%O'

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 64 de 90
Verso 05/04/2013
Se no quisermos diferenciar maisculas e minsculas podemos usar o comando Upper

No exemplo abaixo estamos pesquisando os nomes que contem a letra A independente de ser
maiscula ou minscula, pois estamos convertendo o resultado da pesquisa em maiscula.

Select * from tabagenda where upper(nome) like '%A%'

Comando Select com ordenao do resultado (order by)

Ordenando os resultados pelo nome

Select * from tabagenda where upper(nome) like '%A%'
Order by nome

Ordenando os resultados pelo nome em ordem descrescente

Select * from tabagenda where upper(nome) like '%A%'
order by nome desc

Ordenando pelo nome logo em seguida pelo codigo

Select * from tabagenda where upper(nome) like '%A%'
order by nome,codigo

Comando Update

Sintaxe do comando

Update nometabela set campo=novovalor where filtros

Se o where for omitido, todos os registros da tabela sero afetados

Exemplo de alterao do nome no registro codigo=1

update tabagenda set nome='Joo da Cruz' where codigo=1

Exemplo de alterao do nome e do telefone no registro codigo=1

update tabagenda set nome='Joo da Cruz', telefone=3411-4444 where codigo=1

Exemplo de alterao do horacadastro de todos os registros

update tabagenda set horacadastro='10:00'

Comando Delete

Sintaxe

Delete from nomedatabela where condicaodefiltragem


Exemplo

Delete from tabagenda where cdigo=1;
Delete from tabagenda where nome like %tal%

Controle Transacional

Comando Commit

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 65 de 90
Verso 05/04/2013
Confirma as alteraes

Comando Rollback

Desfaz as alteraes no confirmadas


PALHETA INTERBASE NO DELPHI

Usaremos a palheta Interbase para conexo com banco de dados Firebird



Para o primeiro exemplo faremos toda a conexo e acesso ao banco em um nico formulrio,
para isso adicione um componente IbDatabase e um IbTransaction



Ibdatabase

Este componente responsvel por efetuar a conexo com o Banco de Dados, nele que
configuraremos o caminho do arquivo o usurio e a senha do Banco de Dados. Voc pode
configur-lo clicando duas vezes sobre o componente ou configurando propriedade a
propriedade no Object Inspector.

Segue abaixo um exemplo de uma configurao de conexo a um banco de dados local, j
configurando o caminho do banco de dados, o usurio e a senha.


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 66 de 90
Verso 05/04/2013

Clique no boto Test para testar se as informaes esto corretas.

Aps isso configure a propriedade Default Transaction com a transao adicionada.



IbTransaction

Clique duas vezes sobre o componente e configure a opo Transaction Properties para Read
Commited

Essa configurao indica que s veremos os dados j comitados, caso alguma outra
transao esteja aberta no conseguiremos enxergar as alteraes enquanto ela no for
commitada.

Para saber mais sobre transaes recomendo a leitura deste artigo:
http://www.firebase.com.br/fb/artigo.php?id=2461




Depois no Object Inspector configure a propriedade DefaultAction para TARollBackRetaining,
isso indicar que quando a aplicao no efetuar um commit ou um rollback em caso de
encerramento da transao ele aplicar como Default (padro) um RollBackRetaining,
perdendo as alteraes que foram feitas na transao corrente.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 67 de 90
Verso 05/04/2013



J temos uma conexo preparada, no OnShow do Formulrio vamos abrir a conexo e no
OnClose vamos encerrar a conexo.




Ibquery



Ibquery o componente que nos d a liberdade de executarmos qualquer tipo de SQL no
banco de dados.

Configure a propriedade Database ligando-a a IbDatabase1.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 68 de 90
Verso 05/04/2013



Os comandos SQL so configurandos na propriedade SQL da IBquery, que do tipo
TSTRINGS.


Exemplo de um comando de Seleo com a Query.



Seguindo a sequncia dos comandos:

Ibquery1.Close;

Fecha a Query que estiver aberta, no podemos executar outra query sem antes fechar a
query anterior

Ibquery1.Sql.clear;

Limpa o comando SQL que do tipo TSTRINGS

Ibquery1.Sql.add(...);

Adiciona um comando a propriedade SQL que do tipo TSTRINGS

Ibquery1.Open;

Executa o comando digitado na propriedade SQL, caso o comando esteja errado ser gerado
uma excesso, use o tratamento de excesso (TRY EXCEPT) para controlar isso. Comandos
SELECT usam o comando OPEN, comandos insert, update e delete usam o comando
EXECSQL.


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 69 de 90
Verso 05/04/2013
Visualizando os dados da Query

Para visualizar os dados da Query usaremos um DBGRID da palheta Data Controls, porm
para ligar o DBGRID a Query necessrio um componente da palheta Data Access, o
TDataSource.




Configure a propriedade Dataset do DataSource apontando para a IbQuery




Configure a propriedade DataSource do DBGRID apontando para o DataSource1

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 70 de 90
Verso 05/04/2013



Criando um programa que permite a execuo de SQLs dinmicos

Adicione um MEMO no FORM e modifique o fonte do boto para:



Veja que agora os comandos a serem executados sero os comandos digitados no MEMO1.




Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 71 de 90
Verso 05/04/2013
Executando comandos Insert, Update e Delete

Para executar estes comandos necessrio trocar o comando Open para ExecSql, esses
comandos no retornam resultados.

Adicione um novo boto no FORM e adicione o cdigo abaixo:





Toda vez que esses comando so executados eles geram transaes para controlar as
alteraes, quem responsvel por estas transaes o Componente IbTransaction, os
comandos Commit e Rollback devem ser usados como:

Ibtransaction1.CommitRetaining;

IbTransaction1.RollBackRetaining;

Existem tambm os comandos commit e rollback, mas no recomendo o uso pois ele fecha o
dataset depois de executados.

Para testar as transaes crie dois botes na aplicao um para cada comando, conforme
exemplo:

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 72 de 90
Verso 05/04/2013




Agora basta executar comandos de update, insert e delete e testar o uso das transaes.

Navegando pelos Registros Retornados

possvel navegar pelos registros retornados por uma consulta SQL, para isso dispomos dos
comandos abaixo;

First;
Move o cursor para o primeiro registro, por default quando a consulta executada o cursor j
se encontra no primeiro registro.

Last;
Move o cursor para o ltimo registro. Quando estamos neste registro e tentamos nos mover
mais um, a varivel EOF recebe o valor true, indicando que chegamos ao final do resultado
(EOF = End of file).

Prior;
Move o cursor para o registro anterior ao atual.

Next;
Move o cursor para o prximo registro.

Para exemplificar crie e codifique os botes conforme exemplo abaixo:
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 73 de 90
Verso 05/04/2013




Acessando os dados dos registros retornados, via Cdigo

O resultado de uma consulta SQL preenche o que chamamos de Fields (campos), assim
podemos acessar cada Campo (coluna) do resultado retornado. Veja abaixo alguns comandos
que podem ser usados

Ibquery1.RecordCount;
Retorna quantos registros foram retornados na consulta SQL, no um comando aconselhvel
pois para que ele retorne o resultado completo necessrio que ele navegue por todos os
resultados para poder cont-los, ele pode ser til em casos de saber se retornou 0 ou no,
por exemplo, agora em caso de saber exatamente quantos registros retornados, recomendo
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 74 de 90
Verso 05/04/2013
que primeiro seja dado um last para mover o cursor para o ltimo registro, e logo aps seja lido
o valor de recordcount, isso trar maior confiabilidade no resultado, mas no uma tcnica
adequada para resultados com grande volume de dados, pois necessrio que todos os
registros sejam descarregados para a aplicao para que o recordcount retorne o valor
correto.

IbQuery1.Fields.Count;
Retorna quantos campos (colunas) foram retornadas na consulta

Acessando o Valor dos Fields pelo ndice do retorno

IBQuery1.Fields[0].AsString

Neste exemplo estamos capturando o valor da primeira coluna do Retorno, se o nosso sql
tivesse retornado as colunas Codigo|Nome|Valor estaramos resgatando o valor da Coluna
Cdigo.

AsString representa que queremos o resultado convertido em uma string, podemos usar as
seguintes converses:

IBQuery1.Fields[0].AsBoolean
IBQuery1.Fields[0].AsCurrency
IBQuery1.Fields[0].AsDateTime
IBQuery1.Fields[0].AsSingle
IBQuery1.Fields[0].AsFloat
IBQuery1.Fields[0].AsExtended
IBQuery1.Fields[0].AsInteger

Entre outras.

Acessando o Valor do Retorno pelo Nome do Campo (coluna)

IBQuery1.FieldByName('codigo').asstring

Neste exemplo estamos resgatando o valor da coluna cdigo, independente da posio dela no
resultado e estamos convertendo esse valor para String.

Exemplo de uma consulta SQL que retorna apenas o cdigo de uma tabela, mostraremos
todos os registros do resultado em caixas de mensagem (showmessage)



Passando parmetros


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 75 de 90
Verso 05/04/2013
Quando desejamos passar um parmetro para um comando, seja sele uma consulta, uma
insero, uma modificao ou at mesmo uma deleo, podemos usar o comando
ParamByName. Exemplo:



Veja que no comando foi adicionado um parmetro delimitado pelo :pcodigo isso indica ao
componente que naquele local do comando ser inserido o valor do parmetro PCODIGO, para
preencher esse valor usamos o comando

Ibquery1.ParamByName(pcodigo).asinteger:=1;

Ou seja, indicamos ao componente para atribuir ao parmetro PCODIGO o valor 1 em inteiro,
no final o sql montado da seguinte maneira:



O uso de parmetros nos d liberdade de montarmos sqls mais facilmente, sem nos
preocuparmos com algumas regras de acordo com o tipo do campo. Exemplo:



Suponha que a coluna NOME seja do tipo varchar, ou seja, STRING, o correto em uma
consulta como essa seria usar o Apstrofo para delimitar o resultado que queremos consultar,
ou seja, ela deveria ser construda assim:

Select * from tabteste where nome=JOSE

Porm se fssemos fazer isso no componente precisaramos cuidar a questo do apstrofo
que j delimitador de strings no delphi, ento precisaramos dobrar o apstrofo para que o
compilador no gere um erro, da seguinte maneira

Ibquery1.sql.add(Select * from tabteste where nome=JOSE );

Ou teramos que construir o sql usando concatenao de valores da seguinte maneira:

Ibquery1.sql.add('select * from tabteste where nome='+#39+'JOSE'+#39);

Agora usando o parmetro e indicando que o tipo do parmetro string (asstring) o prprio
componente se encarrega de montar o sql corretamente j adicionando o apstrofo no valor.

Assim como podemos usar os diversos tipos

Ascurrency (o prprio componente adicionar o ponto se contiver valores decimais)
As Date ( o prprio componente ir adicionar o apstrofo e inverter mm/dd/yyyy)



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 76 de 90
Verso 05/04/2013

Resgatando um registro do DBGRID

Para saber em que linha do resultado o DBGRID encontra-se posicionado, basta acessarmos o
Dataset que gerou o resultado, ou seja, nos nossos exemplos a IbQuery1, o fato de
caminharmos, ou seja deslocarmos o ponteiro no DBGRID na verdade estamos caminhando
no resultado da Ibquery, porm possvel fazer um acesso atravs do DBGRID. Exemplo:




Veja a Ordem, o Grid acessa o DataSource, que Acessa o Dataset que no nosso exemplo a
IbQuery1



O mesmo comando poderia ser escrito da seguinte maneira:

Ibquery1.Fieldbyname(codigo).asstring


Usando o TDbNavigator

Esse componente encontra-se na palheta Data Controls, e serve para navegar pelos
resultados.



Configure a propriedade DataSource ao DataSource1

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 77 de 90
Verso 05/04/2013


A propriedade VisibleButtons, indica quais botes devem ser mostrados, podemos omitir
botes que no sero usados, como os botes de insert, delete....



Como nosso datasource est ligado a um dataset Ibquery os botes de alterao dos dados
no so habilitados, eles se habilitariam se estivssemos trabalhando com outros
componentes, como por exemplo o IbDataset que um componente que configuramos os sqls
de modificao dos dados e de seleo, ou um IbTable.



Chave Primria controlada pelo Banco de Dados

Um dos recursos disponveis para controlar a chave primria como sendo sempre nica e
controlar a concorrncia de mltiplos usurios para que no ocorra a duplicao de chaves o
uso dos generators

Um generator um cdigo incremental que pode ser incrementado ou decrementado pela
aplicao ou pelo prprio banco de dados atravs de procedures e triggers.

Criaremos um generator de exemplo, para isso execute o seguinte comando no ISQL

CREATE GENERATOR GENTESTE;

Comando Sql para Incrementar um Generator e resgatar seu resultado

SELECT GEN_ID(GENTESTE,1) CODIGO FROM RDB$DATABASE

Exemplo no Delphi, usando um component IbQuery
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 78 de 90
Verso 05/04/2013




Usando DataModule no Delphi

DataModule um local especial para abrigarmos nossos coponentes de acesso a dados,
podem tambm abrigar outros componentes que no sejam visuais, uma forma interessante
de concentrarmos componentes para diversos formulrios.

Para criar um DataModule

Menu File \ New \ Other



Na janela New Itens escolha a categoria Delphi Files \ Data Module



Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 79 de 90
Verso 05/04/2013

Exemplo de um DataModulo concentrando os principais componentes de acesso ao banco de
dados



Para usar os componentes do DataModulo em outras units basta acrescentar a Unit do
DataModulo a lista de uses da unit desejada.


Usando Arquivos INI para resgatar o caminho no Banco de Dados Dinamicamente

Uma das formas de se resgatar o caminho do banco de dados dinamicamente atravs de um
arquivo INI, que nada mais que um arquivo texto com um padro, de ele pode ser usado para
guardar diversas informaes do sistema, como por exemplo o caminho do banco de dados e o
usurio padro.

Arquivos INI so arquivos de texto simples com uma estrutura bsica. So normalmente
associados com o Microsoft Windows, mas tambm so utilizados em outras plataformas...

Propriedades

O elemento bsico contido em um arquivo INI a propriedade (ou parmetro). Toda
propriedade tem um nome e um valor, delimitado por um sinal de igual(=). O nome aparece
esquerda do sinal de igual.

nome=valor

Sees

Propriedades podem ser agrupadas em sees nomeadas arbitrariamente. O nome da seo
aparece em uma nica linha, entre colchetes ([ e ]). Todas as propriedades aps a declarao
da seo so associadas a esta seo. No h um delimitador explcito de "final de seo";
sees terminam na prxima declarao de seo ou no final do arquivo. Sees no podem
ser aninhadas.

[seo]

Comentrios
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 80 de 90
Verso 05/04/2013
Ponto-e-vrgula(;) indica o incio de um comentrio. Comentrios continuam at o final da linha.
Qualquer coisa entre o ponto e vrgula e o final da linha ignorada.
; texto de comentrio
Fonte: http://pt.wikipedia.org/wiki/INI_%28formato_de_arquivo%29


Exemplo de um arquivo INI

[CONFIGURACOES]

caminho=D:\AULA\Agenda\Agenda.FDB


Exemplo de Como resgatar o caminho do banco de dados atravs de um Arquivo INI



Exemplo de como Configurar a IbDatabase dinamicamente com o caminho do banco de dados
o usurio e a senha



No boto OnClick do Boto OK

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 81 de 90
Verso 05/04/2013


Componente IbTable

O componente IBTable no um componente muito recomendado, devido a sua lentido no
tratamento dos dados e de sua pobreza em relao a pesquisas, pois no trabalha com
comandos SQL. Porm ele pode ser til em situaes simples, como por exemplo um DBGRID
editvel para trabalhar com pequeno volume de dados.

Exemplo de uso de um IbTable com DBGRID editvel

Adicione um Ibtable e faa a ligao dele com a IBDatabase



Em um formulrio especfico, adicione um DBGRID um DBNavigator e um DataSource.

Faa a ligao do DataSource a IbTable atravs da propriedade DataSet.

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 82 de 90
Verso 05/04/2013


Faa a ligao do DbGrid e do DbNavigator ao DataSource atravs da propriedade DataSource



Agora quando chamarmos esse formulrio configuraremos qual Tabela a IBTable ir se
conectar e abriremos ela. Para isso adicione no OnShow do formulrio o cdigo de exemplo:


Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 83 de 90
Verso 05/04/2013


No OnClose do Formulrio fechamos a tabela.



Desenvolvendo um simples Relatrio com REPORT BUILDER

O report builder no nativo no Delphi Xe3, portanto deve ser adquirido e instalado.

Adicione um TppDbPipeline da Palheta RBuilder



Esse componente ser responsvel por fazer a conexo com os componentes de Dados
(querys, tables...)

Adicione um TppReport da Palheta RBuilder

Esse componente ser responsvel pelo desenho do Relatrio e todo o controle de impresso.



Para que o ppDbPipeline possa se conectar a uma fonte de dados precisaremos "liga-lo a um
DataSource, indico ento que seja adicionada uma query e um datasource especfico para o
relatrio.

Adicione uma IbQuery, conecte-a ao Ibdatabase principal da aplicao
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 84 de 90
Verso 05/04/2013



Adicione um DataSource e ligue-o a Query do Relatrio



Faa a ligao entre o ppDbPipeline e o DataSourceRelatrio pela propriedade DataSource




Faa a ligao entre o ppReport e o ppDbPipeline pela propriedade DataPipeline do ppReport

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 85 de 90
Verso 05/04/2013


Para construirmos um relatrio ser necessrio por hora estarmos conectado ao banco de
dados e com uma fonte de dados (query) aberta com dados, assim poderemos ver os campos
disponveis para serem usados, porm aps construir o relatrio desconecte o Database, para
que ele possa ser configurado dinamicamente, como j ensinado anteriormente, quando a
aplicao estiver em execuo.

Para conectar a aplicao, configure o IBdatabase manualmente, clicando duas vezes sobre
ele.



Depois passe a propriedade connected dele para True



Agora insira o SQL de pesquisa na Ibquery responsvel pelo relatrio, atravs da propriedade
SQL

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 86 de 90
Verso 05/04/2013




Passe a Query para Active=True



Pronto, agora que temos nossa aplicao conectada no banco de dados e com uma query com
dados, em tempo de desenvolvimento, vamos dar um duplo clique sobre o componente
ppReport para desenhar nosso relatrio

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 87 de 90
Verso 05/04/2013


O Report Builder trabalha com bandas, que so regies do relatrio que so mostradas de
acordo com sua funo, por exemplo:




Banda Title = Ttulo, mostrada apenas na primeira pgina do Relatrio, ideal para
adicionarmos informaes da empresa, logotipos e outras informaes que s devem aparecer
uma nica vez
Banda Summary = Sumrio, mostrada apenas na ltima pgina do Relatrio, ideal para
adicionar informaes finais, como totalizadores, frases finais, etc.
Header = Cabealho, mostrado em todas as pginas na parte superior, pode ser configurada
para ser mostrada ou no na primeira e na ltima folha
Footer = Rodap, mostrada em todas as pginas na parte inferior da pgina, pode ser
configurada para ser mostrada ou no na primeira e na ltima folha

Banda Detail = Detalhe, a banda principal do Relatrio, nela que ser mostrada as
informaes detalhes, ou seja, que se repetem, no relatrio. Por exemplo em um relatrio da
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 88 de 90
Verso 05/04/2013
agenda ela ir mostrar os dados propriamente ditos da agenda, como nome, telefone... de
acordo como quisermos, configuramos ela uma nica vez e ela se encarrega de se repetir
quantas vezes necessria de acordo com o nmero de registros a serem mostrados.

Palheta Standard Components



So componentes padres como labels, memos, linhas, cdigos de barras, vrias de sistemas
(data, hora, nmero de pgina). No so ligadas aos dados da fonte de dado, so
independentes.

Palheta Data Components



So os componentes conectados a fonte de dado escolhida, composta por Labels, memos,
campos calculados, cdigos de baras, etc.

Desenvolvendo um simples Relatrio

Adicione uma Label da Palheta Standard Components na Banda Header e configure sua
caption para Relatrio de Agenda





Adicione tambm labels que sero usadas para Identificar as Colunas Cdigo, Nome e
Telefone, conforme desenho abaixo
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 89 de 90
Verso 05/04/2013


Adicione agora 03 DbText da Palheta Data Components na Banda Detail



Alinhe-os conforme desenho abaixo



Configure agora individualmente cada DbText fazendo a ligao ao campo desejado na fonte
de Dados




Para Visualizar como o relatrio est ficando clique na Aba PreView
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) Delphi Bsico
Pgina 90 de 90
Verso 05/04/2013




Aps configurar o que desejar feche a janela do ReportBuilder e retorne para o projeto

No se esquea de desconectar o IbDatabase antes de distribuir sua aplicao, pois
nem sempre o caminho do banco de dados ser o mesmo em todas as mquinas, e
por este motivo a aplicao ir gerar erros ao executar o programa.


Como chamar o relatrio em tempo de execuo

Adicione um boto ou um menu que deseja chamar a impresso do relatrio e configure a
query que ser a fornecedora de dados e simplesmente chame o mtodo PRINT do ppReport,
conforme exemplo abaixo:

You might also like