Vous êtes sur la page 1sur 39

1

INTRODUÇÃO
2

O que é Delphi?
O Delphi é um ambiente de desenvolvimento de aplicações, orientado a objeto, que
permite o desenvolvimento de aplicações para os Sistemas operacionais Windows
3.11, Windows 95 e Windows NT, com pouca codificação.
O Delphi tem ferramentas de desenvolvimento, como templates e experts de
aplicações e formulários, que aumentam muito a produtividade, facilitando a
programação da aplicação.

Como é formado uma Aplicação em Delphi


Quando você abre um projeto no Delphi, ele já mostra uma UNIT com várias linhas
de código. Este texto tem como objetivo explicar um pouco desta estrutura que o
ele usa. Um projeto Delphi tem, inicialmente, duas divisórias: uma UNIT, que é
associada a um Form, e outra Project, que engloba todos os FORM e UNITs da
aplicação.
Em Delphi temos: o Project, os Forms e as Units. Para todo Form temos pelo menos
uma Unit (Código do Form), mas temos Units sem form (códigos de procedures,
funções, etc).

. . . . . . . . . . Conhecendo as janelas do Delphi . . . . . . . . . .

Siga o rumo natural das coisas


Inserir objeto, mudar propriedades, criar código, salvar e compilar programa

Nesta janela você inseri os objetos( button, memo, DBGRID, etc.)


Janela Form( formulário)

Para inserir um objeto basta dar um clique duplo no objeto que esta na Paleta
Component
Paleta Componet

É composta de várias páginas contendo cada uma grupos de componentes. Para


mudar de página na palheta de componentes, clique sobre a aba da página que
você quiser acessar.

Para mudar as propriedades de um objeto basta seleciona-lo clicando uma vez e


sobre ele e mudar suas propridades na Janela Object Inspector
Object Inspector
3

Nesta janela você muda tamanho de um objeto, posição no formulário cor, forma
2D ou 3D entre outras propriedades.
A página Properties([Propriedades) permite que você estabeleça parâmetros de
formulários e componentes. Estes parâmetros especificam os valores iniciais de
características como nome do componente e sua posição no formulário.
A páginas Events (Eventos) permite associar os componentes com ações do
usuário.
4

Janela Code Editor( Editor de Código)

É onde você digita o código para cada ação a ser executada quando o usuário clique
em determinado botão por exemplo.
Não digite o código de seu programa até que todos os objetos, Button,
SaveDialog1, OpenDialog1, etc já estejam no formulário.

Lembre- se "Siga o rumo natural das coisas"


E não vai ter problemas para programar em Delphi

Antes de iniciar qualquer projeto é bom você criar uma pasta Delphi e subpastas.
Faça assim abra o Windows Explorer, clique na pasta Meus documentos para
seleciona-la clique em Arquivo/Novo/Pasta você pode dar o nome para esta pasta
de Delphi e as subpastas de acordo com o nome do projeto.
5

Iniciando em Delphi 3 e 4
Não iremos trabalhar com código de programação aqui

Vamos localizar determinado objetos e modificar nome, título, tamanho, cor, etc.

Na página Standard localize Button com um Ok escrito, dê um clique duplo e ele


aparece no formulário( Form)

Selecione o botão e clique em Caption na janela Object Inspector modifique para 1

Dê um clique duplo em + Font em Name( nome da fonte) clique e escolha


Wingdings, em Size escolha tamanho 12

Você notou que o botão contém um espécie de pasta como fonte.

Modifique ShowHint para True, em Hint escreva Abrir documento

Caso chegue a salvar este documento e compilar, quando o mouse passar sobre
este botão uma dica será mostrada( Abrir documento)

Clique em qualquer área vazia do formulário modifique Caption para Meu primeiro
programa

Mude Name para MeuPrograma

Mude Width para qualquer valor menor do que o padrão

Mude Height para qualquer valor menor do que o padrão

Mude Color para Background

Clique na página Additional

Dê um clique em BitBtn para seleciona- lo e na janela Object Inspector apague


BitBtn1 de Caption

Com este novo botão selecionado Clique em Glyph..., clique em Load, procure pela
pastas C:\Arquivos de programas\Borland\Delphi3\Images\Buttons\Filesave.bmp
clique em abrir e depois em OK .

O botão tem agora um ícone para salvar. Nesta seqüência de pastas é possível
escolher quase todos os tipos de Imagens para botões.

Clique na página Standard clique em MainMenu o primeiro objeto da lista

Dê um clique duplo em MainMenu abre- se um editor para Menus

Escreva &Arquivo pressione enter, escreva A&brir pressione enter, escreva &Salvar
pressione enter, escreva Sa&ir pressione enter. Feche a janela do editor e dê um
olhada no formulário. Agora você já sabe criar um Menu.

Os botões estão soltos sem ordem. Clique na página Additional e clique em Bevel,
com o Bevel selecionado mude Align para alTop. Coloque os botões no Bevel que
nada mais é que um painel.

Se você não gostar de algum botão ou objeto no formulário basta dar um clique
nele para seleciona- lo e pressionar a tecla Delete e ele desaparece do seu projeto.
6

Clique na página Standard e dê um clique duplo em Memo

Modifique Align para alClient, clique em Lines... apague o que está escrito e clique
em OK.

Deu para notar que este é o inicio de um programa Editor de texto.

Se quiser salvar o project clique em File/ Save All.

Após salvar o project você pode compila-lo pressionando a tecla F9.

Nunca compile um programa ainda não salvo. Salve primeiro e depois compile.

Se você salvou o projeto notará que ele não faz nada não abre e não salva
documentos siga para o próximo projeto Editor de texto.
7

Editor de texto
Inicie um novo projeto no Delphi

1º Coloque um componente Bevel( página Additional) no formulário definindo sua


propriedade Align como AlTop.

2º Coloque dois Button( página Standard). Selecione o primeiro botão e na Janela


Object Inspector mude Caption para &Abrir. Mude Caption do segundo Button para
&Salvar. Alinhe estes botões no Bevel. Se necessário mude Height do Bevel para
que acomode corretamente os botões.

3º Dê um clique duplo em Memo( página Standard) para coloca-lo no Form(


fomulário). Defina Align para alClient , Scrollbars para ssBoth, Lines em branco.

4º Mude Caption do Form( formulário) para Editor de texto.

5º Coloque um OpenDialog( página Dialogs). Mude as propriedades DefaultExt para


TXT, FileEditStyles para ComboBox, Options.ofHideReadOnly para True,
Options.ofFileMustExist para True, Options.ofReadInlyReturn para True. Clique em
Filter e escreva na primeira coluna Arquivo de texto, na Segunda coluna na mesma
linha escreva *.txt

6º Insira um SaveDialog e defina sua propriedades DefaultExt para TXT,


Options.ofHideReadOnly para True, Options.ofOverwritePrompt para True,
Options.ofNoReadOnlyReturn para True. Clique em Filter escreva na primeira coluna
Arquivo de texto, na Segunda coluna na mesma linha escreva *.txt

7º Dê um clique duplo no botão Abrir e escreva o seguinte código.


WITH OpenDialog1 DO
IF Execute THEN
BEGIN
Memo1.Lines.LoadFromFile(Filename);
HistoryList.Add(Filename);
Caption := 'Editor de texto - '+
ExtractFilename(Filename);
SaveDialog1.Filename := Filename;
Filename := ' ';
END;

8º Salve o Project clicando em File, Save Project As, dê um nome como Editor para
Unit1 e MeuEditor para Project1. Rode o programa e compilando pressionando a
tecla F9. Faças os teste necessários feche o programa e retorne ao projeto.

9º Dê um clique duplo no botão Salvar e digite a seguinte linha

Memo1.Lines.SaveToFile(SaveDialog1.FileName );

10º Se você rodar o programa agora pressionando F9 para compilar notará que o
programa apenas salva um texto já existe e não pode criar um novo documento
texto.

11º Insira mais um botão no Bevel modifique Caption para Sal&var como, dê um
duplo clique neste novo botão e digite o seguinte código.
8

WITH SaveDialog1 DO
IF Execute THEN
BEGIN
Memo1.lines.SaveToFile(Filename);
Caption := 'Editor de texto - '+
ExtractFilename(Filename);
END;
12º Pronto pressione novamente a tecla F9 e você já tem seu próprio Editor de
Texto. Salve as alterações
Exercícios
Tente criar um novo editor de texto mas com uma diferênça. Abrir arquivos *.txt,
*.js e salvar como *.htm,html
9

Visualizador de Imagens
Vamos trabalhar com um visualizador de imagens Bitmap, Ícones e Metaarquivos .

Inicie o Delphi

Modifique Caption do Form1 para Meu Visualizador de Imagens

Na página Additional de um clique duplo no objeto Image para coloca-lo no


formulário

Mude Align para alClient para ocupar todo formulário e mude também Strech como
True

Na página Dialogs dê um duplo clique em OpenDialog para coloca-lo no formulário

Em Default escreva BMP

Dê um clique duplo em + Options deixe ofHideReadOnly como True

Deixe ofFileMustExist como True

Dê um clique duplo agora na propriedade Filter

Escreva na primeira coluna Arquivos de imagens e na segunda coluna escreva


*.bmp*.ico;*.wmf

Clique em OK

Na página Standard dê um clique duplo em MainMenu

Com o objeto MainMenu já no formulário de um clique duplo nele e Escreva

&Arquivo e pressione a tecla enter

A&brir e pressione a tecla enter

&Sair e pressione a tecla enter

Feche o Editor de Menu

Já com o Menu criado em seu formulário clique me Arquivo/ Sair

Escreva apenas

Close

Clique em Arquivo/ Abrir e digite o seguinte código

WITH OpenDialog1 Do

IF Execute THEN

BEGIN

Screen.Cursor := crHourglass;

try

WITH Image1.Picture DO
10

BEGIN

LoadFromFile(Filename);

WindowState := wsNormal;

ClientWidth := Width;

ClientHeight :=Height;

END;

Caption := ExtractFilename(Filename);

finally

Screen.Cursor := crDefault;

end;

END;

Salve o Projeto clicando em File/ Save Project As...

Dê um nome para Unit1 pode ser iMage e para Project1 pode ser iMagem.

Compile o programa pressionando a tecla F9

Note que o formulário expande devido ao tamanho da imagem.


11

Dicionário da Língua Portuguesa


Inicie o Delphi Iniciar/ Programas/ Borland Delphi 3 ou 4/ Delphi 3 ou 4

Na página Standard dê um duplo clique em Label, deixe Caption em branco, Height


coloque valor 40, Width coloque valor 400

Insira um Edit e apague o texto de Text, ajuste o tamanho para acomodar uma
palavra.

Coloque um Button no formulário, modifique Caption para Pesquisar.

Clique em qualquer área vazia do formulário( Form) e mude Caption para Meu
Dicionário de Língua Portuguesa.

Organize os objetos nesta ordem Label1 acima ocupando quase todo formulário,
Edit1 um mais abaixo e Button1 do lado Edit1.

Vamos ao código do programa

Dê um clique duplo no botão Pesquisar e digite

IF Edit1.Text = 'a' then

Label1.Caption := '1ª letra do alfabeto';

Salve o projeto clicando em File/ Save All, compile após salvar pressionando a tecla
F9.

Não digite nada apenas clique em Pesquisar. Nada acontece, digite uma letra "a" e
clique em Pesquisar a Label1 mostra o texto "1ª letra do alfabeto".

Feche o programa e retorne ao projeto.

No código acima remova ponto e virgula e escreva

ElSE

Label1.Caption := 'Termo não encontrado';

Veja como fica o código completo até aqui.

IF Edit1.Text = 'a' then

Label1.Caption := '1ª letra do alfabeto'

ElSE

Label1.Caption := 'Termo não encontrado';

Após a instrução Label1.Caption := ‘Termo não encontrado’;

Insira mais essa linha de código

IF Edit1.Text = 'abacate' then

Label1.Caption := 'O fruto do abacateiro';

Veja como fica o código até aqui


12

IF Edit1.Text = 'a' then

Label1.Caption := '1ª letra do alfabeto'

ElSE

Label1.Caption := 'Termo não encontrado';

IF Edit1.Text = 'abacate' then

Label1.Caption := 'O fruto do abacateiro';

Mas se o usuário não digitar nada e clicar em Pesquisar. Então é bom criar um
código para lembra- lo de digitar algum termo.

Dê um clique duplo no botão Pesquisar e digite:

IF Edit1.Text = '' then

Label1.Caption := 'Você precisa digitar algum termo';

Veja agora o código completo do programa Dicionário da Língua Portuguesa

IF Edit1.Text = 'a' then

Label1.Caption := '1ª letra do alfabeto'

ElSE

Label1.Caption := 'Termo não encontrado';

IF Edit1.Text = 'abacate' then

Label1.Caption := 'O fruto do abacateiro';

IF Edit1.Text = '' then

Label1.Caption := 'Você precisa digitar algum termo';

Compile novamente o projeto pressionado a tecla F9, faça os testes necessários e


após fechar o programa salve as alterações feitas no projeto.

Não pense que acabou falta você criar mais algumas instruções para as 30.000
palavras restantes do dicionário. Bom divertimento!!!
13

Banco de dados
Vamos criar um banco de dados simples contendo apenas 04 campos para facilitar
a explicação

Clique em Iniciar/ Programas/ Borland Delphi 3/DataBase Desktop

Clique em File/ New/ Table

Escolha entre as várias opções dBase for Windows e clique em OK

Para o exemplo use esta seguinte ordem

Field Name Type Size

NOME C 20

TELEFONE N 20

ENDEREÇO C 30

CIDADE C 20

Clique em Save As...

Dê um nome exemplo Clientes e escolha a pasta onde será salvo seu banco de
dados Clientes

Clique em Salvar.

Ainda no DataBase Desktop clique em File/ Open/ Table

Escolha justamente o banco de dados Clientes que acabou de criar e clique em


Abrir.

Clique em Edit Data para preencher com alguns dados sua tabela. Faça os teste
necessários.

Feche o DataBase Desktop

Abra o Delphi 3. Clique em Iniciar/ Programas/ Borland Delphi 3/ Delphi 3

Você pode criar um programa que acesse seu banco de dados Clientes de 02
formas.

Criando através de um assistente ou simplesmente à partir do zero.

1ª Forma( DataBase Form Wizard)

Clique em Database/ Form Wizard


14

Você terá algumas opções de formulário mas por hora deixe as opções padrão
escolhidas pelo Delphi

Apenas clique em Next. Você pode testar outras opções depois.

Na próxima janela abra as pasta até achar o banco de dados Clientes.

No exemplo eu usei C:\Meus documentos\Delphi\Banco de dados\Clientes.dbf

Clique em Next

Na próxima tela será mostrado os campos disponíveis NOME, TELEFONE,


ENDEREÇO, CIDADE clique >> para passar todos os campos para torna-los
disponíveis na tabela.

Clique em Next

Agora escolha uma das três opções Vertically, Horizontally ou In a Grid

Como exemplo escolha In a Grid e clique em Next.

Clique em Finish.

Se você seguiu todos os passos corretamente o assistente criou um formulário para


seu Banco de dados Clientes.

Mude Caption do Form para Cadastro de Clientes

Agora basta salvar e usar. Porém feche sem salvar o Form1 e Unit1 que foram
criados quando você iniciou o Delphi.

Compile pressionando F9 e use o programa para cadastrar seus clientes.

Se você já se deu por satisfeito e acha que não precisa saber como criar um
formulário para conectar com seu Banco de dados basta passar para outro projeto
escolhendo um no final da página caso contrário veja como cria um formulário à
partir do zero.

2ª Forma ( À partir do zero)

Inicie o Delphi 3

Mude Caption do formulário para Cadastro de Clientes

Na página Additional dê um clique duplo em Bevel. O objeto aparece no formulário

Modifique Align para alTop, Style para bsRaised

Na página Data Access dê um clique duplo em DataSource. O objeto aparece no


formulário dê um clique duplo também em Table.

Clique em DataSource para seleciona-lo no formulário e em DataSet escolha Table1

Clique no objeto Table1 para seleciona-lo e em DatabaseName escreva o caminho


completo para seu banco de dados Clientes.dbf

No exemplo eu uso

C:\Meus documentos\Delphi\Banco de dados


15

Se tudo estiver certo clique em TableName e escolha Clientes.dbf

Na página DataControls você inseri mais dois objetos para finalizar seu programa

Dê um clique duplo em DBGRid aproveite e mude Align para alClient, DataSource


para DataSource1

Dê um clique duplo em DBNavigator e coloque-o sobre o DBGrid já alinhado no


topo

Com DBNavigator selecionada escolha DataSource1 em DataSource no Object


Inspector.

Quase pronto...

Selecione Table1 no formulário e mude Active para True

Se você preencheu seu banco de dados Clientes com alguns dados eles irão
aparecer no formulário. Caso contrário você deve ter errado em algum momento.
Faça um revisão.

Agora se tudo deu certo Clique em File/ Save Project As..., dê um nome para Unit1
pode ser Clientes. Escolha a pasta e clique em Salvar. Dê um nome para o Project
pode ser CadastroClientes

Agora basta compilar pressionado F9 e usar o programa para cadastrar seus


clientes

Bom se você achou que este programa não corresponde a suas necessidades ou de
sua empresa, faça outra tabela usando o DataBase Desktop e retorne ao Delphi e
crie uma interface para acesso aos dados.
16

COMPREENDENDO MELHOR O DELPHI

As seções seguintes descrevem alguns tópicos de programação


avançada em Delphi e em Visual Basic para que você possa compará-
los

Units
Enquanto existem várias diferenças, as Units do Delphi são
funcionalmente equivalente aos módulos no Visual Basic.
Representam a unidade fundamental do código. Em VB, existe um
módulo implícito associado com cada form e a habilidade de adicionar
módulos em seu projeto contendo procedures, declarações DLL e
constantes e váriaveis globais.
Em Delphi existe uma Unit explicita associada com cada form que
contém todo o código associado com o form, incluindo as definições
de classes. Isso explica porque quando você salva um projeto em
Delphi, você é avisado para dar um nome a unit (*.PAS). O form e
salvo com o mesmo nome e extensão diferente (*.DFM).Também, é
possível fazer uso de várias units adicionais pelo uso da declaração
uses. Diferente do Visual Basic, onde os módulos devem ser
carregados dentro do projeto e então estarão completamente
disponíveis para a aplicação, a disponibilidade dos recursos de uma
unit em Delphi não obriga que ela seja parte do projeto - uma grande
flexibilidade! Você pode acessar uma unit por outra através da
inclusão da primeira na declaração uses da segunda. Como você
pode ver no form onde está o código existe uma "aba" escrito "Unit1"
este é o nome default para a unit. Se você clicar nesta "aba", você
verá o código que já existe na unit. Na décima quinta linha existe a
declaração uses com uma lista com várias unist separadas por
vírgulas:
uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

Forms, Dialogs;

Estas são as definições default das units o qual está disponível em


todo form novo. Você não precisa adicionar nenhuma destas linhas de
código em seu projeto; o Delphi faz isso para você. A presença destas
declarações na declaração uses faz com que elas se tornem
funcionalmente disponíveis para o form. Algumas delas são
importantes. Por exemplo, WinProcs e WinTypes adicionam todas as
17

funções cruciais da API Windows. Algumas dessas como


Classes, Graphics, Controls e Forms são requeridas pelo Delphi para
fazer os forms trabalharem com sua aplicação. Você deve remover
units desta lista default com cautela. Na maioria dos casos, você não
precisará alterar esta lista porque se a funcionalidade de ums destas
units não for usada, o código desta unit não será linkado a sua
aplicação. Se você deseja utilizar a funcionalidade da Unit1dentro da
Unit2, você precisa incluir Unit1 na declaração uses da Unit2.

Como os módulos, as units podem conter procedures, declarações


DLL, tipos definidos por usuário e variáveis e constantes globais.
Existem duas seções numa unit, a interface e a implementation. A
interface é uma área "public" e a funcionalidade definida nesta área é
disponível por toda aplicação onde a unit estiver listada na declaração
uses. A implementation é uma porção da unit definida como área
"private" então variáveis, constantes e funções definidas somente
estarão disponíveis na unit. Isto será discutido mais adiante em
discussão sobre scopo de variáveis e procedures abaixo:

Então, lembre-se que adicionar uma unit ao projeto é somente uma


conveniência para edição e compilação. Se você quer acessar a
funcionalidade de uma unit, você deve colocá-la dentro da declaração
uses em seu código.

Escopo (alcance) de variáveis


Delphi suporta praticamente todos os níveis de escopo encontrados
no Visual Basic e mais.A tabela abaixo representa os diferentes níveis
de escopo em Visual Basic e os correspondentes em Delphi.
Visual Basic Delphi
Local Local
Static typed constant
Module Level Unit Level
Global Global
class level Object Level

Em Visual Basic, se você usa a palavra chave Dim dentro de uma


procedure definition, você estará definindo uma variável como local
para a procedure. Igualmente se você adicionar uma variável na
seção var de uma procedute em Delphi, você estará definindo uma
variável local. Não existe equivalente em Delphi para as variáveis tipo
static, mas uma variável static é realmente um module level variable
que é usado somente numa procedure. É somente um nome de
conveniência.
Em Visual Basic, se você usa a palavra chave Dim em uma seção de
declaração de um módulo ou form, você estará criando uma module
level variable. Da mesma maneira, se você colocar uma variável
18

numa declaração Var de uma seção Implementation de uma unit,


você estará definindo uma (i.e. one which can only be seen from
within that unit).
Em Visual Basic, se você usar a palavra chave Global na declarations
section de um módulo, você estará definindo uma variável global. Em
Delphi,você simplesmente coloca a variável na declaração var da
seção interface de uma unit e a variável estará disponível para
qualquer unit que estiver com a unit da variável em sua declaração
uses. O segmento de código a seguir ajuda a esclarecer:
unit MyUnit;
interface

uses

WinProcs, WinTypes; {these are the units used by this unit}

var

globalInt:integer;

globalStr:string;
implementation

var

unitInt:Integer;

unitStr:String;

procedure unitProc;
const

staticInt:Integer = 0;

staticStr:String = '';

var

localInt:Integer;

localStr:String;

begin

{code goes here}

end;

end.

Este código é uma unit completa com as seções interface e


implementation. As variáveis definidas na seção interface são
globais. As variáveis definidas na declaração var da unit são unit
19

level e finalmente as definidas na declaração var da seção procedure


são locais.
Fique atento que variáveis unit-level criadas dentro de um form estão
disponíveis através de múltiplas instâncias deste form. Em outras
palavras, diferentemente do Visual Basic, estas variáveis existentem
somente uma por aplicação, então ainda que você pode ter múltiplas
instâncias do form, variáveis unit level são compartilháveis. Um meio
de contornar isso é definir um conjunto de variáveis como parte de
uma nova classe de forms que você criará. Uma típica definição pode
parecer com isso:

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

Você pode criar uma variável "form level" equivalente às do VB pela


adição dela na seção private da definição do form. Então essa
mudança parecerá com:
type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

private

{ Private declarations }

formInt:Integer;

formStr:String;

public

{ Public declarations }

end;
20

Se você não criar múltiplas instâncias do seu form em suas


aplicações, você nunca saberá a diferença entre variáveis unit level
ou form level. Entretanto, uma grande aplicação MDI pode começar
como uma aplicação de form simples, então é melhor usar o nível
mais restrito de escopo que você puder para que possa flexibilizar no
futuro.

Desvio Conditional
Existem dois tipos de desvio condicional em Delphi como no Visual
Basic, if..then e case. Estas construções são similares nos dois
ambientes.

If...Then...Else

Quase todas linguagens tem alguma forma de declaração if. Na sua


forma mais simples em Visual Basic:
If <condition> Then <action> Else <action>

o qual é exatamente como a forma simples em Delphi. A declaração


If chkShow.Value = True Then Text1.Visible =True Else Text1.Visible =
False

em Visual Basic, parece com a seguinte em Delphi:


If chkShow.State = cbChecked Then Edit1.Visible := True Else
Edit1.Visible := False;

A diferença aparece, quando você precisa de executar múltiplas


linhas de código em uma condição. Como mostrado acima, o Object
Pascal requer que o bloco de código esteja entre um par de
begin..end. Então o seguinte código será o código em Delphi para
ajustar a propriedade Visible de vários controles para True numa
condição particular:
if chkShow.State = cbChecked then
begin

Edit1.Visible := True;

Edit2.Visible := True;

end;

Agora dê uma olhada no exemplo envolvendo um else. Você irá


observar uma pequena anomalia de sintaxe neste exemplo:
if chkShow.State = cbChecked then
begin

Edit1.Visible := True;
21

Edit2.Visible := True;

end

else

begin

Edit1.Visible := False;

Edit2.Visible := False;

end;
Uma exceção na regra de terminar a linha de código com um ponto e
vírgula é quando as linhas são imediatamente precedidas por um
else. Consequentemente, você observará que a primeira declaração
end não tem um ponto e vírgula, porque está imediatamente seguido
por um else. Estes pares begin..end não devem ser confundidos
com o complemento de um bloco if que é o EndIf. Não existe
equivalente para o Endif em Delphi. Você pode, é claro, aninhar a
declaração if ao longo de cada bloco de código cercado por
begin..end.

Case
A seleção com a declaração Case em Visual Basic é designada para
prover uma estrutura mais elegante do que várias declarações if . A
declaração case em Delphi tem uma funcionalidade similar. Veja o
seguinte código em Visual Basic:
Select Case MyVar

Case 0

J = "Hello"

Case MY_CONST

j = "Goodbye"

Flag = False

Case 2, 3, 5 To 10

j = "How are you?"

End Select

traduzindo para a linguagem Object Pascal do Delphi:

case MyVar of
0:

J := 'Hello';
22

MY_CONST:

begin

j := 'Goodbye';

Flag := False;

end;
2, 3, 5..10:

j := 'How are you?';

Duas coisas devem ficar claras. Primeiro, o bloco de código depois da


MY_CONST requer um par begin..end e segundo, Não existe "End
Select" em Delphi. A Estrutura case termina simplesmente com a
última linha de código - como o case , outras construções em Object
Pascal termina assim, incluindo os loops, discutidos na próxima
seção.

Como em Visual Basic, você pode combinar múltiplos cases


separando-os com vírgula. Um conjunto é representado por
<LowerVal..HigherVal> antes da palavra to. Não existe
equivalente para "Is < 500" Em lugar disso, você deve usar
um range.

Quando você for usar a declaração case em Delphi, lembre-se que


não pode usar strings, somente números para comparação. Se você
precisar comparar uma série de strings, você terá de criar um
conjunto de declarações if..then. Existe, entretanto, um tipo de
dados em Delphi chamado char o qual é um caracter. Por isso ele
pode ser representado como um número, isso possibilita o uso da
declaração case para comparar valores char. Em outras palavras,
olhe o exemplo abaixo:
var

C:Char;

begin

Case C of

'A':

DoSomething;

'B', 'D'..'G':

DoSomethingElse;
23

end;
Se você precisa comparar séries de strings, você precisará de fazer
um conjunto de declarações if..then em vez de usar o case.

Loops
Como em qualquer linguagem de programação, existem dois tipos
diferentes de loops, determinado e indeterminado. A diferença
simplesmente se você sabe o número de vezes que você quer que o
loop seja executado antes que continue a execução do código. O loop
determinado em Visual Basic é o For..Next, existe uma construção
similar em Delphi chamada loop for. Para os loops indeterminados
em VB você tem o While..Wend e o Do..Loop. Em Delphi, você tem o
while e o repeat..until.

O loop For
Como no Visual Basic, o loop for permite qye você execute um bloco
de código um número predeterminado de vezes. A sintaxe é muito
similar. Em VB, você deve ter alguma coisa como:
For X = 1 To 10

A = A + X

Next

Enquanto em Delphi o mesmo pode ser representado por:


for X := 1 To 10 do
A := A + X;

As duas diferenças são a palavra-chave do no fim da declaração for e


não usar o Next o qual define o fim do bloco de código. Em outras
palavras se você tem mais de uma operação a executar ficará da
seguinte forma:
for X := 1 To 10 do
begin

A := A + X;

Caption := IntToStr(X);

end;
onde o bloco begin..end define as linhas do loop.

Em Visual Basic, você pode usar a palvra-chave Step para especidicar


o incremento pelo qual a variável (i.e. X) deverá ser mudada. Isso é
usado para contar mais do que um em um (i.e. Step 5) ou para criar
24

um decremento (i.e. Step -1). Enquanto não existe forma de criar um


encremento maior que um em Delphi, é possível criar um contator
em decremento com a palavra-chave downto. Observe o exemplo:
for X := 10 downto 1 do
begin

A := A + X;

Caption := IntToStr(X);

end;
Onde X inicia em 10 e decresce até 1. Como no Visual Basic, loops
em Delphi podem ser aninhados.

The Do Loop
A funcionalidadde da construção Do..Loop em Visual Basic é provida
pelo Delphi's através do loop repeat..until. Olhe o exemplo em VB:
Do

K = I Mod J

I = J

J = K

Loop Until J = 0

Observe o exemplo em Delphi


repeat

K := I Mod J;

I := J;

J := K;

until J = 0;
Neste exemplo, é importante observar que o operador de comparação
em Delphi é o sinal =, e não := usado para atribuição. Outro fato que
você pode observar é que não foi usado o par begin..end. Isto
ocorreu porque o loop repeat..until substituiu as declarações begin
e end. Este é o único loop que trabalha desta forma. Todos os outros
loops são defnidos na primeira linha e usam o par begin..end para
múltiplas linhas de código.

The While Loop


O loop repeat, com o loop Do, faz o teste de condição depois do
código ser executado uma vez. Algumas vezes você quer testar a
condição antes para que o código não seja executado nenhuma vez.
25

Em Delphi, como noVisual Basic, isso é feito com o loop while. Siga o
exemplo em VB:
While CanDraw = True

A = A + 1

Wend

Agora em Delphi
while CanDraw = True do
A := A + 1;

Onde, como no loop for, não existe um terminador para o loop.


Entretanto, se você quer executar um bloco de código, use o par
begin..end.Olhe o exemplo em VB:
While Not Eof(1)

Line Input #1, Text

Process Text

Wend

Em Delphi:
while not Eof(InFile) do
begin

ReadLn (InFile, Text);

Process (Text);

end;
Como você pode ver, existem estruturas comuns entre as linguagens
facilitando a transição entre elas.

Manipulação de String
O Delphi tem um tipo de variável string, isso trás algumas restrições
que você deve saber.Primeiro, o tamanho é limitado em 255
caracteres e não é usado diretamente quando se chama uma função
da API requerendo um LPSTR.

Uma String Delphi pode ser usada como se usa em Visual Basic em
termos de atribuição (literais cercados por aspas simples),
concatenação e comparação. Existem algumas rotinas de
manipulação de strings em Delphi que são similares às do VB:
Visual Basic Delphi
Str IntStr, Str
26

Val StrToInt, Val


Len Length
Instr Pos
Mid Copy
Ucase UpperCase
Lcase LowerCase
Format Format

Uma string Delphi pode ser tratada como um array de caracteres


tornando certos processos de procura e substituição mais fáceis. Em
Delphi use esta sintaxe:
OpFlag := TButton(Sender).Caption[1];

para determinar o primeiro caracter de uma string numa variável do


tipo char. Lembre-se que você não pode usar a declaração case com
uma string mas você pode usá-la com um caracter simples. Esta
declaração permite que você recupere o primeiro caracter de uam
string para usar numa declaração case.

Igualmente, se você precisar de criar um LPSTR para passar à uma


função API, você pode construir uma numa string e passar o
endereço dela, dessa forma:
procedure TForm1.Button1Click(Sender: TObject);
var

S:String;

begin

S := 'Hello World'#0;

MessageBox (0, @S[1], 'Test', 0);

end;
O Tipo de dado em Delphi que corresponde ao LPSTR em C é o PChar
o qual é um ponteiro para um array de caracteres. Existem uma série
de funções desenvolvidas para manipular um PChar para atribuição,
concatenaçãoe comparação Procure por "String-handling routines
(null-terminated)" no Help on line. O código acima implementado,
usando PChars, ficaria desta forma:
procedure TForm1.Button1Click(Sender: TObject);
var

P:PChar;

begin

P := StrAlloc (256);
27

StrPCopy (P, 'Hello World!');

MessageBox (0, P, 'Test', 0);

StrDispose (P);

end;
Observe que não precisa explicitar o uso de um caracter nulo na
atribuição, você pode usar StrAlloc para criar uma string maior de
255 caracteres e finalmente você não necessita usar o simbolo @
quando passar um PChar para uma função API, porque o PChar já é
definido como um ponteiro.

Arrays
Arrays são usadas em Delphi da mesma forma que são em Visual
Basic. O código VB para criar um array é da seguinte forma:
Dim MyArr (10, 1 To 5) As Integer

a mesma definição em Delphi deve ser:


MyArr: array [0..10, 1..5] of Integer;

Em Delphi você deve definir os limites do array.

É possível passar um array para uma procedure que não conhece


quantos elementos estão contidos no array de forma muito
semelhante como é feito em Visual Basic. Observe o seguinte código
em Visual Basic:
Dim MyArr (1 to 10) As Integer

Sub Set2Zero (A() As Integer)

Dim i As Integer

For i = LBound (A) to UBound (A)

A(i) = 0

Next

End Sub

Sub Command1_Click ()

Set2Zero MyArr()

End Sub

Em Delphi:
var

MyArr: array [1..10] of Integer;


28

procedure Set2Zero (A:array of Integer);


var

i:Integer;

begin

for i := Low(A) to Hight(A) do

A[i] := 0;

end;
procedure TForm1.Command1Click (Sender: TObject);
begin

Set2Zero (MyArr);

end;
Esta sintaxe aumenta a flexibilidade na criação e chamada à
procedures genéricas.

Procedures and functions


Em Delphi, como em Visual Basic, você pode criar procedures antes
de realizá-las na forma de event handlers. Você vem usando
subrotinas (conhecidas como procedures em Delphi) todas as vezes
que você executa um duplo click em um objeto para criar um event
handler. Uma sintaxe genérica para uma procedure em Delphi é:
procedure MyProc (P1:Type; P2:Type);
var {optional}
begin

{code}

end;
Bem similar a:
Sub MyProc (P1 As Type, P2 As Type)

Dim... 'optional

{code}

End Sub
29

A diferença chave é que os parametros na definição da procedure são


separadas com ponto e vírgula em. E ainda, tenha em mente que a
definição de variáveis locais requer a o uso da clausula Var.

As funções em Delphi também são similares às funções em VB:


Function MyFunc (P1 As Integer, P2 As Long) As Integer

Dim...

'Code

MyFunc = ...

End Function

Isso é equivalente a:
function MyFunc (P1:Integer; P2:LongInt):Integer;
var

begin

{Code}

MyFunc := ...

end;
Uma diferença fundamental é que o Delphi requer a declaração da
procedure antes de usá-la, diferente do Visual Basic.
procedure OtherProc (P1:Integer);forward;
procedure MyProc;
begin

OtherProc (37);

end;
procedure OtherProc (P1:Integer);
begin

DoSomethingTo (P1);

end;
Outra diferença importante é que os parametros são passados por
valor (default) nas procedure e funções do Delphi, enquanto são
passadas por referência em Visual Basic. Delphi dá a você a
flexibilidade de escolher o que for melhor para suas necessidades.
30

Para definir um parametro como referência, use a palavra chave var


na definição da procedure, como no exemplo abaixo:
procedure MyProc(var P1 as Integer);
begin

end;
Escopo das procedures e funcões é similar ao escopo das variáveis.
Todas as procedures definidas na seção implementation de uma
unit são locais para aquela unit. Todas que são declaradas na seção
interface (todas são implementadas na seção implementation) são
disponibilizadas para todas as units inclusas na clausula uses.

O seguinte código é um unit completa chamada VBFUNC que contém


uma função QBColor desenvolvida para imitar a funcionalidade de
outra função chamada VB.
unit VBFUNC;
interface

uses Graphics; {location of TColor def}


function QBColor (n:Integer):TColor; {mentioning
here makes it public}
implementation

function QBColor (n:Integer):TColor;


var

C:TColor;

begin

case n of
0: C := 0;

1: C := 8388608;

2: C := 32768;

3: C := 8421376;

4: C := 128;

5: C := 8388736;

6: C := 32896;

7: C := 12632256;

8: C := 8421504;
31

9: C := 16711680;

10: C := 65280;

11: C := 16776960;

12: C := 255;

13: C := 16711935;

14: C := 65535;

15: C := 16777215;

end;
QBColor := C;

end;
end.

Arrays de Controles
Enquanto o conceito de array de controles não existe em Delphi, sua
funcionalidade (e muito mais) estão disponíveis para você. Existem
dois motivos para se criar um array de controles em Visual Basic. O
primeiro é quando múltiplos controles compartilham o mesmo código.
Isso pode ser realizado pela simples atribuição do mesmo event
handler, como o evento OnClick, para os múltiplos compontentes de
um form Delphi. O segundo é quando você quer criar vários
componentes "on the fly". Estes dois casos são mais do que possíveis
em Delphi.

Você pode, por exemplo, criar um form com três botões. Em Visual
Basic, eles todos deveriam ter o mesmo nome B e diferentes indices.
Pode poderia então escrever o seguinte código:
Sub B_Click (Index As Integer)

Caption = B(i).Caption

End Sub

Se você quer executar a mesma tarefa em Delphi, você deverá criar


três botões e dar a eles nomes como B_1, B_2 e B_3. Você deverá
criar um event handler para um deles chamado B e atribuí-lo aos
event handler dos outros dois. O event handler deverá parecer com
isso:
procedure TForm1.BClick(Sender:TObject);
begin
32

Caption := TButton(Sender).Caption;

end;
Deve ficar claro que o parâmetro "Sender" refere-se ao componente o
qual ativou o event handler. Exatamente como você usa o parametro
Index do Visual Basic para diferenciar entre os controles qual chamou
o event handler, você usa o Sender para determinar a origem do
evento em Delphi.

O tipo de dado do Sender é simplesmente TObject o qual pode ser


atribuido a qualquer coisa em Delphi. Entretanto, um button, um text
box e um check box podem compartilhar o mesmo event handler em
Delphi, algo que nao é possível em Visual Basic. O único preço desta
flexibilidade é que você deve dizer ao compilador como tratar este
TObject "lançando-o" a um objeto mais baixo na hierarquia. A sintaxe
deste lançamento é muito parecida com uma função onde você
simplesmente usa o nome da classe como o nome da função e o
TObject com o parâmetro simples. Isso diz ao Delphi para tratar
temporariamente o TObject como um TButton. Você poderia
continuar continuar o lançamento desta variável conforme sua
necessidade. Se você quiser um código um pouco mais elegante,
você pode atribuir a uma variável local o tipo TButton desta forma:
procedure TForm1.BClick (Sender:TObject);
var

Source:TButton;

begin

Source := TButton(Sender)

Caption := Source.Caption;

end;
Dynamic Control Arrays

Outra razão para usar um array de controles em Visual Basic é para a


criação de controles "on the fly" baseado na informação de run-time.
Em VB Você deve criar um template e então construir cópias deste
template. Você não tem este tipo de limitação em Delphi. Você pode
criar qualquer objeto "on the fly" e atribuir event handlers a eles
dinamicamente.

No exemplo em VB, ARRAY.FRM no diretório


\vb\samples\controls\controls.mak, existe um botão de opção
33

chamado optButton com o index 0 que usa um template na procedure


cmdAdd_Click:
Sub cmdAdd_Click ()

If MaxId = 0 Then MaxId = 1

If MaxId > 8 Then Exit Sub

MaxId = MaxId + 1

Load OptButton(MaxId)

OptButton(MaxId).Top = OptButton(MaxId - 1).Top + 400

OptButton(MaxId).Visible = True ' Display new button.

OptButton(MaxId).Caption = "Option" & MaxId + 1

End Sub

A rotina em Delphi compatível seria:


procedure TForm1.cmdAddClick(Sender: TObject);
var

rbOld, rbNew: TRadioButton;

begin

if nCtl = 0 then

nCtl := 1

else

Inc(nCtl);

if nCtl < 16 then begin


rbOld := TRadioButton(FindComponent ('optButton_' + IntToStr (nCtl -
1)));

rbNew := TRadioButton.Create(Self);

rbNew.Parent := Self;

rbNew.SetBounds (rbOld.Left, rbOld.Top + rbOld.Height * 2,

rbOld.Width, rbOld.Height);

rbNew.Caption := 'Option' + IntToStr(nCtl);

rbNew.Name := 'optButton_' + IntToStr(nCtl);

rbNew.OnClick := optButton_0Click;

end;
end;
34

Neste código inicialmente se parece com o exemplo em Visual Basic:

1 Configurar o rbOld como o último componente criado.

Isto é executado com uma função muito útil chamada FindComponent


o qual pega o valor de uma string. Tente isso no VB!

1 rbNew é criado

2 rbNew é colocado no form

3 rbNew é movido para um novo lugar

4 rbNew's caption é configurado

5 rbNew's name é configurado!

6 rbNew's OnClick handler é dinamicamente atribuido para


optButton_0Click handler!

O resultado é exatamente o mesmo que no código do Visual Basic. O


optButton_Click handler em VB parece com:
Sub optButton_Click (Index As Integer)

picDisplay.BackColor = QBColor(Index + 1)

End Sub

Em Delphi:
procedure TForm1.optButton_0Click(Sender: TObject);
var

i:Integer;

rb:TRadioButton;

begin

rb := TRadioButton(Sender);

Caption := rb.Name;

i := StrToInt (Copy (rb.Name, 11, 2));

shpDisplay.Brush.Color := QBColor (i);

end;
A grande diferença é a ausência do parâmetro Index, vocês estão
extraindo o último caracter do caption para pegar o valor do index.
Esta é apenas uma técnica para Array de controles. Por exemplo, a
propriedade Tag em Delphi é um long integer maior que uma string.
Então as duas rotinas podem ser vistas como:
35

procedure TForm1.cmdAddClick(Sender: TObject);


var

rbOld, rbNew: TRadioButton;

begin

if nCtl = 0 then
nCtl := 1

else

Inc(nCtl);

if nCtl < 16 then begin


rbOld := TRadioButton(FindComponent ('optButton_' + IntToStr (nCtl -
1)));

rbNew := TRadioButton.Create(Self);

rbNew.Parent := Self;

rbNew.SetBounds (rbOld.Left, rbOld.Top + rbOld.Height * 2,

rbOld.Width, rbOld.Height);

rbNew.Caption := 'Option' + IntToStr(nCtl);

rbNew.Name := 'optButton_' + IntToStr(nCtl);

rbNew.Tag := QBColor (nCtl); {this is new}

rbNew.OnClick := optButton_0Click;

end;
end;
procedure TForm1.optButton_0Click(Sender: TObject);
begin

shpDisplay.Brush.Color := TRadionButton(Sender).Tag;

end;
No exemplo acima, o valor atual da cor é armazenado na propriedade
Tag, por isso que todas rotinas optButton_0Click precisam ser
configuradas com a mesma cor da propriedade Tag do Sender.

Finalmente, os elementos do array de controle são removidos de


maneira similar ao Visual Basic:
Sub cmdDelete_Click ()

If MaxId = 1 Then Exit Sub ' Keep first two buttons.


36

Unload OptButton(MaxId) ' Delete last button.

MaxId = MaxId - 1 ' Decrement button count.

OptButton(0).SetFocus ' Reset button selection.

End Sub

Em Delphi:
procedure TForm1.cmdDeleteClick(Sender: TObject);
var

rb:TRadioButton;

begin

if nCtl > 0 then


begin

rb := TRadioButton (FindComponent ('optButton_' + IntToStr(nCtl)));

rb.Destroy;

Dec(nCtl);

end;
end;
Outro exemplo de array de controles pode ser encontrado no exemplo
CALC.DPR no diretório [VBSAMPL].

Object Variables
Object variables é um novo conceito para o Visual Basic, embora se
tenha visto como parâmetro em procedures no Delphi e VB. Outra
maneira de manipular um conjunto de controles como um array no
VB é criando um array de type control e colocá-lo no Form_Load
como:
Dim T (1 To 10) As TextBox

Sub Form_Load ()

Dim c As Integer

Dim i As Integer

i = 1

For c = 0 to Form1.Controls.Count -1

If TypeOf Form1.Controls (c) is TextBox then

Set T(i) = Form1.Controls(c)


37

i = i + 1

end if

Next

End Sub

Pode-se, então, "andar" pelo array e configurar as propriedades de


todos os controles para um certo valor, exatamente como um array
de controle. O mesmo exemplo em Delphi:
var

i, c:Integer;

begin

i := 1;

for c := 0 to form1.componentcount -1 do
if Form1.Components[c] Is TEdit then
begin

T[i] := TEdit(Form1.Components[c]);

Inc (i);

end;
end;
Object variables são também usado em Visual Basic para criar
múltiplas instâncias em forms usando o New keyword. Veja o
exemplo em VB:
Sub cmdNextInstance_Click ()

Dim NextInstance As New frmMain

NextFormNum = NextFormNum + 1

NextInstance.Caption = "Instance # " & NextFormNum

NextInstance.Left = Left + (Width \ 10)

NextInstance.Top = Top + (Height \ 10)

NextInstance.Show

End Sub

Funcionalidade similar em Delphi:


procedure TfrmMain.cmdNewInstanceClick(Sender:
TObject);
38

var

F:TfrmMain;

begin

F := TfrmMain.Create(Application);

Inc(NextFormNum);

F.Caption := 'Instance #' + IntToStr(NextFormNum);

F.Left := Left + (Width div 10);

F.Top := Top + (Height div 10);

F.Visible := True;

end;
Com excessão do método .Create, este código é praticamente
identico ao código usado em Visual Basic.

Delphi, Delphi 2.0, Borland International, and the Delphi logos are either
trademarks or registered trademarks of Borland International.
All other trademarks are the sole property of their respective owners.
39