Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 1 de 90 
Versão 05/04/2013 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CURSO DE DELPHI BÁSICO 
EMBARCADERO RAD STUDIO XE3 
 
 
 
 
 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 2 de 90 
Versão 05/04/2013 
 
CONTEÚDO PROGRAMÁTICO 
 
• Conhecendo a IDE do Delphi 
• Projetos, Units e Formulários 
• Pascal para Programadores C - Entenda as principais diferença e entendenda 
a Delphi Language: Variáveis, operadores, laços de repetição (For, while e 
repeat), estrutura de decisão (IF, then, else, case), Procedimento e Função, 
uso de with com componentes e objetos. 
• Estrutura de Programa e Escopo 
• Programação 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 
• Interação com o usuário através de Mensagens e Caixas de Entradas 
(showmessage, messagedlg e inputquery). 
• Criando Menus e Popup Menus 
• Múltiplos Formulários 
• O Poder da Classe StringList e o seu uso nos componentes Memo, ListBox, 
Combobox e Rádio Group 
• Uso da TabbedNotebook, PageControls, TrackBar e ProgressBar 
• Status Bar e Toolbar 
• Uso de Timers 
• StringGrid básico para mostrar informações 
• Criando Units com Funções 
• Passando componentes e formulários de parâmetro 
• Manipulando Arquivos Textos 
• Desenvolvimento de um Software de Agenda com arquivo texto 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 3 de 90 
Versão 05/04/2013 
Conhecendo a IDE do Delphi 
 
IDE (Integrated Development Environment), um ambiente integrado para desenvolvimento de 
software 
 
 
 
Welcome Page - Página de Boas Vindas 
 
 
 
Nesta página você encontrará possibilidade de visualizar os projetos abertos recentemente, 
criar novos projetos, verificar as novidades dos produtos Embarcadero, ter acesso a 
documentação e helps entre outras funções. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 4 de 90 
Versão 05/04/2013 
Palheta Standard 
 
 
 
Palheta responsável 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, porém você pode personalizar seu ambiente de trabalho, com as janelas e 
posições das mesmas da forma que você preferir. 
 
Palheta View 
 
 
 
Responsável por Visualizar as units, formulários e alternar entre Visual (form) e Código (unit) 
 
Palheta Debug 
 
 
 
Palheta Responsável pela Depuração do Projeto, ou seja, compilar, compilar e executar, 
pausar a depuração, fazer depuração linha a linha, entre outras opções de depuração. 
Veremos a função de cada uma dessas opções mais adiante. 
 
Tool Palette - Palheta de Ferramentas (Ctrl + Alt + P) 
 
Nesta palheta você encontrará as ferramentas necessárias para trabalhar, quando não 
estamos com nenhum projeto aberto a palheta de ferramentas mostrará os possíveis projetos 
que podem ser criados. 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 5 de 90 
Versão 05/04/2013 
No curso básico trabalharemos com projetos do tipo “VCL Forms Application”, dê dois cliques 
sobre essa opção e um novo projeto será criado. 
 
Veja que agora a Palheta de Ferramentas irá mostrar as opções 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 depuração (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 formulário e a palheta Estrutura mostrou 
como eles estão organizados, ou seja o Edit1 e o Memo1 estão “dentro” do Formulário Form2. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 6 de 90 
Versão 05/04/2013 
 
 
Object Inspector – Palheta Inspetor de Objetos (F11) 
 
Esta é uma das palhetas que teremos o maior contato durante o desenvolvimento, é através 
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 
 
Através 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 Básico 
Página 7 de 90 
Versão 05/04/2013 
 
 
 
Projetos, Units e Formulários 
 
 
 
Um projeto é uma coletânea de arquivos necessários para que um programa possa funcionar, 
no Delphi XE3 existem diversos tipos de projetos, como por exemplo: 
 
VCL Forms Aplicattion – Aplicação baseada em formulários 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 – Aplicação que pode ser usada em múltiplas plataformas 
desktop (Windows, Mac Os), com componentes redesenhados e estilizados. 
 
VCL Metropolis UI Application – Aplicação baseada em VCL, porém com recursos visuais do 
tema Metropolis (Windows 8). 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 8 de 90 
Versão 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 
Programação de Aplicativos) do Windows, caso você troque a aparência do Windows, a 
aplicação sofre modificações visuais, pois é a própria API do Windows que desenha os 
componentes. 
 
Um projeto é uma coletânea de units e formulários para gerar uma aplicação. 
Uma unit (.pas) pode existir por si só. 
Um formulário depende de uma Unit (.pas) e de um arquivo (.dfm), a unit contém o código 
funcional da aplicação e arquivo “dfm” contém o código dos componentes visuais do formulário. 
 
Exemplo de um projeto 
 
 
 
Exemplo de uma unit que contém um formulário 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 9 de 90 
Versão 05/04/2013 
 
Entendendo a estrutura de uma UNIT 
 
unit Unit2; //nome da Unit 
 
interface //bloco de interface responsável pelas declarações 
 
uses //declara as units (bibliotecas) que serão usadas 
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, 
Vcl.Graphics, 
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs; 
 
Type //criação de novos tipos 
 
//Criando uma classe herdada da classe TFORM 
 TForm2 = class(TForm) 
 private 
 { Private declarations } 
 Public 
 { Public declarations } 
 end; 
 
 
var //variáveis globais a esta unit 
 Form2: TForm2; 
 
implementation //Bloco de implementação 
 
{$R *.dfm} 
 
//Área onde serão implementados os métodos, procedimentos e funções 
 
 
end. //indica o fim da unit 
 
Exemplo do dfm desteformulário 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 10 de 90 
Versão 05/04/2013 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 11 de 90 
Versão 05/04/2013 
Um pouco da Delphi Language e conversão de sintaxe 
 
 
Como o foco de nosso curso são alunos que já tem um certo conhecimento em C ou Java, 
explanaremos aqui as principais diferenças de sintaxe entre as duas linguagens. 
 
Operadores 
 
 + Soma 
 - Subtração 
 * Multiplicação 
 / Divisão 
 
Comentários 
 
// comentário de uma linha 
 
(* 
Comentário em 
Bloco 
*) 
 
{ 
Comentário em 
Bloco 
 
} 
 
 
 Em C Em Pascal 
Atribuição = := 
Comparação == = 
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; 
Laço de Repetição 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; 
 
 
Laço de Repetição WHILE while( i <= 100 ) While (i<=100) 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 12 de 90 
Versão 05/04/2013 
{ 
 
} 
 
Do Begin 
 
End; 
Módulo ou resto da Divisão If ((4 % 2) ==0) 
{ 
printf ("é par “); 
} 
If ((4 mod 2)=0) 
Then Begin 
 Showmessage(‘é par’); 
End; 
 
 
Modularização: Funções e Procedimentos 
 
Procedimentos 
 
Em C 
 
void soma() 
{ 
 
} 
 
Em Pascal 
 
Procedure Soma; 
Begin 
 
End; 
 
Funções 
 
 Em C 
 
 Int soma() 
 { 
 return 30; // sai da função nesta linha e retorna 30 
 } 
 
 Em Pascal 
 
 Function soma:integer; 
 Begin 
 Result:=30; //armazena 30 na variável de retorno, mas não sai nesta linha 
 Exit; //não obrigatório, mas serve para sair da função. 
 End; 
 
Passagem de parâmetros em procedimentos e funções 
 
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 Básico 
Página 13 de 90 
Versão 05/04/2013 
 result:=a+b; 
End; 
 
Passagem por referência 
 
Em C 
 
int soma (int& a,int& b) 
{ 
} 
 
Em Pascal 
 
Function soma (var a,b:integer):integer; 
Begin 
End; 
 
ESCOPO DE VARIÁVEIS 
 
Assim como em C, se uma variável for declarada dentro de uma função, o escopo dela é apenas a 
função. 
 
Para declarar uma função em Pascal existem áreas específicas para esse procedimento, diferentemente 
de C que uma variável pode ser declarada em qualquer parte do código. 
 
Declarando variáveis dentro de um procedimento (entre o nome da função e o Begin) 
 
Procedure Soma; 
Var 
A,b:integer; 
Texto:string; 
Begin 
End; 
 
Declarando uma variável Global a uma Unit (no var antes do implementation da unit, junto a variável do 
formulário) 
 
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 Básico 
Página 14 de 90 
Versão 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 Dígitos 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 -263+1 .. 263-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 representação de 1 bytes (1 caracter) 
String vetor de caracteres 
 
Funções de String 
 
S:=‘texto que será enviado para a variável S’; 
 
A:=‘teste’; 
B:=‘de texto’; 
C:=A+B+’ usando concatenação de strings’; 
 
Função length retorna a quantidade de caracteres de uma string 
Quantidadecaracteres:=Length(C); 
 
Uma string inicia em 1 e não em 0, então para percorrer uma string 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 15 de 90 
Versão 05/04/2013 
 
For cont:=1 to length(c) do 
Begin 
 Stringfinal:=StringFinal + C[cont]; 
End; 
 
Algumas funções importantes de conversões entre tipos 
 
Na conversão o parâmetro deve conter um valor correto para o tipo destino, caso contrário gerará uma 
excessão. 
 
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 funções em um click de um botão 
 
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 Básico 
Página 16 de 90 
Versão 05/04/2013 
 
COMPONENTES BÁSICOS 
 
Form – Formulário 
 
 
 
Propriedades Principais 
 
Name = Nome do Componente 
Caption = Texto que aparece na barra de título 
Color = Cor do Formulário 
Font = Fonte do Formulário (fonte, tamanho, cor e estilos) 
Height = Altura do Formulário 
Width = Largura do Formulário 
State = Estado que ele aparecerá 
wsNormal = Normal 
wsMaximized = Maximizado 
wsMinimized - Minimizado 
 
Position = Posição que o formulário aparecerá na tela 
 poDesigned = Posição do desenvolvimento 
 poDefault = Posição e tamanho determinado pelo SO 
 poDefaultPosOnly = Posição determinado pelo SO, porém tamanho não. 
 poDefaultSizeOnly = Tamanho controlado pelo SO, mas posição no desenvolvimento 
 poScreenCenter = Centro da tela, tamanho do desenvolvimento, no monitor default 
 poDesktopCenter = Centro do Desktop, mesmo com múltiplos monitores 
 poMainFormCenter Centro do Formulário Principal (quando janela secundário) 
 poOwnerFormCenter = Centro do Formulário proprietário (criador). 
 
BorderStyle = Estilo da Borda 
 bsDialog = Não redimensionável, somente botão fechar. 
bsSingle = Não redimensionável, menu de minimizar / maximizar. 
bsNone = Não redimensionável, sem linha de borda visível.bsSizeable = Redimensionável 
bsToolWindow = Igual bsSingle mas com uma barra de título menor. 
bsSizeToolWin = Igual bsSizeable com uma barra de título menor. 
 
KeyPreview = Intercepta as teclas pressionadas em outros componentes 
 
Eventos 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 17 de 90 
Versão 05/04/2013 
Grande parte destes eventos existirão em outros componentes da VCL, portanto a explicação 
para eles estendem-se para outros eventos, inclusive alguns códigos de eventos serão 
exemplificados aqui em outros componentes, como por exemplo Edit’s. 
 
OnCreate(Sender: TObject); 
 
Procedimento invocado quando o formulário é criado na memória (instanciado) 
 
Parâmetros 
 
Sender do tipo Tobject = É um parâmetro 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 método, entre outras 
manipulações mais avançadas. 
 
procedure TForm3.FormCreate(Sender: TObject); 
begin 
 
end; 
 
OnDestroy(Sender: TObject); 
 
Procedimento invocado quando o formulário é destruído na memória (memória é liberada) 
 
Parâmetros 
 
Sender = Já estudado 
 
procedure TForm3.FormDestroy(Sender: TObject); 
begin 
 
end; 
 
OnShow(Sender: TObject); 
 
Procedimento invocado quando o formulário é mostrado 
 
Parâmetros 
 
Sender = Já estudado 
 
procedure TForm3.FormShow(Sender: TObject); 
begin 
 
end; 
 
OnClose(Sender: TObject; var Action: TCloseAction); 
 
Este evento é invocado no momento que o formulário recebe um comando de fechamento, seja 
ele via código ao clicar no ícone para fechar ou com teclas de atalho (Alt+F4). 
 
Parâmetros 
 
Sender = já estudado 
 
Action do tipo TCloseAction = É um parâmetro que indica a ação a ser tomada pelo formulário, 
os possíveis valores são: caNone, caHide, caFree, caMinimize 
 
Exemplo de como abortar o fechamento de um formulário 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 18 de 90 
Versão 05/04/2013 
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
 Action:=caNone; //exemplo de como abortar o fechamento do formulário 
end; 
 
OnActivate(Sender: TObject); 
 
Este evento é invocado na ativação do Formulário (toda vez que a janela do formulário entra 
em Foco) 
 
Parâmetros 
 
Sender = já estudado 
 
procedure TForm3.FormActivate(Sender: TObject); 
begin 
 
end; 
 
OnClick(Sender: TObject); 
 
Este evento é invocado toda vez que o formulário recebe um click do mouse 
 
Parâmetros 
 
Sender = já estudado 
 
procedure TForm3.FormClick(Sender: TObject); 
begin 
 
end; 
 
OnDblClick(Sender: TObject); 
 
Este evento é invocado toda vez que o formulário recebe um duplo click do mouse 
 
Parâmetros 
 
Sender = já estudado 
 
procedure TForm3.FormDblClick(Sender: TObject); 
begin 
 
end; 
 
OnKeyPress(Sender: TObject; var Key: Char); 
 
Este evento é invocado toda vez que o formulário recebe o pressionamento de uma tecla 
 
Parâmetros 
 
Sender = já estudado 
 
Key do tipo Char é sinalizado como o identificador var, isto significa que ele foi enviado via 
referência e que seu valor pode ser alterado, esse parâmetro contém a tecla que foi 
pressionada, portanto é possível fazer tratamento com esse parâmetro. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 19 de 90 
Versão 05/04/2013 
O formulário só intercepta o pressionamento de teclas em outros controles se a propriedade 
KeyPreview estiver com true, caso contrário 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 código ASC da tecla) ele irá enviar o 
Foco para o Edit1. 
 
Se qualquer tecla diferente do 1 for pressionado a Key é anulada, enviando o código #0 para 
ela, isso fará com o que for digitado seja descartado e nem seja mostrado no edit1. 
 
No exemplo abaixo é um código que só aceitará numéricos 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 formulário recebe o pressionamento de uma tecla para 
baixo. 
 
procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word; 
 Shift: TShiftState); 
begin 
end; 
 
A principal diferença entre o evento OnKeyPress e o evento OnKeyDown é que o evento 
OnKeyPress não é chamado quando teclas que não são da tabela ASCII são pressionadas. 
 
Teclas Alfa Numéricas (abc...1234...), acentos, Enter e BackSpace invocam o método 
OnKeyPress, porém teclas de Função (F1,F2....), teclas de navegação (setas para cima, baixo, 
esquerda e direita), teclas Shift e Control não invocam o método OnKeyPress, mas invocam o 
método OnKeyDown. 
 
A outra diferença entre as funções é que o parâmetro Key da OnKeyPress é um caracter ASC, 
já o parâmetro Key da OnKeyDown é um caracter WORD, ou seja, é o código numérico da 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 20 de 90 
Versão 05/04/2013 
tecla e não seu correspondente na tabela ASC, até porque algumas teclas não tem 
correspondente na tabela ASC como por exemplo as teclas de Função. 
 
Algumas teclas tem constantes pré-definidas, assim você não precisará saber o código 
numérico 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 código correspondente: 
 
VK_LEFT = Tecla de Navegação para a Esquerda (37) 
VK_RIGHT = Tecla de Navegação para a Direita (39) 
VK_UP = Tecla de Navegação para Cima(38) 
VK_DOWN = Tecla de Navegação para Baixo (40) 
VK_DELETE = Tecla Delete (46) 
VK_ESCAPE = Tecla ESC (27) 
 
Parâmetros 
 
Sender = já estudado 
 
Key do tipo Word, contém o código numérico da tecla pressionada, pode ser alterado 
 
Exemplo de como verificar se o ESC foi pressionado. 
 
Primeira forma, usando o código da tecla 
 
procedure TForm2. FormKeyDown (Sender: TObject; var Key: Word; 
 Shift: TShiftState); 
begin 
 if (key=27) //código 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; 
 
Parâmetro Shift 
 
O parâmetro Shift serve para indicar se teclas como o Shift, Ctrl, Alt, botões de mouse ou 
dispositivos touchs estão pressionadas também. 
 
Exemplo 
 
if (ssCtrl in Shift) 
Then Showmessage(‘Control pressionado’); 
 
 
Alguns valores para o parâmetro: 
 
ssShift Shift Pressionado 
ssAlt Alt Pressionado 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 21 de 90 
Versão 05/04/2013 
ssCtrl The CTRL pressionado 
ssLeft Botão esquerdo do mouse 
ssRight Botão Direito do Mouse 
ssMiddle Botão do Meio do Mouse 
 
Exemplode 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 código enviado de parâmetro. 
 
OnKeyUP (Sender: TObject; var Key: Word; Shift: TShiftState); 
 
Este evento é invocado toda vez uma tecla é solta, inverso do onkeydown, ele segue os 
mesmos parâmetros do OnKeyDown já estudado. 
 
 
Label 
 
Encontrado Palheta Standard 
 
 
 
Propriedades Principais 
 
 
Align = Alinhamento da Label dentro do proprietário 
 alBottom = Na parte inferior 
 alClient = Toma todo o proprietário 
 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 automático 
Caption = Texto da Label 
Enabled = Ativa ou não a Label 
Font = Propriedades da Fonte 
Color = Color de Fundo da Label 
Transparent = Indica se a label terá fundo ou não 
Visible = Indica se a label será mostrada ou não 
WordWrap = Quebrar o texto automaticamente 
 
Eventos principais 
 
OnClick, OnDblClick, 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 22 de 90 
Versão 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 opção) 
Text = Texto do Edit 
CharCase = Determina se será normal, minúscula ou maiúsculas 
TabOrder = Ordem que o componente está no uso do TAB (mudança de foco) 
PasswordChar = Caractere que será usado no lugar dos caracteres que forem sendo 
digitados, ideal para campos de senha (password), para desabilitar esta opção deixe-a 
preenchida com #0 
 
Principais eventos 
 
OnClick, OnDblClick, OnKeyPress, OnKeyDown, OnKeyUp (já estudados) 
 
OnChange (Sender: Tobject); 
 
Método invocado toda vez que o conteúdo do Edit sofre modificação. 
 
Parâmetros 
 
Sender = já estudado 
 
procedure TForm3.Edit1Change(Sender: TObject); 
begin 
 Self.edit2.text:=Self.edit1.text; 
end; 
 
OnEnter (Sender:TObject); 
 
Este método é invocado quanto o edit recebe o foco 
 
Parâmetro 
 
Sender = Já estudado 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 23 de 90 
Versão 05/04/2013 
procedure TForm3.Edit1Enter(Sender: TObject); 
begin 
end; 
 
 
OnExit (Sender:Tobject); 
 
Este método é invocado quando o Edit perde o foco, ou seja, o foco é enviado para outro 
controle. 
 
Parâmetro 
 
Sender = já estudado. 
 
procedure TForm3.Edit1Exit(Sender: TObject); 
begin 
end; 
 
SetFocus 
 
Método que envia o foco para o componente. 
 
Self.Edit1.setfocus; 
 
 
Button = Botão 
 
Encontrado na Palheta Standard 
 
 
 
Principais Propriedades 
 
Caption = Texto do Botão, o uso do caractere & indica o caractere de atalho para o botão. 
 
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) 
 
Funções Auxiliares 
 
Now - variável global do tipo datetime que retorna a data e a hora atual 
 
Showmessage - Utilizada para enviar uma mensagem simples ao usuário. Exemplos 
 
 Showmessage(‘Teste de Mensagem’); 
 Showmessage(‘A hora agora é ‘+timetostr(now)); //mensagem indicando a hora atual 
 
Tratamento de Exceção (Except) 
 
Se uma Exceção ocorrer no sistema sem o uso do bloco Try Except o sistema paralisa a 
execução 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 Básico 
Página 24 de 90 
Versão 05/04/2013 
As exceções são tratadas em bloco 
 
 
Try 
 //regras de negócios 
Except 
 //tratamento do erro 
End; 
 
Exemplo 
 
Try 
 Strtoint(‘esta conversao vai gerar um erro’); 
 Showmessage(‘esta mensagem não será mostrada’); 
Except 
 Showmessage (‘Erro na conversão de string para inteiro’); 
 //... aqui você pode digitar outros comandos 
End; 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 25 de 90 
Versão 05/04/2013 
 
Exercício 01 
 
Criar um projeto chamado calculadora, com a aparência abaixo 
 
 
 
Nomes dos Componentes 
 
EdtValorInteiro 
EdtOperador 
EdtValorFloat 
BtCalcula 
BtLimpar 
LbResultado (label com o texto 0,00) 
 
Regras de Negócio 
 
• 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 contém um valor inteiro 
válido, caso não 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 contém um operador (+ - / *) 
válido, caso não 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 contém um valor float válido, 
caso não tenha o sistema deve emitir uma mensagem erro e retornar o foco para o 
EdtValorFloat. 
• Ao clicar no botão BtCalcula o sistema deverá realizar a operação utilizando os valores 
e o operador digitado, retornar o resultado na label LBRESULTADO e voltar o foco 
para edtvalorinteiro. 
• Ao clicar no Botão 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 Básico 
Página 26 de 90 
Versão 05/04/2013 
CheckBox = Caixa de checagem 
 
Encontrado Palheta Standard 
 
 
 
Principais Propriedades 
 
Checked = Propriedade que indica se a checkbox está marcada (“checkada”) ou não. 
 
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 não selecionada'); 
 
RadioButton = Botão Radial 
 
Encontrado Palheta Standard 
 
É semelhante ao CheckBox, porém só permitido que um RadioButton do grupo esteja marcado 
(checked). 
 
 
 
Principais Propriedades 
 
Checked = Propriedade que indica se o RadioButton está marcado (checked) ou não. 
 
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 não selecionada'); 
 
Panel = Painel 
 
Encontrado Palheta Standard. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 27 de 90 
Versão 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 componentesdo Panel poderá ser 
acessado, se um panel for movido, todos os componentes do panel serão movidos juntos com 
ele. 
 
 
 
Principais Propriedades 
 
BevelOuter = Propriedade que indica a aparência 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 botão mostrado abaixo 
e escolha a figura que deseja que seja mostrada no Image. 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 28 de 90 
Versão 05/04/2013 
Stretch = Indica se a imagem será ajustada de acordo com o tamanho do objeto (esticada), não 
recomendado em alguns casos devido a distorção 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 métodos 
 
OnClick, OnDblClick (já estudados em outros componentes) 
 
Picture.LoadFromFile(stringcomocaminho); = Função usada para Carregar uma imagem 
do Disco. 
 
Picture.SaveToFile(stringcomocaminho); = Função usada para Salvar uma imagem no 
Disco. 
 
Exemplos 
 
Para carregar uma imagem do disco via código, use a função 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 é necessário adicionar a minha lista de uses uma unit especial para este 
tratamento: Vcl.imaging.pngimage 
 
Uma dica para não precisar decorar o nome das units, é inserir dois Timages em um formulário 
e inserir uma imagem jpeg e uma png, depois compilar, você perceberá que serão adicionadas 
as units automaticamente na seção interface, após isso pode apagar os componentes do 
formulário que as units continuarão. 
 
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 extensão da imagem deve ser a mesma do arquivo que foi carregado, caso 
necessite fazer conversão, como por exemplo abrir um bitmap e salvar em Jpeg existem 
funções específicas 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 função 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 Básico 
Página 29 de 90 
Versão 05/04/2013 
 
 
Principais Propriedades e Métodos 
 
Execute; = Esse método executa o openpicturedialog, ele retorna True se o usuário 
escolheu uma imagem ou false se o usuário cancelou a operação. 
FileName = Indica o nome do arquivo escolhido pelo usuário. 
 
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 diálogo padrão do 
Windows para salvar uma imagem. 
 
Principais Propriedades e Métodos 
 
Execute; = Esse método executa o savepicturedialog, ele retorna True se o usuário 
escolheu uma imagem ou false se o usuário cancelou a operação. 
FileName = Indica o nome do arquivo digitado pelo usuário. 
 
 
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 botão com a possibilidade de inserir imagens. 
 
Principais propriedades 
 
Glyph = imagem que será mostrada no botão 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 30 de 90 
Versão 05/04/2013 
 
 
 
MaskEdit = Edit (caixa de texto) com Máscara 
 
Encontrado Palheta Additional. 
 
 
 
 
 
O MaskEdit é um Edit porém a opção de máscara de digitação, ideal para formatar a digitação 
de telefones, campos de documentos (CPF, CNPJ) e datas. 
 
Principais Propriedades 
 
EditMask = Máscara que será aplicada, clique no botão mostrado abaixo para ver as opções de 
máscaras pré-formatadas, porém nada impede que você crie sua própria máscara. 
 
 
 
 
No exemplo acima foi utilizada uma máscara de data com dois dígitos no Ano. 
 
Outras propriedades já estudadas 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 31 de 90 
Versão 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) 
 
Interação com o usuário com Mensagens e Caixas de Entrada 
 
Showmessage = Mensagem Simples 
 
Exemplo 
 
Showmessage(‘Mensagem Simples’); 
 
Messagedlg = Mensagem com Ícones e botões 
 
Paramêtros 
 
Messagedlg(Msg,DlgType,[Buttons],HelpCtx,DefaultButton); 
 
Onde 
Msg = String com a mensagem. 
DlgType = Tipo de ícone que irá aparecer (mtwarning, mterror, mtinformation, 
mtconfirmation) 
Buttons = Botões que irão aparecer 
mbOK, mbCancel, mbYes, mbNo, mbAbort, mbRetry, mbIgnore, mbAll, 
mbNoToAll, mbYesToAll, mbClose 
Cada botão desses tem um código de resposta se quisermos capturar qual foi 
pressionado 
mrOK, mrCancel, mrYes, mrNo, mrAbort, mrRetry, mrIgnore, mrAll, mrNoToAll, 
mrYesToAll, mrClose 
 
HelpCtx = Código de erro se pressionado F1 
DefaultBtn = Botão que estará com o Foco, este parâmetro não é obrigatório. 
 
Exemplo simples com um botão 
 
Messagedlg('Mensagem com um botao',mtinformation,[mbok],0); 
 
Mensagem com dois botões 
 
Messagedlg('Mensagem com dois botões', mtwarning,[mbyes,mbno],0); 
 
Mensagem com botão default e com captura do botão pressionado 
 
If (Messagedlg('Deseja sair?', mtconfirmation,[mbyes,mbno],0,mbno)=mrYes) 
Then Showmessage('Você escolheu sair'); 
 
InputQuery = Pergunta com Caixa de Texto 
 
Parâmetros 
 
InputQuery(titulo,mensagem,variavelquevaireceber):boolean; 
 
Exemplo de uso 
 
procedure TForm3.BitBtn1Click(Sender: TObject); 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 32 de 90 
Versão 05/04/2013 
var 
variavelString:String; 
begin 
 variavelstring:= 'digite aqui... '; 
 if (inputquery('Título da Barra de Título','Texto da Mensagem - Digite seu nome',variavelstring)=True) 
 then Showmessage(' Seu nome é '+variavelString) 
 Else Showmessage(' Processo cancelado'); 
end; 
 
Exercícios 
 
Dicas de Exercício 
 
Desenvolver uma Calculadora Completa 
 
Desafio: Jogo da Velha 
 
Disponível para Download com o Fonte 
 
Dicas para Randomizar números 
 
Randomize; //necessário 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 Básico 
Página 33 de 90 
Versão 05/04/2013 
Este componente é usado para criação de Menus,após adicioná-lo no formulário, dê um duplo 
click sobre ele para abrir o Editor de Menu. 
 
Através do Editor é possível 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 criação de um Item separador, basta digitar – no lugar do caption. 
 
 
 
Arraste os items com o mouse para mudar a posição deles, pressione delete para apagá-los e 
insert para inserir novos itens. 
 
Eventos 
 
Para cada TMenuItem existe um método OnClick onde deve ser digitado o código que deseja 
que seja executado. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 34 de 90 
Versão 05/04/2013 
 
 
Exemplo 
 
procedure TForm3.Sair1Click(Sender: TObject); 
begin 
 Self.Close; 
end; 
 
Popup Menu = Menu acionado pelo botão direito do Mouse 
 
Encontrado na palheta Standard 
 
 
 
 
Este menu é usado como uma lista suspensa de opções (popup), segue o mesmo princípio do 
MainMenu para configuração de novos itens, clique duas vezes sobre ele e adicione os itens 
que desejar. 
 
 
 
Após configurar o PopupMenu é necessário indicar qual componente irá usá-lo, para isso 
escolha o componente (Edit, botão, formulário) e depois escolha na propriedade PopupMenu o 
componente configurado. 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 35 de 90 
Versão 05/04/2013 
 
 
Exemplo em funcionamento 
 
 
 
Múltiplos Formulários 
 
As vezes faz-se necessário em uma aplicação conter mais de um formulário (form), para que 
as funções possam distribuídas em múltiplas telas da aplicação. 
 
Quando criamos uma Aplicação VCL ela é composta por um único formulário, o formulário 
principal, caso este formulário seja fechado a aplicação é encerrada (o formulário padrão pode 
ser alterado), para adicionar novos formulários clique no menu File \ New \ Vcl Form - Delphi 
 
 
 
Veja que agora apareceram dois formulários na janela de navegação 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 36 de 90 
Versão 05/04/2013 
Para visualizar quais formulários fazem parte da aplicação você pode utilizar a Palheta View, 
botão View Form (Shift+F12) conforme imagem abaixo: 
 
 
 
No meu exemplo vou renomear o primeiro formulário criado como Fprincipal 
 
 
 
E o segundo como Fauxiliar 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 37 de 90 
Versão 05/04/2013 
Se rodarmos a aplicação o formulário que será mostrado é o Fprincipal, porque ele foi primeiro 
formulário a ser criado, se quiser alterar essa configuração, acesse: 
 
Menu Project \ Options 
 
Escolha o Item Forms e troque o Main Form, conforme figura abaixo 
 
 
 
Nesta tela podemos também configurar quais formulário serão criados automaticamente pela 
aplicação (auto-create), caso seja retirado um formulário desta lista é necessário fazer a 
criação do mesmo (instanciá-lo na memória) antes de usá-lo e destruí-lo após o uso, porém 
esse assunto não é escopo do nosso curso básico. 
 
Formas de invocar outros formulários 
 
Supondo que o nosso Main Form seja o Fprincipal, para acessar o Fauxiliar é necessário um 
comando para mostrá-lo, existem duas formas de mostrar um formulário: 
 
Chamadas Modais (janelas restritas) - Quando invocamos um formulário com uma chamada 
modal todos os demais formulários abertos não poderão ser acessados até que este formulário 
seja fechado. 
 
Chamadas Não-Modais (janelas não restritas) – Quando invocamos um formulário com uma 
chamada não-modal podemos acessar outros formulários 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 não-modal. 
 
 
Adicionando a Unit correspondente 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 38 de 90 
Versão 05/04/2013 
 
Tanto em um método quanto no outro é necessário que a Unit do formulário que se deseja 
invocar esteja listada na lista de units que serão usadas, elas podem estar adicionadas na lista 
de uses do interface ou do implementation, caso você compile a aplicação sem adicionar a unit 
o próprio Delphi irá avisá-lo disso: 
 
 
 
 
Veja que a mensagem do exemplo foi 
 
O Formulário Fprincipal está referenciando o formulário Fauxiliar declarado na unit Unit4 que 
não está na sua lista de USES. Deseja adicioná-la? 
 
Se você escolher a opção Yes o próprio Delphi irá adicioná-la a lista de uses, se escolhar não o 
programa não será executado. 
 
 
 
Chamadas Recursivas a Janelas Modais 
 
Imagine a situação que o Formulário Fprincipal invoca o Fauxiliar em uma chamada 
ShowModal e o Fauxiliar invoca o Fprincipal também em uma chamada ShowModal, o sistema 
irá gerar um erro: 
 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 39 de 90 
Versão 05/04/2013 
Porém nada impediria que o Fauxiliar invocasse outro Formulário qualquer em uma chamada 
Showmodal. 
 
Erro de referência Circular – Out of Memory 
 
No exemplo acima o sistema não geraria erro em tempo de compilação porque os dois 
formulários referenciam um ao outro na seção de implementation: 
 
 
 
Porém se formos no Fauxiliar e trocarmos a referência a Unit3(Fprincipal) para a seção de 
Interface, veja o erro que ocorre ao tentarmos compilar a aplicação: 
 
 
Referência da Fprincipal a Fauxiliar na Interface 
 
 
Referência da Fauxiliar a Fprincipal na interface 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 40 de 90 
Versão 05/04/2013 
 
Erro gerado pelo compilador 
 
 
Foi gerado um erro de Out of Memory, nas versões anteriores do Delphi seria gerado um Erro 
de Referência Circular, ou seja, duas units não podem referenciar uma a outra na seção de 
interface, apenas na seção de implementation. 
 
TStrings e TStringList 
 
As classes TStrings e TStringList são classes poderosíssimas do Delphi que simulam listas 
encadeadas de strings, contendo métodos para adicionar, remover, pesquisar, ordenar, 
acessar e alterar itens desta lista, muitos componentes da VCL possuem propriedades do tipo 
TStrings, portanto não é possível aprender estes objetos sem antes entender a classe Tstrings. 
 
Para nossos exemplos iremos criar uma instância da classe TStringList que é uma 
implementação da classe TStrings 
 
TStringList 
 
Usado para armazenar e manipular uma lista de strings. TStringList implementa as 
propriedades e métodos abstratos introduzidas pela TStrings, e introduz novas propriedades, 
eventos e métodos para: 
 
• Classificar as strings na lista. 
• Proibir duplicação de strings em listas ordenadas. 
• Responder a alterações no conteúdo da lista. 
• Controlar a classificação por ordem alfabética 
 
Para fazer nossos testes iremos adicionar um botão ao nosso formulário 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 não será ordenada a cada inserção 
 
 //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 Básico 
Página 41 de 90 
Versão 05/04/2013 
 Showmessage ('Lista Completa: '+#13+Lista.Text); //mostrando o texto completo (concatenação de 
todos os itens) 
 
 Showmessage (lista[2]); //acessando um item específico 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 
(concatenação de todos os itens) 
 
 Lista.Sort; //ordenando a lista em ordem alfabética 
 
 Showmessage ('Lista Ordenada '+#13+Lista.Text); //mostrando o texto completo (concatenação de 
todos os itens) 
 
 Lista.CaseSensitive:=true;//indica que DEVE diferenciar maiúsculas e minúsculas 
 posicao:=lista.IndexOf('E-STRING 1'); 
 if (posicao<0) 
 then Showmessage('String "E-STRING 1" não encontrada') 
 Else Showmessage('String "E-STRING 1" encontrada na posição '+inttostr(posicao)); 
 
 Lista.CaseSensitive:=False;//indica que NÃO DEVE diferenciar maiúsculas e minúsculas 
 posicao:=lista.IndexOf('E-STRING 1'); 
 if (posicao<0) 
 then Showmessage('String "E-STRING 1" não encontrada') 
 Else Showmessage('String "E-STRING 1" encontrada na posição '+inttostr(posicao)); 
 
 //Gerar erro em caso de duplicação só funciona se a lista estiver marcada para ordenar na inserção 
 Lista.Sorted:=True;//indica que a lista será ordenada a cada inserção 
 Lista.Duplicates:=dupError;//indicando que deverá gerar erro se inserir um item duplicado 
 
 Try 
 Lista.Add('e-String 1');//forçando o erro 
 Finally 
 FreeAndNil(Lista); 
 End; 
 
end; 
 
Entendendo as funções usadas no exemplo 
 
 Lista:=TStringList.Create; 
 
Neste comando estamos instanciando a classe TstringList na variável Lista (criando ela na 
memória) 
 
 Lista.Clear;//limpa os itens 
 
O método clear limpa os itens da lista, apagando-os 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 42 de 90 
Versão 05/04/2013 
 Lista.Sorted:=False;//indica que a lista não será ordenada a cada inserção 
 
O método sorted indica se a lista será ordenada ou não a cada inserção de itens. 
 
 Lista.Add('e-String 1'); 
 
O método add insere um novo item a lista 
 
 Showmessage ('Lista Completa: '+#13+Lista.Text); 
 
No exemplo acima estamos usando o método text que retorna uma string com a concatenação 
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 são caracteres de quebra de linha e 
retorno (#13 e #10) 
 
 Showmessage (lista[2]); 
 
No exemplo acima estamos acessando um item específico da lista, este comando retorna uma 
string com o valor do item, o item de posição 3 da lista, digitamos 2 no exemplo porque o 
primeiro item da lista é o item 0. 
 
 for cont := 0 to lista.Count-1 do Q 
 
No exemplo acima estamos usando o comando COUNT que é um método que retorna a 
quantidade de itens da lista 
 
 lista.Delete(2); 
 
O método delete exclui um item da lista, no exemplo estamos excluindo o terceiro item da lista 
 
 Lista.Sort; 
 
O método SORT ordena os itens da lista em ordem alfabética 
 
 Lista.CaseSensitive:=true; 
 
O método CaseSensitive indica se a pesquisa deverá considerar a diferença entre maiúsculas 
e minúsculas ou não. 
 
 posicao:=lista.IndexOf('E-STRING 1'); 
 
O método INDEXOF( ) retorna o índice do texto pesquisado dentro da lista, caso não seja 
encontrado retorna o valor -1 
 
 FreeAndNil(Lista); 
 
O método FreeAndNil é um método utilizado para desalocar (destruir) memória de objetos e 
“setar” a variável para nil após isso, caso esqueçamos de destruir um objeto instanciado 
manualmente geraremos fuga (leaks) de memória em nossa aplicação. 
 
A regra geral é: Todo objeto que construímos manualmente, sem ligação de “parents”, temos 
que desalocá-lo manualmente. A StringList é um exemplo de classe que deve ser desalocada 
manualmente pois em sua criação não permite que adicionemos um parent. 
 
 Lista.Duplicates:=dupError; 
 
O método Duplicates indicará como a Lista se comportar se receber um item duplicado, este 
método só pode ser usado para gerar erro se a lista estiver marcada para ser ordenada 
durante a inserção (Sorted=True) caso contrário ele não terá efeito algum. No exemplo acima 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 43 de 90 
Versão 05/04/2013 
foi configurado para gerar erro em caso de duplicação de itens, porém para testar esse método 
é necessário que usemos o bloco de tratamento de exceções (Try Except) caso contrário a 
exceção gerada pelo erro irá desviar o programa e a linha do freeandnil não será executada, 
para garantirmos essa execução 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 não, 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');//forçando 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 não tivéssemos o bloco try finally o programa encerraria a execução 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 liberação de 
memória (freeandnil), poderíamos utilizar também um bloco TryExcept, porém qualquer outro 
desvio da aplicação “pularia” o comando de desalocação, o correto no uso do Try Finally é 
envolver todo o código logo após 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 múltiplas linhas. 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 44 de 90 
Versão 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 métodos : clear, add, text, delete, indexof, count e acesso a itens [ ] , entre outros. 
Lines .SaveToFile(nomearquivo); = salva o conteúdo do Lines em um arquivo físico 
Lines.LoadfromFile(nomedoarquivo); = carrega o conteúdo de um arquivo texto para as linhas 
do memo. 
 
 
Exemplo de Manipulação 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 Três'); 
 Showmessage(Memo1.Lines.text); 
 Memo1.Lines.Delete(1); 
 Showmessage(Memo1.Lines.text); 
 Showmessage('A posição do texto "Linha Três" é '+inttostr(Memo1.Lines.IndexOf('LINHA TRÊS'))); 
 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 não permite a entrada de itens 
digitando dentro do ListBox, é necessário adicioná-lo via comando. 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 45 de 90 
Versão 05/04/2013 
 
 
 
 
Principais Propriedades 
 
Align, BorderStyle, Color, Font, Enabled, Height, Width (estudado em outros componentes) 
 
Sorted = Indica se a lista será ordenada na inserção 
ItemIndex = Indica qual a posição 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 métodos : 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 Básico 
Página 46 de 90 
Versão 05/04/2013 
 
 
 
 
Principais Propriedades 
 
Align, CharCase, Color, Font, Enabled, Height, Width, Sorted, ItemIndex (estudado em outros 
componentes) 
 
DropDownCount = Quantidade de Itens que serão 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 métodos : 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 Básico 
Página 47 de 90 
Versão 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 métodos : 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 página atual e 
para trocar a página atual. 
Style : Configura o Estilo visual da Aba, os estilos são: tsButtons, tsFlatButtons, 
 
Pages = Propriedade do Tipo TStrings que configura as páginas, clique no botão (...) 
para iniciar o editor de Páginas do Componente, neste editor é possível editar o nome das 
páginas, adicionar ou excluir novas páginas e alterar a disposição das mesmas. 
 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 48 de 90 
Versão 05/04/2013 
 
Principais Eventos 
 
OnChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); 
 
Esse evento é invocado quando ocorre uma tentative de mudança de Aba, o parâmetro 
NewTab indica a aba que será mostrada e o parâmetro AllowChange indica se será permitida 
ou não a mudança, sete esse parâmetro para false e a mudança não ocorrerá. 
 
PageControls 
 
Encontrado na Aba Win32 
 
 
 
 
 
Principais Propriedades 
 
TabIndex : Propriedade do Tipo integer que usamos para saber qual a Página atual e 
para trocar a página atual. 
Style : Configura o Estilo visual da Aba, os estilos são: tsButtons, tsFlatButtons, 
tsTabs 
TabPosition : Configura a posição da Aba, só funciona para o Estilho tsTabs 
 
Principais Eventos 
 
Onchanging : Método que é invocado ao tentar mudar de aba, ele antecede a mudança, 
podendo inclusive ser usado para abortar a mudança. 
 
Sintaxe: TabControl1Changing(Sender: TObject; var AllowChange: Boolean); 
 
O parâmetro AllowChange serve para indicar se será permitido ou não a mudança, alterando 
para false a mudança não ocorrerá. 
 
OnChange : Método que é invocado após a mudança de aba. 
 
Para criar novas Abas clique com o botão direito e escolha a Opção “New Page” 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 49 de 90 
Versão 05/04/2013 
 
 
 
TrackBar 
 
Encontrado na palheta Win32 
 
 
 
 
Principais propriedades 
 
Min Valor Mínimo da Trilha 
Max Valor Máximo 
Frequency Frequência que será usada ao arrastar (incremento) 
Position Posição atual 
SelStart Início da Seleção 
SelEnd Fim da Seleção 
SliderVisible Indica se o marcador da trilha será visível 
ShowSelRange Indica se mostra ou não a faixa de seleção 
TickMarks Indica a posição dos marcadores (embaixo, cima ou duplo) 
 
Principal Evento 
 
OnChange Invicado toda vez que ocorre uma mudança no Track 
 
ProgressBar 
 
Encontrado na palheta Win32 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 50 de 90 
Versão 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 
painéis que serão usados para mostrar informações de Status. 
 
Clique no botão (...) desta propriedade ou cliente com o botão direito sobre o componente no 
formulário e escolha a Opção Panels Editor 
 
 
 
 
No Editor clique na opção “Add New”, adicione quantos painéis desejar 
 
 
 
Depois configure as opções dos painéis, conforme a figura abaixo: 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 51 de 90 
Versão 05/04/2013 
 
 
É possível configurar o estilo, o texto, a largura do Painel entre outras opções. 
 
Para acessar o texto do painel via código use a propriedade Panels, no exemplo estamos 
alterando o texto do Panel com índice zero, para acessar outros painéis altere o valor do 
índice. 
 
StatusBar1.Panels[0].Text:='Teste'; 
 
 
 
ToolBar 
 
Encontrado na palheta Win32 
 
 
 
A Toolbar é uma barra de ferramentas, ideal para adicionar botões. Para adicionar um botão 
clique com o botão direito e escolha a Opção “New Button”, é possível também adicionar 
separadores visuais entre os botões, para isso clique com o botão direito e escolha a opção 
“New Separator” 
 
 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 52 de 90 
Versão 05/04/2013 
 
 
É possível configurar cada botão da ToolBar individualmente, basta selecionar o botão que 
deseja alterar as propriedades. 
 
Adicionando imagens nos botões 
 
Para adicionar imagens nos botões é necessário utilizar um ImageList, pois os botões não 
possuem uma propriedade para inserir uma imagem por botão. 
 
Adicione um ImageList 
 
 
 
Timers 
 
Encontrado na Palheta System 
 
 
 
O Timer serve para executar códigos a cada X milissegundos. 
 
PrincipaisPropriedades 
 
Enabled = Inicia ou para o timer e indica se o mesmo ativado ou não 
Interval = Inteiro que indica a quantidade de milissegundos que o timer irá temporizar 
até a próxima execução (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 código 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 Básico 
Página 53 de 90 
Versão 05/04/2013 
 // Adicione aqui neste o bloco de códigos que deseja executar a cada 
 //Execução 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 múltiplas informações. 
 
 
Principais Propriedades 
 
ColCount : Inteiro que indica quantas colunas terão a Grid 
RowCount : Inteiro que indica quantas linhas terão a Grid 
FixedCols : Inteiro que indica quantas colunas fixas terão a Grid 
FixedRows : Inteiro que indica quantas linhas fixas terão 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 Opções, listamos abaixo as mais importantes 
 goFixedVertLine : Indica se Mostrará as linhas de divisão vertical nas colunas fixas 
 goFixedHorzLine : Indica se mostrará as linhas de divisão horizontal nas linhas fixas 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 54 de 90 
Versão 05/04/2013 
 goVertLine : Indica se mostrará as linhas verticais 
 goHorzLIne : Indica se mostrará as linhas horizontais 
 goRangeSelect : Indica se permitirá seleção em faixas de células 
 goDrawFocusSelected: Indica se a célula de foco será desenhada como selecionada 
 goRowSizing : Indica se as linhas poderão ser redimensionadas 
 goColSizing : Indica se as colunas poderão ser redimensionadas 
 goEditing : Indica se permitirá a edição dos dados das células 
 goTabs : Indica se o tab funcionará como navegação entre as células 
 goRowSelect : Indica se a linha ficará toda selecionada 
 goAlwaysShowEditor : Indica se sempre as células estarão em edição, sem necessidade de 
pressionar alguma tecla para entrar em modo de edição. 
 
Cells : Propriedade para acessar e alterando os dados das células 
 
No exemplo abaixo estamos alterando o conteúdo da células 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 Básico 
Página 55 de 90 
Versão 05/04/2013 
Funções Importantes 
 
 
ExtractFilePath(Application.ExeName); 
 
Retorna uma string com o caminho da aplicação. 
 
FileExists(pcaminhodoexe); 
 
Retorna se o arquivo indicando na string do parâmetro existe ou não 
 
Criando Units 
 
Muitas vezes é necessário o reaproveitamento de código, sendo assim a melhor maneira é 
criando funções que podem ser usadas diversas units ou até mesmo por diversos projetos, 
para isso é necessário a criação de units, desvinculadas de formulários, contendo as funções 
importantes a serem reutilizadas, como orientação a objeto foge do escopo deste curso 
ensinaremos a criação de units simples com funções. 
 
Para criar uma nova unit 
 
Menu File \ New \ Unit - Delphi 
 
 
 
A nova unit será criada com um nome padrão, salve essa unit no menu File \ Save 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 56 de 90 
Versão 05/04/2013 
 
No exemplo abaixo salve minha unit com o nome de Uglobal 
 
 
 
Na seção de interface digitaremos o cabeçalho das funções e na seção implementation a 
implementação da função. 
 
No exemplo abaixo criaremos uma função que mostra uma mensagem de informação 
recebendo como parâmetro uma string com a mensagem que desejamos que seja mostrada 
 
 
 
Veja que foi necessário a declaração do uso da unit Vcl.dialogs, pois a função Messagedlg já 
estudada anteriormente pertence a unit. 
 
Agora se quisermos aproveitar essa função em nosso programa basta que declaremos o uso 
da Unit Uglobal nas units que queremos usá-la. 
 
Como exemplo chamaremos a função a partir do click de um botão em outra unit. 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 57 de 90 
Versão 05/04/2013 
 
 
 
Veja no exemplo acima que para poder utilizar as funções da unit Uglobal tivemos que declarar 
o uso dela na seção implementation do form, isso pode ser feito utilizando o atalho Alt+F11 e 
escolhendo a unit que desejamos usar. 
 
 
 
 
Regra Importante 
 
Como não estamos trabalhando com orientação a objetos, no caso do uso de múltiplos 
procedimentos ou funções em uma unit em que uma função pode utilizar outra da mesma unit, 
devemos declará-los na ordem de criação correta, ou seja, a função que será chamada por 
outra deverá estar implementada antes da função que a usará. Exemplo de um erro: 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 58 de 90 
Versão 05/04/2013 
 
 
A função MostraMensagem2 não foi encontrada porque foi declarada depois da função que 
necessita utilizá-la. O correto seria: 
 
 
 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 59 de 90 
Versão 05/04/2013 
 
 
Passagem de Parâmetro com classes 
 
 
Quando passarmos uma classe de parâmetro estamos passando necessariamente como 
referência, ou seja, tudo que modificarmos dentro da função no parâmetro, estará modificando 
a classe original, portanto podemos passar qualquer classe de parâmetro para funções, desde 
botões, labels ou até mesmo formulários. Veja o exemplo de um procedimento na nossa unit 
UGlobal que recebe um formulário de parâmetro e troca o caption do mesmo. 
 
 
 
Veja que a Unit Vcl.Forms teve que ser declarada na seção interface porque a classe TForm 
está presente no parâmetro da função. 
 
Para testar basta por um botão em um formulário e chamar a função: 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 60 de 90 
Versão 05/04/2013 
 
DELPHI COM FIREBIRD 
 
Não está no escopo do Curso, mas faremos uma breve apresentação sobre o uso de banco de 
dados Firebird com Delphi, não pretendemos abordar teorias de banco de dados neste curso, 
supõe-se que o aluno já conheça uma teoria fundamental de banco de dados envolvendo: 
Tabelas, Chaves Primárias, Chaves Estrangeiras, Visões, Procedimentos, Gatilhos (triggers), 
bem como os comandos sql : Select, Insert, Update e Delete 
 
Criação de um novo banco de dados 
 
Entre no IboConsole, conecte-se ao servidor local, o usuário e senha padrão do firebirdsão: 
 
Sysdba 
masterkey 
 
Clique com o botão direito sobre a opção databases e escolha a opção 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 execução de comandos SQL 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 61 de 90 
Versão 05/04/2013 
 
 
 
 
Para executar comandos utilize a opção 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 botões 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 Básico 
Página 62 de 90 
Versão 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 precisão de duas casas decimais 
Time = Hora 
 
Foi definido que o campo código não poderá ser nulo 
 
 CODIGO INTEGER NOT NULL, 
 
Foi definido que o campo código será a chave primária da tabela, ou seja, não 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 código 1 e o nome JOÃO, os demais 
campos (colunas) ficarão com nulos pois não foram preenchidos no SQL 
 
insert into tabagenda (codigo,nome) values (1,'JOÃO'); 
 
No exemplo abaixo vamos inserir um registro completo com as seguintes informações 
 
Código 2 
Nome Natal 
Telefone 3411-7777 
Data de Nascimento 31/12/2000 
Salário 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 
apóstrofo delimitando o conteúdo, o tipo Date é no formato mm/dd/yyyy ou seja mês/dia/ano e 
que o tipo Decimal quando temos valores decimais delimitamos por . (ponto) e não 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 Básico 
Página 63 de 90 
Versão 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 não 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 minúscula em qualquer parte 
do nome 
 
Select * from tabagenda where nome like '%a%' 
 
No exemplo abaixo pesquisamos nomes que contenham a letra N maiúscula no início 
 
Select * from tabagenda where nome like 'N%' 
 
No exemplo abaixo pesquisamos nomes que contenham a letra O maiúscula no fim 
 
Select * from tabagenda where nome like '%O' 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 64 de 90 
Versão 05/04/2013 
Se não quisermos diferenciar maiúsculas e minúsculas podemos usar o comando Upper 
 
No exemplo abaixo estamos pesquisando os nomes que contem a letra A independente de ser 
maiúscula ou minúscula, pois estamos convertendo o resultado da pesquisa em maiúscula. 
 
Select * from tabagenda where upper(nome) like '%A%' 
 
Comando Select com ordenação 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 serão afetados 
 
Exemplo de alteração do nome no registro codigo=1 
 
update tabagenda set nome='João da Cruz' where codigo=1 
 
Exemplo de alteração do nome e do telefone no registro codigo=1 
 
update tabagenda set nome='João da Cruz', telefone=’3411-4444’ where codigo=1 
 
Exemplo de alteração 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 código=1; 
Delete from tabagenda where nome like ‘%tal%’ 
 
Controle Transacional 
 
Comando Commit 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 65 de 90 
Versão 05/04/2013 
Confirma as alterações 
 
Comando Rollback 
 
Desfaz as alterações não confirmadas 
 
 
PALHETA INTERBASE NO DELPHI 
 
Usaremos a palheta Interbase para conexão com banco de dados Firebird 
 
 
 
Para o primeiro exemplo faremos toda a conexão e acesso ao banco em um único formulário, 
para isso adicione um componente IbDatabase e um IbTransaction 
 
 
 
Ibdatabase 
 
Este componente é responsável por efetuar a conexão com o Banco de Dados, é nele que 
configuraremos o caminho do arquivo o usuário 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 configuração de conexão a um banco de dados local, já 
configurando o caminho do banco de dados, o usuário e a senha. 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 66 de 90 
Versão 05/04/2013 
 
Clique no botão Test para testar se as informações estão corretas. 
 
Após isso configure a propriedade Default Transaction com a transação adicionada. 
 
 
 
IbTransaction 
 
Clique duas vezes sobre o componente e configure a opção Transaction Properties para Read 
Commited 
 
Essa configuração indica que só “veremos” os dados já comitados, caso alguma outra 
transação esteja aberta não conseguiremos “enxergar” as alterações enquanto ela não for 
“commitada”. 
 
Para saber mais sobre transações 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 aplicação não efetuar um commit ou um rollback em caso de 
encerramento da transação ele aplicará como Default (padrão) um RollBackRetaining, 
perdendo as alterações que foram feitas na transação corrente. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti) – Delphi Básico 
Página 67 de 90 
Versão 05/04/2013 
 
 
 
Já temos uma conexão preparada, no OnShow do Formulário vamos abrir a conexão e no 
OnClose vamos encerrar a conexão. 
 
 
 
 
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 Básico 
Página 68 de 90 
Versão 05/04/2013 
 
 
 
Os comandos SQL são configurandos na propriedade SQL da IBquery, que é do tipo 
TSTRINGS. 
 
 
Exemplo de um comando de Seleção com a Query. 
 
 
 
Seguindo a sequência dos comandos: 
 
Ibquery1.Close; 
 
Fecha a Query que estiver aberta, não 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 excessão, use o tratamento de excessão (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 Básico 
Página 69 de 90 
Versão 05/04/2013 
Visualizando os dados da Query 
 
Para visualizar os dados da Query usaremos um DBGRID da palheta Data Controls, porém 
para ligar o DBGRID a Query é necessário 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 Básico 
Página 70 de 90 
Versão 05/04/2013 
 
 
 
Criando um programa que permite a execução de SQLs dinâmicos 
 
Adicione um MEMO no FORM e modifique o fonte do botão para: 
 
 
 
Veja que agora os comandos a serem executados serão os comandos digitados no MEMO1. 
 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 71 de 90 
Versão 05/04/2013 
Executando comandos Insert, Update e Delete 
 
Para executar estes comandos é necessário trocar o comando Open para ExecSql, esses 
comandos não retornam resultados. 
 
Adicione um novo botão no FORM e adicione o código abaixo: 
 
 
 
 
 
Toda vez que esses comando são executados eles geram transações para controlar as 
alterações, quem é responsável por estas transações é o Componente IbTransaction, os 
comandos Commit e Rollback devem ser usados como: 
 
Ibtransaction1.CommitRetaining; 
 
IbTransaction1.RollBackRetaining; 
 
Existem também os comandos commit e rollback, mas não recomendo o uso pois ele fecha o 
dataset depois de executados. 
 
Para testar as transações crie dois botões na aplicação um para cada comando, conforme 
exemplo: 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 72 de 90 
Versão 05/04/2013 
 
 
 
 
Agora basta executar comandos de update, insert e delete e testar o uso das transações. 
 
Navegando pelos Registros Retornados 
 
É possível 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 variável 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 próximo registro. 
 
Para exemplificar crie e codifique os botões conforme exemplo abaixo: 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 73 de 90 
Versão 05/04/2013 
 
 
 
 
Acessando os dados dos registros retornados, via Código 
 
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, não é um comando aconselhável 
pois para que ele retorne o resultado completo é necessário que ele “navegue” por todos os 
resultados para poder “contá-los”, ele pode ser útil em casos de saber se retornou 0 ou não, 
por exemplo, agora em caso de saber exatamente quantos registros retornados, recomendo 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 74 de 90 
Versão 05/04/2013 
que primeiro seja dado um last para mover o cursor para o último registro, e logo após seja lido 
o valor de recordcount, isso trará maior confiabilidade no resultado, mas não é uma técnica 
adequada para resultados com grande volume de dados, pois é necessário que todos os 
registros sejam “descarregados” para a aplicação 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 estaríamos resgatando o valor da Coluna 
Código. 
 
AsString representa que queremos o resultado “convertido” em uma string, podemos usar as 
seguintes conversões: 
 
 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 código, independente da posição dela no 
resultado e estamos convertendo esse valor para String. 
 
Exemplo de uma consulta SQL que retorna apenas o código de uma tabela, mostraremos 
todos os registros do resultado em caixas de mensagem (showmessage) 
 
 
 
Passando parâmetros 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 75 de 90 
Versão 05/04/2013 
Quando desejamos passar um parâmetro para um comando, seja sele uma consulta, uma 
inserção, uma modificação ou até mesmo uma deleção, podemos usar o comando 
ParamByName. Exemplo: 
 
 
 
Veja que no comando foi adicionado um parâmetro delimitado pelo :pcodigo isso indica ao 
componente que naquele local do comando será inserido o valor do parâmetro PCODIGO, para 
preencher esse valor usamos o comando 
 
Ibquery1.ParamByName(‘pcodigo’).asinteger:=1; 
 
Ou seja, indicamos ao componente para atribuir ao parâmetro PCODIGO o valor 1 em inteiro, 
no final o sql é montado da seguinte maneira: 
 
 
 
O uso de parâmetros 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 Apóstrofo para delimitar o resultado que queremos consultar, 
ou seja, ela deveria ser construída assim: 
 
Select * from tabteste where nome=’JOSE’ 
 
Porém se fôssemos fazer isso no componente precisaríamos cuidar a questão do apóstrofo 
que já é delimitador de strings no delphi, então precisaríamos dobrar ‘’ oapóstrofo para que o 
compilador não gere um erro, da seguinte maneira 
 
Ibquery1.sql.add(‘Select * from tabteste where nome=’’JOSE’’ ‘); 
 
Ou teríamos que construir o sql usando concatenação de valores da seguinte maneira: 
 
 Ibquery1.sql.add('select * from tabteste where nome='+#39+'JOSE'+#39); 
 
Agora usando o parâmetro e indicando que o tipo do parâmetro é string (asstring) o próprio 
componente se encarrega de montar o sql corretamente já adicionando o apóstrofo no valor. 
 
Assim como podemos usar os diversos tipos 
 
Ascurrency (o próprio componente adicionará o ponto se contiver valores decimais) 
As Date ( o próprio componente irá adicionar o apóstrofo e inverter mm/dd/yyyy) 
 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 76 de 90 
Versão 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, porém é possível fazer um acesso através 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 Básico 
Página 77 de 90 
Versão 05/04/2013 
 
 
A propriedade VisibleButtons, indica quais botões devem ser mostrados, podemos omitir 
botões que não serão usados, como os botões de insert, delete.... 
 
 
 
Como nosso datasource está “ligado” a um dataset Ibquery os botões de alteração dos dados 
não são habilitados, eles se habilitariam se estivéssemos trabalhando com outros 
componentes, como por exemplo o IbDataset que é um componente que configuramos os sqls 
de modificação dos dados e de seleção, ou um IbTable. 
 
 
 
Chave Primária controlada pelo Banco de Dados 
 
Um dos recursos disponíveis para controlar a chave primária como sendo sempre única e 
controlar a concorrência de múltiplos usuários para que não ocorra a duplicação de chaves é o 
uso dos generators 
 
Um generator é um código incremental que pode ser incrementado ou decrementado pela 
aplicação ou pelo próprio banco de dados através 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 Básico 
Página 78 de 90 
Versão 05/04/2013 
 
 
 
 
Usando DataModule no Delphi 
 
DataModule é um local especial para abrigarmos nossos coponentes de acesso a dados, 
podem também abrigar outros componentes que não sejam visuais, é uma forma interessante 
de concentrarmos componentes para diversos formulários. 
 
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 Básico 
Página 79 de 90 
Versão 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 é através de um 
arquivo INI, que nada mais é que um arquivo texto com um padrão, de ele pode ser usado para 
guardar diversas informações do sistema, como por exemplo o caminho do banco de dados e o 
usuário padrão. 
 
“Arquivos INI são arquivos de texto simples com uma estrutura básica. São normalmente 
associados com o Microsoft Windows, mas também são utilizados em outras plataformas... 
 
Propriedades 
 
O elemento básico contido em um arquivo INI é a propriedade (ou parâmetro). Toda 
propriedade tem um nome e um valor, delimitado por um sinal de igual(=). O nome aparece à 
esquerda do sinal de igual. 
 
nome=valor 
 
Seções 
 
Propriedades podem ser agrupadas em seções nomeadas arbitrariamente. O nome da seção 
aparece em uma única linha, entre colchetes ([ e ]). Todas as propriedades após a declaração 
da seção são associadas a esta seção. Não há um delimitador explícito de "final de seção"; 
seções terminam na próxima declaração de seção ou no final do arquivo. Seções não podem 
ser aninhadas. 
 
[seção] 
 
Comentários 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 80 de 90 
Versão 05/04/2013 
Ponto-e-vírgula(;) indica o início de um comentário. Comentários continuam até o final da linha. 
Qualquer coisa entre o ponto e vírgula e o final da linha é ignorada. 
; texto de comentário “ 
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 através de um Arquivo INI 
 
 
 
Exemplo de como Configurar a IbDatabase dinamicamente com o caminho do banco de dados 
o usuário e a senha 
 
 
 
No botão OnClick do Botão OK 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 81 de 90 
Versão 05/04/2013 
 
 
Componente IbTable 
 
O componente IBTable não é um componente muito recomendado, devido a sua lentidão no 
tratamento dos dados e de sua pobreza em relação a pesquisas, pois não trabalha com 
comandos SQL. Porém ele pode ser útil em situações simples, como por exemplo um DBGRID 
editável para trabalhar com pequeno volume de dados. 
 
Exemplo de uso de um IbTable com DBGRID editável 
 
Adicione um Ibtable e faça a ligação dele com a IBDatabase 
 
 
 
Em um formulário específico, adicione um DBGRID um DBNavigator e um DataSource. 
 
Faça a ligação do DataSource a IbTable através da propriedade DataSet. 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 82 de 90 
Versão 05/04/2013 
 
 
Faça a ligação do DbGrid e do DbNavigator ao DataSource através da propriedade DataSource 
 
 
 
Agora quando chamarmos esse formulário configuraremos qual Tabela a IBTable irá se 
conectar e abriremos ela. Para isso adicione no OnShow do formulário o código de exemplo: 
 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 83 de 90 
Versão 05/04/2013 
 
 
No OnClose do Formulário fechamos a tabela. 
 
 
 
Desenvolvendo um simples Relatório com REPORT BUILDER 
 
O report builder não é nativo no Delphi Xe3, portanto deve ser adquirido e instalado. 
 
Adicione um TppDbPipeline da Palheta RBuilder 
 
 
 
Esse componente será responsável por fazer a conexão com os componentes de Dados 
(querys, tables...) 
 
Adicione um TppReport da Palheta RBuilder 
 
Esse componente será responsável pelo desenho do Relatório e todo o controle de impressão. 
 
 
 
Para que o ppDbPipeline possa se conectar a uma fonte de dados precisaremos "liga-lo” a um 
DataSource, indico então que seja adicionada uma query e um datasource específico para o 
relatório. 
 
Adicioneuma IbQuery, conecte-a ao Ibdatabase principal da aplicação 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 84 de 90 
Versão 05/04/2013 
 
 
 
Adicione um DataSource e “ligue-o” a Query do Relatório 
 
 
 
Faça a ligação entre o ppDbPipeline e o DataSourceRelatório pela propriedade DataSource 
 
 
 
 
Faça a ligação entre o ppReport e o ppDbPipeline pela propriedade DataPipeline do ppReport 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 85 de 90 
Versão 05/04/2013 
 
 
Para construirmos um relatório será necessário por hora estarmos conectado ao banco de 
dados e com uma fonte de dados (query) aberta com dados, assim poderemos ver os campos 
disponíveis para serem usados, porém após construir o relatório desconecte o Database, para 
que ele possa ser configurado dinamicamente, como já ensinado anteriormente, quando a 
aplicação estiver em execução. 
 
Para conectar a aplicação, 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 responsável pelo relatório, através da propriedade 
SQL 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 86 de 90 
Versão 05/04/2013 
 
 
 
 
Passe a Query para Active=True 
 
 
 
Pronto, agora que temos nossa aplicação 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 relatório 
 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 87 de 90 
Versão 05/04/2013 
 
 
O Report Builder trabalha com “bandas”, que são regiões do relatório que são mostradas de 
acordo com sua função, por exemplo: 
 
 
 
 
Banda Title = Título, é mostrada apenas na primeira página do Relatório, ideal para 
adicionarmos informações da empresa, logotipos e outras informações que só devem aparecer 
uma única vez 
Banda Summary = Sumário, é mostrada apenas na última página do Relatório, ideal para 
adicionar informações finais, como totalizadores, frases finais, etc. 
Header = Cabeçalho, é mostrado em todas as páginas na parte superior, pode ser configurada 
para ser mostrada ou não na primeira e na última folha 
Footer = Rodapé, é mostrada em todas as páginas na parte inferior da página, pode ser 
configurada para ser mostrada ou não na primeira e na última folha 
 
Banda Detail = Detalhe, é a banda principal do Relatório, é nela que será mostrada as 
informações detalhes, ou seja, “que se repetem”, no relatório. Por exemplo em um relatório da 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 88 de 90 
Versão 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 necessária de acordo com o número de registros a serem mostrados. 
 
Palheta Standard Components 
 
 
 
São componentes padrões como labels, memos, linhas, códigos de barras, várias de sistemas 
(data, hora, número de página). Não são “ligadas” aos dados da fonte de dado, são 
independentes. 
 
Palheta Data Components 
 
 
 
São os componentes “conectados” a fonte de dado escolhida, é composta por Labels, memos, 
campos calculados, códigos de baras, etc. 
 
Desenvolvendo um simples Relatório 
 
Adicione uma Label da Palheta Standard Components na Banda Header e configure sua 
“caption” para Relatório de Agenda 
 
 
 
 
 
Adicione também labels que serão usadas para Identificar as Colunas Código, Nome e 
Telefone, conforme desenho abaixo 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 89 de 90 
Versão 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 ligação ao campo desejado na fonte 
de Dados 
 
 
 
 
Para Visualizar como o relatório está ficando clique na Aba PreView 
Centro de Treinamento Invictos Tecnologia (www.invictos.com.br/cti ) – Delphi Básico 
Página 90 de 90 
Versão 05/04/2013 
 
 
 
 
Após configurar o que desejar feche a janela do ReportBuilder e retorne para o projeto 
 
Não se esqueça de desconectar o IbDatabase antes de distribuir sua aplicação, pois 
“nem sempre” o caminho do banco de dados será o mesmo em todas as máquinas, e 
por este motivo a aplicação irá gerar erros ao executar o programa. 
 
 
Como “chamar” o relatório em tempo de execução 
 
Adicione um botão ou um menu que deseja chamar a impressão do relatório e configure a 
query que será a fornecedora de dados e simplesmente chame o método PRINT do ppReport, 
conforme exemplo abaixo:

Mais conteúdos dessa disciplina