Beruflich Dokumente
Kultur Dokumente
1. O QUE DELPHI?.................................................................................................................................3
2. COMO FORMADO UMA APLICAO EM DELPHI..................................................................3
2.1 ARQUIVOS QUE COMPEM UM APLICAO..............................................................................................3
2.2 CDIGO FONTE DO ARQUIVO PROJECT(.DPR)..........................................................................................3
2.3 CDIGO FONTE DO ARQUIVO UNIT (.PAS)...............................................................................................3
3. JANELAS.................................................................................................................................................3
3.1 CODE EDITOR (EDITOR DE CDIGO)........................................................................................................3
3.2 FORM (FORMULRIO)...............................................................................................................................3
3.3 OBJECT INSPECTOR (INSPETOR DE OBJETOS)...........................................................................................3
3.4 COMPONENT PALETTE( PALHETA DE COMPONENTES).............................................................................3
3.5 ALIGNMENT PALETTE(PALHETA DE ALINHAMENTO)...............................................................................3
4. ORIENTAO A OBJETOS..................................................................................................................3
4.1 EVENTOS...................................................................................................................................................3
4.2 PROPRIEDADES.........................................................................................................................................3
4.3 MTODOS.................................................................................................................................................3
5. APPLICATION........................................................................................................................................3
5.1 MTODOS:................................................................................................................................................3
5.2 PROPRIEDADES:........................................................................................................................................3
6. MDI APPLICATION...............................................................................................................................3
6.1 USANDO O MODELO DE APLICAO MDI...............................................................................................3
6.2 EXEMPLO MDI.........................................................................................................................................3
7. TRABALHANDO COM BANCO DE DADOS....................................................................................3
7.1 BDE..........................................................................................................................................................3
7.2 ARQUITETURA DO BANCO DE DADOS DO DELPHI....................................................................................3
7.3 ARQUITETURA DOS COMPONENTES DE BANCO DE DADOS......................................................................3
7.4 PALETA DE COMPONENTES DA PGINA DE ACESSO DE DADOS...............................................................3
7.5 PALETA DE COMPONENTES DA PGINA DE CONTROLE DE DADOS..........................................................3
7.6 USANDO DATASETS..................................................................................................................................3
8. A LINGUAGEM SQL..............................................................................................................................3
8.1 COMANDOS DE MANIPULAO DE DADOS..............................................................................................3
8.2 OPERADORES............................................................................................................................................3
8.3 EXPRESSES.............................................................................................................................................3
8.4 FUNES...................................................................................................................................................3
8.5 EXEMPLOS................................................................................................................................................3
8.6 CONSTRUINDO UMA CONSULTA DINAMICAMENTE...................................................................................3
9. CONSTRUINDO RELATRIOS COM O QUICKREPORT............................................................3
9.1 QUICKREPORT BSICO..............................................................................................................................3
9.2 CRIANDO RELATRIOS.............................................................................................................................3
10. ARQUIVOS DE INICIALIZAO.....................................................................................................3
10.1 O OBJETO TINIFILE................................................................................................................................3
10.2 CRIANDO UM ARQUIVO DE CONFIGURAO..........................................................................................3
10.3 LENDO O ARQUIVO DE CONFIGURAO.................................................................................................3
10.4 MODIFICANDO UM ARQUIVO .INI..........................................................................................................3
10.5 OUTRAS OPERAES COM ARQUIVOS .INI............................................................................................3
10.6 MANIPULAO DE ARQUIVOS................................................................................................................3
11. CRIANDO HELP.................................................................................................................................3
11.1 VISO GERAL.........................................................................................................................................3
11.2 ESCRENDO OS TPICOS...........................................................................................................................3
11.3 INSERINDO NOTAS DE RODAP................................................................................................................3
11.4 ADICIONANDO UM HOTSPOT AO TPICO................................................................................................3
11.5 CRIANDO UM HOTSPOT PARA UMA JANELA POP-UP................................................................................3
UNIT
TESTEN
FORM
ROTINAS
21 N
212
.EXE
.DCU
.PAS
.DFM
1. O que Delphi?
O Delphi um ambiente de desenvolvimento de aplicaes, orientado a objeto, que permite o
desenvolvimento de aplicaes para os Sistemas operacionais Windows 3.11, Windows 95 e Windows
NT, com pouca codificao.
O Delphi tem ferramentas de desenvolvimento, como templates e experts de aplicaes e
formulrios, que aumentam muito a produtividade, facilitando a programao da aplicao.
.DPR
1.1
1.1.1
Funo
.DPR
Arquivo do Projeto
.PAS
.DFM
.OPT
.RES
Arquivo de Recursos do
Compilador
Arquivo de Backup do Projeto
Arquivo de Backup da Unit
Backup do Arquivo grfico do
formulrio
.~DP
.~PA
.~DF
.DSK
Obs.: .~DF, .~PA , .~DP so arquivos de backup( Menu Options, Enviroment, Guia Editor Display, Caixa
de Grupo Display and file options, opo Create Backup Files, desativa o seu salvamento).
Devido a grande quantidade de arquivos de uma aplicao, cada projeto deve ser montado em
um diretrio especfico.
1.1.2
Funo
.EXE
.DCU
Obs.: Estes arquivos podem ser apagados para economizar espao em disco.
1.1.3
Seo Unit
1.1.4
Seo Uses
1.1.5
Seo Interface
Nesta seo esto as declaraes de constantes, tipos de variveis, funes e procedures gerais
da Unit/Form. As declaraes desta seo so visveis por qualquer Unit. Esta seo formada pelo
seguinte cdigo:
INTERFACE - Palavra que inicia a seo;
USES - Clusula que inicia uma lista de outras unidades compiladas (units) em que se basea:
SysUtils = utilitrios do sistema (strings, data/hora, gerar arquivos)
WinProcs = acesso a GDI, USER e KERNEL do Windows
Wintypes= tipos de dados e valores constantes
Messages=constantes com os nmeros das mensagens do Windows e tipos de dados das
Mensagens
Classes=elementos de baixo nvel do sistema de componentes
Graphics=elementos grficos
Controls=elementos de nvel mdio do sistema de componentes
Forms=componentes de forma e componentes invisveis de aplicativos
Dialogs=componentes de dilogo comuns
1.1.6
Seo Type
Declara os tipos definidos pelo usurio. Subsees: Private, declaraes privativas da Unit.
Public declaraes publicas da Unit.
1.1.7
Seo Var
Declara as variveis privadas utilizadas.
1.1.8
Seo Implementation
Contm os corpos das funes e procedures declaradas nas sees Interface e Type. Nesta seo
tambm esto definidos todos os procedimentos dos componentes que esto includos no Form. As
declaraes desta seo so visveis apenas por ela mesma. Esta seo formada pelo seguinte cdigo:
{$R*.DFM} - Diretiva compiladora que inclui toda a interface, propriedades da forma e
componentes do arquivo *.DFM
{$S+} - Diretiva compiladora que ativa verificao de pilha.
1.1.9
1.1.10 Inicialization
Nesta seo, que opcional, pode ser definido um cdigo para proceder as tarefas de
inicializao da Unit quando o programa comea. Ela consiste na palavra reservada inicialization seguida
por uma ou mais declaraes para serem executadas em ordem.
1.1.11 Exemplo
Abaixo veja como fica a unit quando voc abre um projeto novo:
unitUnit1;
interface
uses
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,
Forms,Dialogs;
type
TForm1=class(TForm)
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.DFM}
{UsesAdicional}
{Initialization}
end.
Janelas
Barra de Ttulo
(Mostra o nome do
arquivo)
Indicador de Linha
e Coluna
Indicador de
Modificao
Indicador de Modo
Aba da Pgina
Barra de Ttulo
Form (Formulrio)
Voc usa formulrios para fazer interface com o usurio, nele so inseridos os componentes. O
Menu de Controle
Boto Maximizar
formulrio uma janela, e portanto, possui os atributos de uma janela (menu de controle, botes de
maximizar e minimizar), barra de ttulo, bordas redimensionveis).
Menu de Controle
Boto Miminizar
Seletor de Objetos
(mostra o nome e o tipo de objeto selec
Coluna de Propriedades
Propriedades aninhadas
( Duplo clique para visualizar subpropri
Palheta
de
Componente
(Pgina
Stantard
visvel;
pgina
de
componentes
Locais
para
adicionais
componentes
disponveis
adicionais
selecion
Seta de
rolagem
para esquerda
Seta de
Pgina de Propriedades
Pgina de Eventos rolagem
para direita
Ponteiro
Orientao a Objetos
Por ser baseado no Pascal Object, o Delphi permite que se construa aplicaes orientadas a
objetos. Em linhas gerais, aplicaes orientadas a objetos se baseiam no conceito de classe. A classe um
tipo de dados, contendo atributos e servios. O objeto uma varivel de determinada classe. Por
exemplo, um formulrio nada mais do que um objeto da classe Formulrio (Tform). Contm atributos e
servios.
Eventos
Os programas feitos em Delphi so orientados a eventos. Eventos so aes normalmente
geradas pelo usurio. Ex.: Clicar o mouse pressionar uma tecla, mover o mouse etc. Os eventos podem
ser tambm gerados pelo windows.
Existem eventos associados ao formulrio e cada componente inserido neste.
Exemplos:
- Ao formulrio est ligado on create, que ocorre quando mostramos o formulrio na tela.
- Ao componente boto est ligado o evento on click, que ocorre quando damos um click com o
mouse sobre o boto.
2.1.1
Alguns eventos ligados tanto ao formulrio quanto aos componentes esto listados a seguir.
OnClick: ocorre quando o usurio clica o objeto.
2.1.2
Cada evento gera uma procedure, aonde voc deve inserir as linhas de cdigo que envolvem este
evento. Por exemplo, o evento OnClick, que gerado ao clicarmos em um boto chamado BTNSair, cria
a procedure:
ProcedureTForm1.BTNSairClick(Sender:Tobject);
onde Tform1 o objeto Tform que contm o boto BTNSair, e Sender um objeto Tobject que representa
o componente que deu origem ao evento.
Se voc quiser inserir uma rotina que trate um determinado evento de um componente, faa o
seguinte:
clique sobre o componente;
Propriedades
Como vimos, eventos podem estar associados a modificaes em propriedade de componente e
formulrio, ou seja, voc pode modificar propriedades de formulrios e componentes durante a execuo
do sistema. Para isto voc dever usar a sintaxe:
<componente>.<propriedade>;
Por exemplo, para modificar a propriedade text de uma caixa de edio Edit1 para Bom Dia
faa:
Edit1.Text := Bom Dia;
Se a propriedade do componente tiver subpropriedades, para acessa-l, utilize a seguinte sintaxe:
<componente>.<propriedade>.<subpropriedade>
Por exemplo, para modificar a subpropriedade Name referente a propriedade fonte, de uma caixa
de edio Edit1, para Script, faa:
Edit1.Font.name := Script;
Obs.: Verifique o tipo da propriedade para antes de mandar o valor, consultando no Objetc Inspector.
2.1.3
10
Nome do Componente
Componente
Selecionado
Tipo do Componente
Obs.:
Cada
Mtodos
So procedures ou funes embutidas nos componentes e
formulrios, previamente definidas pelo Delphi.
Alguns mtodos so descritos a seguir:
2.1.4
Chamado de mtodos
11
Por exemplo, clicar em um boto pode dar origem ao evento Show de um outro formulrio,
mostrando este novo formulrio na tela:
Form2.show;
12
Application
Sempre que voc processa um projeto DELPHI, o Delphi cria automaticamente o objeto
Application. Voc tem de trabalhar com propriedades e mtodos desse objeto para poder fazer coisas
como especificar o cone do aplicativo, especificar o nome de arquivo de Help do projeto ou o titulo da
aplicao.
Mtodos:
MessageBox - Exibe uma caixa mensagem padro Windows.
Mtodo Minimize - Minimiza o aplicativo a um cone;
Mtodo Restore - Restaura o aplicativo ao estado anterior
ProcessMessages - Permite ao seu aplicativo deixar o Windows processar eventos para outros
aplicativos.
Terminate - Finaliza a aplicao.
Propriedades:
ExeName - Traz o nome do executvel que o nome projeto
HelpFile - Nome de arquivo de Help.
Icon - cone da aplicao por completo, sendo que cada janela tem seu prprio cone.
Title - Ttulo da aplicao.
Obs.: Algumas Propriedades podem ser acessadas pelo Menu Options, Opo Project, Guia Application.
MDI Application
Uma aplicao MDI (Multiple Document Interface) aquela em que vrios formulrios ou
janelas podem ser abertas em um pai.
Exemplos: Word, Excel.
O Formulrio Filho modelo, de nome MDIChild, ligado a unit Childwin, apresenta o seguinte aspecto:
13
Obs.: A diferena entre os dois formulrios esta na propriedade FormStyle, onde a MainForm est como
fsMDIForm(Pai) e ChildWin como fsMDIChild (Filho).
Exemplo MDI
2.1.5
Projeto.DPR
programProjeto;
uses
Forms,
Principain'PRINCIPA.PAS'{FrmPrincipal},
Cadastroin'CADASTRO.PAS'{FrmCadastro};
{$R*.RES}
begin
Application.CreateForm(TFrmPrincipal,FrmPrincipal);
Application.Run;
end.
2.1.6
Principa.DFM
2.1.7
Principa.PAS
unitPrincipa;
interface
14
usesWinTypes,WinProcs,SysUtils,Classes,Graphics,Forms,Controls,
Menus,StdCtrls,Dialogs,Buttons,Messages,ExtCtrls,Cadastro;
(*Aquieudeclaroasjanelasfilha*)
type
TFrmPrincipal=class(TForm)
MenPrincipal:TMainMenu;
Panel1:TPanel;
PanLinhaStatus:TPanel;
MenArquivo:TMenuItem;
PanTempo:TPanel;
Window1:TMenuItem;
MenArquivoSair:TMenuItem;
WindowCascadeItem:TMenuItem;
WindowTileItem:TMenuItem;
WindowArrangeItem:TMenuItem;
WindowMinimizeItem:TMenuItem;
PanBotoes:TPanel;
SpbSair:TSpeedButton;
TimTempo:TTimer;
MenArquivoCadastro:TMenuItem;
procedureFormCreate(Sender:TObject);
procedureWindowCascadeItemClick(Sender:TObject);
procedureWindowTileItemClick(Sender:TObject);
procedureWindowArrangeItemClick(Sender:TObject);
procedureMenArquivoSairClick(Sender:TObject);
procedureWindowMinimizeItemClick(Sender:TObject);
procedureTimTempoTimer(Sender:TObject);
procedureMenArquivoCadastroClick(Sender:TObject);
private
{Privatedeclarations}
procedureShowHint(Sender:Tobject);
FunctionFormexiste(nomejanela:Tform):boolean;
public
{Publicdeclarations}
FrmCadastro:TFrmCadastro;(*Declaraavarivelquevaireceber
ajanelacasovocmudeseunome*)
end;
var
FrmPrincipal:TFrmPrincipal;
implementation
{$R*.DFM}
FunctionTForm1.Formexiste(Nomejanela:TForm):boolean;
var
I:integer;
begin
Formexiste:=false;
fori:=0tocomponentcount1do
ifComponents[i]isTFormthen
ifTForm(Components[i])=nomejanelathen
Formexiste:=true
end;
procedureTFrmPrincipal.FormCreate(Sender:TObject);
15
begin
Application.OnHint:=ShowHint;
ContaCadastro:=0;(*Zeroavariavelcontadoradajanelaquando
eucriooformularioprincipal*)
end;
procedureTFrmPrincipal.ShowHint(Sender:TObject);
begin
PanlinhaStatus.Caption:=Application.Hint;
end;
procedureTFrmPrincipal.MenArquivoSairClick(Sender:TObject);
begin
Close;
end;
procedureTFrmPrincipal.WindowCascadeItemClick(Sender:TObject);
begin
Cascade;
end;
procedureTFrmPrincipal.WindowTileItemClick(Sender:TObject);
begin
Tile;
end;
procedureTFrmPrincipal.WindowArrangeItemClick(Sender:TObject);
begin
ArrangeIcons;
end;
procedureTFrmPrincipal.WindowMinimizeItemClick(Sender:TObject);
var
I:Integer;
begin
forI:=MDIChildCount1downto0do
MDIChildren[I].WindowState:=wsMinimized;
end;
procedureTFrmPrincipal.TimTempoTimer(Sender:TObject);
begin
Pantempo.caption:=timetostr(now)+''+Datetostr(date)+'';
end;
procedureTFrmPrincipal.MenArquivoCadastroClick(Sender:TObject);
begin
IfFormexiste(FrmCadastro)=falsethen(*Seforfalsoentocriaa
janela*)
Begin
Screen.Cursor:=CrHourGlass;(*Colocaocursornaformadeuma
ampulheta*)
FrmCadastro:=TFrmCadastro.Create(Self);(*Criaajanelafilha
eatribuiavariveldeclarada*)
End
Else
IfFormexiste(Frmcadastro)=truethen(*Sefortentarabrira
janelaeelajaestiversidocriada*)
Begin
FrmCadastro.WindowState:=WsNormal;(*Seestiverminimizada
restaura*)
FrmCadastro.BringToFront;(*Seestiveratrs,colocanafrente*)
FrmCadastro.Setfocus;(*Colocaofoconajanela*)
End;
end;
16
end.
Obs.:
Sub-Menu
Separador
2.1.8
Cadastro.DFM
2.1.9
Cadastro.Pas
unitCadastro;
interface
uses
17
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,
Forms,Dialogs,StdCtrls,Buttons,ExtCtrls,DBCtrls,Mask,DB,
DBTables;
type
TFrmCadastro=class(TForm)
BitBtn1:TBitBtn;
procedureBitBtn1Click(Sender:TObject);
procedureFormCreate(Sender:TObject);
procedureFormClose(Sender:TObject;varAction:
TCloseAction);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
FrmCadastro:TFrmCadastro;
implementation
{$R*.DFM}
procedureTFrmCadastro.FormCreate(Sender:TObject);
begin
Screen.Cursor:=CrDefault;(*Colocaocursoremmodonormal*)
end;
procedureTFrmCadastro.FormClose(Sender:TObject;
varAction:TCloseAction);
begin
Action:=Cafree;(*Liberaavariaveldajaneladamemria*)
end;
procedureTFrmCadastro.BitBtn1Click(Sender:TObject);
begin
Close;(*Fechaajanela*)
end;
end.
18
3. BDE
O Borland Database Engine o corao do Delphi e suas aplicaes com banco de dados usando
o mesmo database engine usado pelo Paradox e dBase. Paradox e dBase claro trazem capacidades
adicionais alm do database engine (como o Delphi tambm o faz), mas isso longe de dizer que o valor
agregado destes recursos adicionais maior de 2 % das capacidades - os outros 98% so providos pelo
database engine e esto disponveis para todos os usurios deste engine.
O Borland Database Engine (BDE) uma coleo de DLLs que as aplicaes de banco de dados
iro fazer chamadas. Cada estao de trabalho que tiver a aplicao de banco de dados instalada dever
ter, tambm, o BDE instalado ( o Delphi vem com a instalao do BDE para voc adicionar a sua
aplicao).
O BDE permite a voc usar tabelas dBase, Paradox ou ODBC em modo multi-usurio. A verso
Cliente/Servidor do Delphi tambm vem com links para servidores de banco de dados como Oracle,
Sybase, MS SQL Server, Informix, e InterBase.
19
Componente
Utilidade
TDataSource
TTable
TQuery
TStoreProc
TDataBase
TBatchMove
TReport
3.1
20
Componente
Utilidade
TDBNavigator
Usando DataSets
As classes de componentes TTable e TQuery so descendentes de TDataset atravs do TDBDataSet. Esta
classe de componente herda uma parte de propriedades, mtodos e eventos.
3.1.1
Estado
dsInactive
dsBrowse
dsEdit
dsInsert
dsSetKey
dsCalcFields
Estados do DataSet
Descrio
O Dataset esta fechado.
Estado de Espera. O estado default quando um dataset aberto. Registros
pode ser visualizados mas no mudados ou inseridos.
Habilita o a linha corrente para ser editada.
Habilita uma nova linha para ser inserida. Uma chamada para o Post inserir a
nova linha.
Habilita FindKey, GotoKey, and GoToNearest para procurar valores nas
tabelas do banco de dados. Estes mtodos somente pertencem para o
componente TTable. Para TQuery, a procura feita com a syntax do SQL.
Modo quando os OnCalcFields executado; previne qualquer mudana para
outros campos ou campos calculados. Raramente usado explicitamente.
21
3.1.2
3.1.3
3.1.3.1
Evento StateChange
procedureTForm1.DataSource1.StateChange(Sender:TObject);
varS:String;
begin
caseTable1.Stateof
dsInactive:S:='Inactive';
dsBrowse:S:='Browse';
dsEdit:S:='Edit';
dsInsert:S:='Insert';
dsSetKey:S:='SetKey';
end;
Label1.Caption:=S;
end;
procedureForm1.DataSource1.StateChange(Sender:Tobject);
begin
InsertBtn.Enabled:=(Table1.State=dsBrowse);
CancelBtn.Enabled:=Table1.Statein[dsInsert,dsEdit,
dsSetKey];
...
end;
22
3.1.4
23
3.1.5
Navegando no Dataset
Mtodo ou Propriedade
Descrio
Mtodo First
Mtodo Last
Mtodo Next
Mtodo Prior
Propriedade BOF
Propriedade EOF
Mtodo MoveBy(n)
Exemplo:
Table1.Last;(*Moveocursorparaoltimoregistrodatabela*)
Table1.Next;(*Moveocursorparaoprximoregistrodatabela*)
3.1.6
Os seguintes mtodos habilitam uma aplicao para inserir, atualizar, e deletar dados no dataset.
Mtodo
Descrio
Append
Cancel
Delete
DeleteTable
Edit
EmptyTable
Insert
Post
Refresh
3.1.7
1. Edit1.text:=Table1Nome_Clie.asstring;
1. Edit1.text:=Table1.Fields[1].asstring;
1. Edit1.text:=Table1.FieldByName(Nome_Clie).asstring;
Para associar outros tipos de campos que no texto a uma caixa de edio (que s aceita valores
do tipo string), devemos utilizar propriedades de converso do componente TField: AsBoolean,
AsDataTime, AsFloat (Real), AsInteger, AsString.
24
Para atribuir valores para o dataset o procedimento o mesmo s que no sentido inverso, desde
que que a tabela esteja em modo de edio ou insero.
3.1.8
Marcando Dados
3.1.9
Os mtodos GoToKey e GoToNearest habilita uma aplicao para procurar uma chave em uma
tabela. SetKey coloca a tabela em modo de procura. No estado SetKey, atribui-se valores para a procura
em um campo indexado. GoToKey ento move o cursor para a primeira linha da tabela que encontrou
este valor. Como GoToKey uma funo ela retorna True ou False se teve sucesso na procura. O
GoToNearest uma funo que leva para o valor mais parecido encontrado.
Exemplo:
procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.SetKey;{Primeirocampoachave}
Table1.Fields[0].AsString:=Edit1.Text;(*
Table1.Fieldbyname(Cidade):=Edit1.Text*)
Table1.GoToKey;
end;
Todo procedimento acima pode ser substitudo usando a funo Find
Exemplo:
procedureTSearchDemo.SearchExactClick(Sender:TObject);
begin
Table1.FindKey([Edit1.text]);
end;
25
Exemplo:
Table1.SetRangeStart;
Table1.FieldByName(Codigo):=100;(*Table1Codigo.asinteger:=100*)
Table1.KeyExclusive:=False;
Table1.SetRangeEnd;
Table1.FieldByName(Codigo):=200;(*Table1Codigo.asinteger:=200*)
Table1.KeyExclusive:=True;
Table1.ApplyRange;
Obter um filtro dos registros de clientes com cdigo entre 100 e 199.
3.1.11
26
Descrio
GetIndexNames
Retorna uma lista de nomes disponiveis de ndeces para uma tabela do banco de
dados.
Nmero de Campos do ndice.
Vetor de nomes de campos usados no ndice
Para usar o ndice primrio de uma tabela Paradox.
Para muda o ndice para qualquer campo.
IndexFieldCount
IndexFields
IndexName
IndexFieldNames
4.
27
A Linguagem SQL
A linguagem SQL (Structured Query Language - Linguagem Estruturada de Pesquisa) foi criada
para ser uma linguagem padro para consulta, atualizao e manipulao de banco de dados em um banco
de dados relacional.
Comercialmente implementada pela IBM, se tornou um padro de linguagem de acesso a dados
em vrios bancos de dados relacionais, como Oracle, DB2, SQL Server, Sybase, Interbase, etc.
Usaresmos as Declaraes em SQL para extrair/Atualizar registros de uma ou mais tabelas que
atendam as condies especificadas, manipulando, assim, somente os dados que sejam de nosso interesse.
Por exemplo, a declarao a permite que somente os registros cujo o campo Nome Comeando
pela letra A da tabela de Clientes sejam exibidos na tela:
Select*
FromClientes
WhereNome=A*
Podemos dividir os comandos da linguagem SQL em trs categorias distintas:
Comandos de Definio de Dados: permitem definir ou alterar tabelas em um banco de
dados.
Comandos de Controle de Dados: servem para gerenciar o acesso dos usurios a
determinadas tabelas.
Comandos para a Manipulao de Dados: servem para manipular os dados contidos nas
tabelas.
4.1.1
Update
Atualiza registros.
4.1.2
Delete
Deleta Registros
4.1.3
Select
4.1.4
Insert
Operadores
Podemos usar o seguintes operadores:
Aritimticos + , - , * , /
Expresses
4.1.5
From
28
4.1.6
Where
4.1.7
Group By
4.1.8
Having
4.1.9
Order By
4.1.10 Distinct
Retira as repeties
Funes
Podemos ainda, especificar as seguintes funes:
COUNT (Contador);
1)
AVG(Mdia);
FIRST(Primeiro);
LAST(ltimo);
MIN(Mnimo);
MAX(Mximo);
SUM(Soma);
UPPER(Maisculo);
LOWER(Minusculo);
TRIM(Remove repeties de um caracter espcificado da esquerda ou direita de uma string);
Exemplos
Select*
FromClientes
Seleciona todos(*) os campos de todos registros da tabela clientes.
2)
SelectCodigo,Nome
FromClientes
WhereCodigo>10AndCodigo<200
Seleciona os campos Cdigo e Nome da tabela Clientes para os registros que tenham os campo
Cdigo > (Maior) que 10 e <(Menor) que 200.
3)
Select*
FromClientes
GroupByCidade
Seleciona todos os campos e registros da tabela Clientes agrupada pelo campo Cidade.
4)
Select*
FromClientes
OrderByCodigo
Seleciona todos os campos e registros da tabela Clientes ordenada pelo campo Codigo.
29
5)
Select*
FromFornecedores,Produtos
WhereFornecedores.Codigo=Produtos.Codigo
Seleciona todos os campos e registros das tabelas de Fornecedores e Produtos que tenham o
campo codigo de Fornecedores igual ao campo Codigo de Produtos.
6)
Select*
FromClientes
WhereNomeLikeS*
Seleciona todos os campos e registros da tabela de Clientes cujo o campo Nome comece pela
letra S.
7)
UpdateFuncionarios
SetSalario=Salario*1.2
Atualiza o campo Salario de todos os registros da tabela de Funcionarios para o contedo atual
multiplicado por 1.2 (aumento de 20%).
8)
UpdateFuncionarios
SetSalario=Salario*1.2
WhereCargo=Diretor
Atualiza o campo Salario de todos os registros da tabela de Funcinarios que campo Cargo seja
igual a Diretor para o contedo atual multiplicado por 1.2 (aumento de 20%).
9)
DeleteFromProdutos
WhereCodigo>5AndCodigo<20
Apaga todos os registros da tabela Produtos para Codigo >(maior) que 5 e < (menor) que 20.
Query1.SQL.LoadFromFile(C:\MYQUERY.TXT);
QuickReport bsico
QuickReport um gerador de relatrios por banda. Seu relatrio construdo em cima de vrios
tipos de banda, onde so colocados componentes visveis como campos de banco de dados, rtulos,
imagens e outros componentes imprimveis.
QuickReport
QRBand
QRGroup
QRDetailLink
QRLabel
QRPreview
QRShape
QRSysData
QRDBCalc
QRDBText
QRMemo
Componentes do QuickReport.
4.1.12 QuickReport
Este o componente principal do QuickReport, pois ele transforma a form padro em um
relatrio.
QRBand
Voc constri seus relatrios com diferentes QRBands e colocando componentes visveis de
controle do QuickReport sobre ela. Existem diferentes tipos de bandas, como banda de detalhes, banda
de cabealho, banda de rodap e outras.
QRGroup
Existe duas maneiras de imprimir relatrios mestre/detalhes com o QuickReport. Um usar um
componente TQuery ligado com um Query(Consultas) e QRGroups para grupos de datas, a outra
maneira usar o componente DetailLink combinado com bandas DetailGroup. Cada mtodo tem o
mesmo resultado. Se voc tiver necessidade de relatrios mestres/detalhes com mais de duas camadas
ento use QRGroup e TQuery ter uma probabilidade de ser melhor desempenho.
QRDetailLink
31
QRLabel
O Componente QRLabel usado para mostrar textos em um relatrio. A propriedade
Caption(Ttulo) pode ser alterado em alguns eventos durante a preparao do relatrio. Se voc
necessitar um texto para sada de um campo de dados use o componente QRDBText.
QRMemo
O Componente QRMemo utilizado montar linhas que precisam ser composta por vrios itens
de dados ou textos que precisem ser digitados para compor o relatrio.
QRDBText
O Componente QRDBText uma controle de texto de dados cliente. Texto conectado com um
campo de banco de dados.
QRDBCalc
Este componente automatiza processos de soma e contagem de campos de dados. Em adio
para esta propriedade o QRDBCalc tem todas a propriedades e eventos herdados do QRDBText.
QRSysData
O Componente QRSysData mostra vrias informaes do sistema. Em adio para as
propriedade do QRSysData tem-se todos os componentes que o QRLabel tem, exceto a propriedade
Caption.
QRShape
QRShape usado para mostrar linhas simples e figuras em um relatrio.
QRPreview
QRPreview usado para criar uma form de pr visualizao. Este componente mostra todas as
sadas de uma visualizao do preview atual. Para chamar sua prpria form de pr visualizao ao invs
de usar uma form padro com QuickReport atribuindo o evento QRPrinter.OnPreview. Neste evento voc
traz sua prprio form a qual deve conte o componente QRPreview. Voc no pode selecionar que pgina
para visualizar usando a propriedade PageNumber.
Criando Relatrios
QuickReport pode criar vrios tipos de relatrios, de fato com um breve conhecimento de Delphi
e um pouco de criatividade pode ser usado para criar qualquer tipo de relatrio.
Lembrar que ainda que se os relatrios so criados como as forms, mas no com a inteno de
ser mostrado na tela como forms. Em uma form relatrio deve ser includo um componente
TQuickReport, e voc usa neste componente os mtodos PRINT e PREVIEW para criar seu relatrio.
No tente usar em um relatrio os mtodos de form SHOW ou SHOWMODAL. Uma Form relatrio
nunca dever ser em sua aplicao o form principal.
1.
Criar um novo projeto com um form e sobre um nico form. Esta sua principal forma de
aplicao. Salvar unidade do form como MAINFORM e a aplicao como QRTEST.
1.
1.
1.
1.
1.
1.
1.
1.
1.
Dar um duplo clique no boto da form principal. Isto ir mostrar o evento ONCLICK do boto.
Adicionar o seguinte cdigo para o evento : MyReport.Rep.Preview;
1.
Voc criou agora um projeto com relatrio. Seu programa pode agora: apresentar, imprimir,
salvar e carregar relatrios!
1. Adicione um TQRBand para o relatrio. Coloque a propriedade BandType para rbSubdetail. Nomeie
ele para OrdersDetailBand.
33
Se voc desejar mais tabelas de detalhes voc dever repetir os passos 3 a 7 para cara tabela de
detalhes que voc ira incluir. Para mudar a ordem de impresso reorganize a ordem de criao dos
componentes TQRDetailink. As Tabelas de detalhes so imprimidas na ordem correspondente com a
criao dos componentes TQRDetailink.
5.
34
Arquivos de Inicializao
6. O Objeto TInifile
Para manipular arquivos .INI, o Delphi oferece o objeto Tinifile. O Objeto TIniFile, declarado na
unit Inifiles, permite que sua aplicao escreva e leia um arquivo .INI.
Para usar o objeto TIniFile, voc deve adicionar a unit Inifiles clusulas uses de sua aplicao.
Use o mtodo Free para liberar a memria utilizada pelo objeto TIniFile criado:
NomeObjeto.Free;
O exemplo abaixo cria, ao clicar no boto Button1, um arquivo .INI chamado NovoJogo, com
duas sees: Opcoes (com duas entradas) e Configuracao (com uma entrada):
ProcedureTForm1.Button1Click(Sender:TObject);
Var
IniJogo:TIniFile;
Begin
IniJogo:=TIniFile.Create(NOVOJOGO.INI);
IniJogo.WriteBool(Opcoes,Som,True);
IniJogo.WriteInteger(Opcoes,Nivel,3);
IniJogo.WriteString(Configuracao,Nome,Oliveira);
IniFile.Free;
End;
O arquivo de configurao NOVOJOGO.INI armazenado no diretrio \Windows, e possui o
seguinte formato:
[Opcoes]
Som=1
Nivel=3
[Configuracao]
Nome=Oliveira
Quando voc for distribuir sua aplicao, no esquea de oferecer o arquivo .INI. Outra opo criar o
arquivo .INI atravs de um programa de instalao do seu aplicativo, oferecendo ao usurio a
possibilidade de personalizar o arquivo .INI ja na instalao.
unit do formulrio principal), que podem ser utilizadas por toda a aplicao, quando necessrio. No
esquea de adicionar a unit do formulrio principal a clusula uses da seo implementation quando for
utilizar as variveis.
O exemplo abaixo l as entradas do arquivo NOVOJOGO.INI, mostrando para o usurio em
Labels:
Var
Form1:Tform1;
Vsom:Boolean;
Vnivel:Integer;
Vnome:String;
IniJogo:Tinifile;
Implementation
{$R*.DFM}
ProcedureTForm1.FormCreate(Sender:TObject);
Begin
Label1.Caption:=Nvel+InttoStr(Vnivel);
IfVsomthen
Label2.Caption:=SomLigado);
else
Label2.Caption:=SomDesligado);
Label3.Caption:=Nome:+Vnome;
End;
Initialization
Begin
IniJogo:=TIniFile.Create(NOVOJOGO.INI);
Vsom:=IniJogo.ReadBool(Opcoes,Som,False);
Vnivel:=IniJogo.ReadInteger(Opcoes,Nivel,1);
Vnome:=IniJogo.ReadString(Configuracao,Nome,);
IniFile.Free;
end;
36
A constante Seo determina a seo que ser lida. O parmetro ListaEntradas corresponde ao
objeto do tipo TString que armazenar as entradas (por exemplo, memo1.lines). Voc pode usar a
propriedade Values de uma string ou lista de strings para acessar uma string especfica na lista de string.
Para apagar uma seo inteira de uma arquivo .INI use o mtodo EraseSection.
A propriedade FileName contm o nome do arquivo .INI que est sendo manipulado pelo objeto
TIniFile.
Manipulao de Arquivos
Alguns comandos podem ser uteis para manipular o arquivo .INI :
6.1.1
GetDir
6.1.2
FileExists
6.1.3
DeleteFile
A funo DeleteFile apaga o arquivo especificado do disco. Se o arquivo no poder ser apagado ou no
existir retorna falso.
Sintaxe:
DeleteFile(const FileName: string): Boolean;
Criando HELP
37
7. Viso Geral
Inicialmente voc cria os tpicos do help em um arquivo texto, atravs de um editor de textos
convencional (word).
A parte, cria outro arquivo texto (HPJ) contendo informaes sobre o arquivo de Help para o
compilador.
Por fim, utiliza um programa especfico (HC31) para compilar o arquivo de Help, gerando o
arquivo de extenso .HLP.
O programa Win Help, gerenciador de Help do Windows, gerencia a visualizao do arquivo
.HLP.
Escrendo os tpicos
Para criar o arquivo Help, utilize um editor de textos que permita a gravao em um arquivo
RTF, como o Word.
Para escrever os tpicos do Help, abra um novo documento no editor de texto e:
Escreva o ttulo do tpico, voc pode formatar este ttulo para destacar do resto do texto;
Escreva o texto do tpico;
Crie uma crebra de pgina;
Escreva o novo tpico.
Voc precisa inserir em seus tpicos notas customizadas para que o Win Help possa identificar e
criar os quadros de diloga padro, como o quadro procura.
# : String de contexto, identifica o tpico. O usurio no a v, mas ser usada para links entre
tpicos.
$ : Ttulo. Aparece como ttulo do tpico da caixa Procura. Normalmente igual ao atributo do
tpico.
K : Palavras chaves. Aparecem na lista Procura. Voc pode escolher mais de uma palavra chave,
separando-as como o ponto e vrgula (;).
+ : Sequncia de folheamento. Determina a ordem dos tpicos quando o usurio folheia o help.
O identificador pode ser um membro (01) ou um nome de grupo seguido de um sinal de
dois pontos (:) e um membro (doc:01).
Imediatamente aps esta palavra digite o nome da string de contexto que representa o tpico,
mudando seu formato para oculto.
Digite um @;
38
Compresso
-------------Sem compresso
Mdia compresso
Alta compresso
7.1
39
HCP.EXE
HC31.EXE , HC31.ERR
Quando voc compilar o arquivo de Help os arquivos abaixo devem de preferncia estar no
mesmo diretrio:
Todos os RTF
O compilador de Help (HC31.EXE)
O arquivo de recursos contendo as mensagens de erro do compilador de Help (HC31.ERR)
O arquivo de projeto (.HPJ)
Qualquer Bitmap utilizado.
Imediatamente aps esta palavra, digite o nome da string do contexto que representa o tpico,
mudando seu formato para oculto.
Digite um >
7.2
40
Excees
41
8. A Estrutura TryFinallyEnd
Seu cdigo precisa garantir que, mesmo ocorrendo um erro, os recursos alocados sejam
desalocados. Entre estes recursos esto: arquivos, memria, recursos do Windows, objetos.
Para garantir a desalocao dos recursos, usamos a estrutura abaixo:
{Alocaosrecursos}
Try
{Comandosqueusamosrecursos}
Finally
{Liberaosrecursos}
end;
A aplicao sempre executar os comandos inseridos na parte Finally do bloco, mesmo que uma
execeo ocorra. Quando um erro ocorre no bloco protegido, o programa pula para a parte finally,
chamada de cdigo limpo, que executado. Mesmo que no ocorra um erro, estes comandos so
executados.
No cdigo a seguir, alocamos memria e geramos um erro, ao tentarmos uma diviso por 0.
Apesar do erro o programa libera a memria alocada:
ProcedureTForm1.Button1Click(Sender:TObject);
Var
Apointer:Pointer;
AnInteger,Adividend:Integer;
Begin
Adividend:=0;
GetMem(Apointer,1024);
Try
Aninteger:=10DivAdividend;
Finally
FreeMem(Apointer,1024);
End;
End;
A Estrutura TryExceptEnd
Um tratamento de exceo um cdigo que trata erros que ocorrem dentro de blocos protegidos.
Para definir um tratamento de exceo, utilize a seguinte construo:
Try
{Comandosquevocdesejaproteger}
Except
{Comandosdetratamentodeerros}
end;
A aplicao ir executar os comandos na parte except somente se ocorrer um erro. Se na parte
try voc chamar uma rotina que no trata erros, e um erro ocorrer, ao voltar para este bloco a parte except
ser executada. Uma vez que a aplicao localiza um tratamento para exceo ocorrida, os comandos so
executados, e o objeto exceo destrudo. A execuo continua at o fim do bloco.
Dentro da parte except definimos um cdigo a ser executado para manipular tipos especficos de
exceo. Por exemplo, o cdigo abaixo trata o erro de diviso por zero, atravs da exceo EDivByZero:
FunctionDiviso(Soma,Numero:Integer):Integer;
Begin
Try
Result:=SomadivNumero;
Except
onEDivByZerodoResult0;
End;
End;
42
A palavra reservada on define respostas para uma exceo. On est sempre junto de do, para
manipular a exceo.
Para ler informaes especficas sobre o erro ocorrido, voc usa uma variao da estrutura on
do, que prov uma varivel temporria que engloba a exceo. Nesse caso, voc poder criar seu prprio
quadro de mensagem contendo a string da mensagem da exceo:
Try
{Comandos}
Except
onE:EInvalidOperationdo
MessageDlg(gnorandoaexceo:+E.Message,
mtinformation,[mbOk],0);
End;
Onde a varivel temporria E do tipo EInvalidOperation.
Voc pode prover um tratamento padro de erro para tratar excees que no tem tratamentos
especificados. Para isto, adicione uma parte else na parte except do bloco:
Try
{Comandos}
Except
onEPrimeiroTipodo
{Cdigoespecificoparaoprimeirotipodeerro]
onESegundoTipodo
{Cdigoespecficoparaosegundotipodeerro}
Else
{Cdigopadrodetratamentodeerros}
End;
Alm disso, voc pode utilizar as excees genricas para tratar um erro, em vez de uma exceo
especfica. Por exemplo, se voc quer tratar um erro relacionado a uma operao com inteiros, mas no
sabe exatamente o erro, poder utilizar a exceo EIntError, que a exceo genrica da qual derivam
outras excees relacionadas a inteiros:
Try
{Comandos}
Except
onEIntErrordo
{Cdigodetratamentodeerros}
End;
Excees Silenciosas
Voc pode definir excees que no mostram um quadro de mensagem para o usurios quando
aparecem. So chamadas excees sileciosas.
O caminho mais curto para criar esta exceo atravs da procedure Abort. Esta procedure
automaticamente gera uma exceo do tipo EAbort, que abortar a operao sem mostrar uma mensagem.
O exemplo abaixo aborta a operao de incluso de itens em um ListBox quando tentamos
inserir o terceiro elemento:
Begin
Fori:=1to10do
begin
ListBox1.items.Add(IntToStr(i));
Ifi=3then
Abort;
end;
End;
43
Dicas
44
9. Criao de MDIChild
procedureTForm1.Teste1Click(Sender:TObject);
begin
ifformexiste(Form2)=falsethen
begin
Screen.Cursor:=CrHourGlass;{Cursorampulheta}
Form2:=TForm2.Create(Self);
end;
else
begin{Trazajanelaparafrente}
Form2.WindowState:=WsNormal;
Form2.BringToFront;
Form2.Setfocus;
end;
end;
Obs1.:
interface
uses{Declaraodaunitdaformasercriada}
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,
Controls,Forms,Dialogs,Menus,unit2,StdCtrls;
Obs2.:
public
{Publicdeclarations}
Form2:Tform2;{Declaraodajanelaasercriada}
end;
Obs3.:
{NaformFilhacriada}
procedureTForm2.FormCreate(Sender:TObject);
begin
Screen.Cursor:=CrDefault;{Cursornaformanormal}
end;
procedureTForm2.FormClose(Sender:TObject;varAction:TCloseAction);
begin
Action:=cafree;{Liberadamemriaajanela}
end;
Form Existe
FunctionTForm1.Formexiste(Nomejanela:TForm):boolean;
var
I:integer;
begin
Formexiste:=false;
fori:=0tocomponentcount1do
ifComponents[i]isTFormthen
ifTForm(Components[i])=nomejanelathen
Formexiste:=true
end;
45
Obs.:
public
{Publicdeclarations}
FunctionFormexiste(nomejanela:Tform):boolean;
end;
Criao ShowModal
procedureTForm1.Teste2Click(Sender:TObject);
begin
try
Application.CreateForm(TForm3,Form3);
Form3.showmodal;
Finally
Form3.free;
end;
end;
Obs.:
interface
uses{Declaraodaunitdaformasercriada}
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,
Controls,Forms,Dialogs,Menus,unit3,StdCtrls;
Fechar Todas
procedureTForm1.Teste31Click(Sender:TObject);
Var
I:Integer;
begin
forI:=MDIChildCount1downto0do
MDIChildren[I].close;
end;
Obs.: Pode ser utilizada para minimizar todas e maximizar todas.
Relgio e Teclado
procedureTForm1.Timer1Timer(Sender:TObject);
begin
{AtualizaahoradoRelgio}
label1.caption:=timetostr(now)+''+Datetostr(now)+'';
{AtualizaoPaineldeTeclas}
if(GetKeyState(vk_NumLock)and$01)<>0then
Label2.Caption:='Num'{TeclaNumLock}
else
Label2.Caption:='';
if(GetKeyState(vk_Capital)and$01)<>0then
Label3.Caption:='Cap'{TeclaCapsLock}
else
Label3.Caption:='';
if(GetKeyState(vk_Insert)and$01)<>0then
Label4.Caption:='Ins'{TeclaInsert}
else
Label4.Caption:='';
end;
9.1
46
Informaes Sistema
procedureTForm2.FormCreate(Sender:TObject);
type
FlagSet=setof120..135;
var
Flgs:FlagSet;
L:Longint;
s:String;
begin
image1.picture.graphic:=application.icon;
titulo.caption:=application.title;
L:=GetVersion;
windows.caption:=Format('Windows%u.%.2u',[Lobyte(loword(L)),
Hibyte(loword(L))]);
dos.caption:=Format('DOS%u.%.2u',[Hibyte(Hiword(L)),
Lobyte(HIword(L))]);
L:=GetWinFlags;
IfLandWF_Enhanced=0then
modo.caption:='ModoStandard';
IfLandWF_80x87=0then
coprocessador.caption:='Ausente';
memoria.caption:=FormatFloat('#######',MemAvailDIV1024)+'KB
Livres';
{Processador}
l:=GetWinFlags;
Flgs:=FlagSet(Word(l));
s:='unknown';
if121inFlgsthen
s:='286';
if122inFlgsthen
s:='386';
if123inFlgsthen
s:='486ouPentium';
Processador.Caption:=s;
{GDIRecursos}
l:=GetFreeSystemResources(gfsr_GDIResources);
gauge1.progress:=l;
{UserRecursos}
l:=GetFreeSystemResources(gfsr_UserResources);
gauge2.progress:=l;
{EspaoDisco}
l:=(DiskFree(0)div10240)div(DiskSize(0)div1024000);
Label18.Caption:=IntToStr(DiskFree(0)div1024000)+
+'MB';
gauge3.progress:=l;
end;
Referncia
47
http://www.samnet.com.br/inforsite
48