Apostila Ilustrada Delphi.doc

download Apostila Ilustrada Delphi.doc

of 46

Transcript of Apostila Ilustrada Delphi.doc

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    1/46

    ndice

    1. O QUE DELPHI? ............................................................................................................................... 2

    2. COMO FORMADO UMA APLICAO EM DELPHI ................................................................ 2

    2.1A

    RQUIVOS QUEC

    OMPEM UMA

    PLICAO............................................................................................. 32.2CDIGO FONTE DO ARQUIVO PROJECT(.DPR) ............................................................. ............................. 4

    2.3CDIGO FONTE DO ARQUIVO UNIT (.PAS) ........................................................................................ ....... 4

    3. JANELAS ............................................................. ................................................................. .................. 6

    3.1CODE EDITOR(EDITOR DE CDIGO) ........................................................................................................ 63.2FORM (FORMULRIO) ...................................................... ................................................................. ....... 63.3OBJECT INSPECTOR(INSPETOR DE OBJETOS) .......................................................................................... 73.4COMPONENT PALETTE(PALHETA DE COMPONENTES) ............................................................................. 73.5ALIGNMENT PALETTE(PALHETA DE ALINHAMENTO) ............................................................................... 8

    4. ORIENTAO A OBJETOS ....................................................................... ........................................ 9

    4.1EVENTOS ................................................................................................................................................. 9

    4.2PROPRIEDADES...................................................................................................................................... 104.3MTODOS .............................................................................................................................................. 12

    5. APPLICATION .............................................................. ................................................................. ..... 13

    5.1MTODOS: ............................................................ ................................................................. ................ 135.2PROPRIEDADES: ............................................................... ................................................................. ..... 13

    6. MDI APPLICATION ..................................................... ................................................................. ..... 13

    6.1USANDO O MODELO DE APLICAO MDI ............................................................................. ................ 136.2EXEMPLO MDI ..................................................... ................................................................. ................ 14

    7. TRABALHANDO COM BANCO DE DADOS ................................................................................. 19

    7.1BDE .......................................................... ................................................................. ........................... 197.2ARQUITETURA DO BANCO DE DADOS DO DELPHI .................................................................................. 197.3ARQUITETURA DOS COMPONENTES DE BANCO DE DADOS ............................................................... ..... 207.4PALETA DE COMPONENTES DA PGINA DE ACESSO DE DADOS ......................................................... ..... 207.5PALETA DE COMPONENTES DA PGINA DE CONTROLE DE DADOS ......................................................... 217.6USANDO DATASETS .............................................................................................................................. 21

    8. A LINGUAGEM SQL ............................................................... ........................................................... 27

    8.1COMANDOS DE MANIPULAO DE DADOS ............................................................................................ 278.2OPERADORES......................................................................................................................................... 278.3EXPRESSES.......................................................................................................................................... 278.4FUNES ............................................................................................................................................... 288.5EXEMPLOS............................................................................................................................................. 28

    8.6CONSTRUINDO UMA CONSULTA DINAMICAMENTE ................................................................ ................ 299. CONSTRUINDO RELATRIOS COM O QUICKREPORT ......................................................... 30

    9.1QUICKREPORT BSICO .......................................................................................................................... 309.2CRIANDO RELATRIOS .......................................................................................................................... 31

    10. ARQUIVOS DE INICIALIZAO....................................................................... ........................... 34

    10.1OOBJETO TINIFILE.............................................................................................................................. 3410.2CRIANDO UM ARQUIVO DE CONFIGURAO ........................................................................................ 3410.3LENDO O ARQUIVO DE CONFIGURAO............................................................................................... 3410.4MODIFICANDO UM ARQUIVO .INI ........................................................ ................................................ 3510.5OUTRAS OPERAES COM ARQUIVOS .INI ............................................................... ........................... 3510.6MANIPULAO DE ARQUIVOS ............................................................................................................. 36

    11. CRIANDO HELP ..................................................... ................................................................. ..... 37

    11.1VISO GERAL...................................................................................................................................... 3711.2ESCRENDO OS TPICOS ........................................................................................................................ 37

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    2/46

    1

    11.3INSERINDO NOTAS DE RODAP............................................................................................................. 3711.4ADICIONANDO UM HOTSPOT AO TPICO .............................................................................................. 3711.5CRIANDO UM HOTSPOT PARA UMA JANELA POP-UP .............................................................. ................ 3711.6SE FOR USAR UM TPICO DE OUTRO ARQUIVO DE HELP: ....................................................... ................ 3811.7ESCREVENDO ARQUIVO DE PROJETO: ............................................................ ...................................... 3811.8COMPILANDO O ARQUIVO DE HELP: ................................................................ ..................................... 3911.9INSERINDO GRFICOS EM UM TPICO: ............................................................ ...................................... 39

    11.10CRIANDO UM HOT SPOT PARA UMA JANELA SECUNDRIA ............................................................ ..... 3911.11TORNANDO O ARQUIVO DE HELP SENSVEL AO CONTEXTO ........................................................... ..... 4011.12CHAMADAS AO ARQUIVO DE HELP..................................................................................................... 40

    12. EXCEES ....................................................... ................................................................. ................ 41

    12.1AESTRUTURA TRYFINALLYEND ................................................................................................. 4112.2AESTRUTURA TRYEXCEPTEND .................................................................................................. 4112.3EXCEES SILENCIOSAS ...................................................................................................................... 42

    13. DICAS ................................................................................................................................................. 43

    13.1CRIAO DE MDICHILD...................................................................................................................... 4313.2FORM EXISTE ...................................................................................................................................... 4313.3CRIAO SHOWMODAL....................................................................................................................... 44

    13.4FECHARTODAS ................................................................................................................................... 4413.5RELGIO E TECLADO ........................................................................................................................... 4413.6INFORMAES SISTEMA ...................................................................................................................... 45

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    3/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    4/46

    3

    2.1 A rquiv os que Com pem um A pl icao

    2.1.1 Arquivos Gerados no desenvolvimento

    Extenso Arquivo Definio Funo.DPR Arquivo do Projeto Cdigo fonte em Pascal do arquivo principal doprojeto. Lista todos os formulrios e units noprojeto, e contm cdigo de inicializao daaplicao. Criado quando o projeto salvo.

    .PAS Cdigo fonte da Unit( ObjectPascal)

    Um arquivo .PAS gerado por cada formulrioque o projeto contm. Seu projeto pode conter umou mais arquivos .PAS associados com algumformulrio. Contem todas as declaraes e

    procedimentos incluindo eventos de umformulrio.

    .DFM Arquivo grfico do formulrio Arquivo binrio que contm as propriedades dodesenho de um formulrio contido em um projeto.Um .DFM gerado em companhia de umarquivo .PAS para cada formulrio do projeto.

    .OPT Arquivo de opes do projeto Arquivo texto que contm a situao corrente dasopes do projeto. Gerado com o primeirosalvamento e atualizado em subsequentesalteraes feitas para as opes do projeto.

    .RES Arquivo de Recursos doCompilador

    Arquivo binrio que contm o cone, mensagensda aplicao e outros recursos usados pelo

    projeto..~DP Arquivo de Backup do Projeto Gerado quando o projeto salvo pela segunda

    vez..~PA Arquivo de Backup da Unit Se um .PAS alterado, este arquivo gerado.

    .~DF Backup do Arquivo grfico doformulrio

    Se voc abrir um .DFM no editor de cdigo efizer alguma alterao, este arquivo gerandoquando voc salva o arquivo.

    .DSK Situao da rea de Trabalho Este arquivo armazena informaes sobre asituao da rea de trabalho especifica para o

    projeto em opes de ambiente( OptionsEnvironment).

    Obs.: .~DF, .~PA , .~DP so arquivos de backup( Menu Options, Enviroment, Guia Editor Display, Caixade 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 emum diretrio especfico.

    2.1.2 Arquivos Gerados pela Compilao

    Extenso Arquivo Definio Funo.EXE Arquivo compilado executvel Este um arquivo executvel distribuivel de sua

    aplicao. Este arquivo incorpora todos osarquivos .DCU gerados quando sua aplicao compilada. O Arquivo .DCU no necessriodistribuir em sua aplicao.

    .DCU Cdigo objeto da Unit A compilao cria um arquivo .DCU para cada.PAS no projeto.

    Obs.: Estes arquivos podem ser apagados para economizar espao em disco.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    5/46

    4

    2.2 Cdigo fon te do arquiv o Project(.DPR)

    Nesta arquivo est escrito o cdigo de criao da aplicao e seus formulrios. O arquivo Projecttem apenas uma seo.

    Esta seo formada pelo seguinte cdigo:

    PROGRAM - Define o Projeto;USES - Clusula que inicia uma lista de outras unidades.

    Forms = a unidade do Delphi que define a forma e os componentes do aplicativoIn = A clausula indica ao compilador onde encontrar o arquivo Unit.Unit1 = A unidade que voc criou

    {$R *.RES} - Diretiva compiladora que inclui o arquivo de recursos.

    Abaixo veja como fica o Project quando voc abre um projeto novo:

    program Project1;

    usesForms,Unit1 in 'UNIT1.PAS' {Form1};

    {$R *.RES}

    beginApplication.CreateForm(TForm1, Form1);Application.Run;

    end.

    2.3 Cdigo fon te do arquiv o Unit (.PAS)

    Nesta divisria sero escritos os cdigos dos seus respectivos forms (Unit1 = Form1). Aquisero definidos os cdigos de cada procedimento dos componentes que voc colocar no form.

    2.3.1 Seo Unit

    Declara o nome da unit.

    2.3.2 Seo UsesContm as units acessadas por este arquivo.

    2.3.3 Seo InterfaceNesta 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 peloseguinte 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 WindowsWintypes= tipos de dados e valores constantesMessages=constantes com os nmeros das mensagens do Windows e tipos de dados dasMensagensClasses=elementos de baixo nvel do sistema de componentesGraphics=elementos grficosControls=elementos de nvel mdio do sistema de componentesForms=componentes de forma e componentes invisveis de aplicativosDialogs=componentes de dilogo comuns

    2.3.4 Seo TypeDeclara os tipos definidos pelo usurio. Subsees: Private, declaraes privativas da Unit.

    Public declaraes publicas da Unit.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    6/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    7/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    8/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    9/46

    8

    3.5 Al ignmen t Palet te(Palheta de Al inhamento)

    Outras: Browser, BreakPoints, CallStack, Watches, Component List e Windows List.

    Obs.: Devido a grande quantidade de janelas interessante que se tenha no mnimo a resoluo de vdeo800X600, para se ter espao para o desenvolvimento.

    Espaos iguais nahorizontalCentralizahorizontalmente na janelaAlinhamentohorizontal

    Alinha para o cantoesquerdo

    Alinha para o cantodireito

    Alinha para cimaAlinha para baixo

    Alinha Centralizandona vertical

    Espaos iguais na verticalCentraliza verticalmentena janela

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    10/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    11/46

    10

    4.2 Pro priedades

    Como vimos, eventos podem estar associados a modificaes em propriedade de componente eformulrio, ou seja, voc pode modificar propriedades de formulrios e componentes durante a execuodo sistema. Para isto voc dever usar a sintaxe:

    .;

    Por exemplo, para modificar a propriedade textde uma caixa de edio Edit1 para Bom Diafaa:

    Edit1.Text := Bom Dia;

    Se a propriedade do componente tiver subpropriedades, para acessa-l, utilize a seguinte sintaxe:

    ..

    Por exemplo, para modificar a subpropriedade Name referente a propriedade fonte, de uma caixade 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.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    12/46

    11

    4.2.1 Consultando Propriedades e Eventos de um componente.

    ComponenteSelecionado

    Tipo do Componente

    Nome do Componente

    Propriedades do Objeto Selecionado

    Eventos do ObjetoSelecionado

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    13/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    14/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    15/46

    14

    O Formulrio Filho modelo, de nome MDIChild, ligado a unit Childwin, apresenta o seguinte aspecto:

    Obs.: A diferena entre os dois formulrios esta na propriedade FormStyle, onde a MainForm est comofsMDIForm(Pai) e ChildWin como fsMDIChild (Filho).

    6.2 Exemp lo MDI

    6.2.1 Projeto.DPRprogram Projeto;uses

    Forms,Principa in 'PRINCIPA.PAS' {FrmPrincipal},Cadastro in 'CADASTRO.PAS' {FrmCadastro};

    {$R *.RES}begin

    Application.CreateForm(TFrmPrincipal, FrmPrincipal);Application.Run;

    end.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    16/46

    15

    6.2.2 Principa.DFM

    6.2.3 Principa.PASunit Principa;

    interface

    uses WinTypes, WinProcs, SysUtils, Classes, Graphics, Forms, Controls,Menus,StdCtrls, Dialogs, Buttons,Messages, ExtCtrls, Cadastro;

    (* Aqui eu declaro as janelas filha *)

    typeTFrmPrincipal = 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;

    procedure FormCreate(Sender: TObject);procedure WindowCascadeItemClick(Sender: TObject);procedure WindowTileItemClick(Sender: TObject);procedure WindowArrangeItemClick(Sender: TObject);procedure MenArquivoSairClick(Sender: TObject);procedure WindowMinimizeItemClick(Sender: TObject);procedure TimTempoTimer(Sender: TObject);procedure MenArquivoCadastroClick(Sender: TObject);

    private{ Private declarations }procedure ShowHint(Sender: Tobject);Function Formexiste(nomejanela:Tform):boolean;

    public{ Public declarations }FrmCadastro : TFrmCadastro; (* Declara a varivel que vai receber

    a janela caso voc mude seu nome*)

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    17/46

    16

    end;

    varFrmPrincipal: TFrmPrincipal;

    implementation

    {$R *.DFM}

    Function TForm1.Formexiste(Nomejanela:TForm):boolean;var

    I : integer;begin

    Formexiste := false;for i := 0 to componentcount - 1 do

    if Components[i] is TForm thenif TForm(Components[i])= nomejanela then

    Formexiste := trueend;

    procedure TFrmPrincipal.FormCreate(Sender: TObject);begin

    Application.OnHint := ShowHint;ContaCadastro := 0; (* Zero a variavel contadora da janela quando

    eu crio o formulario principal *)end;

    procedure TFrmPrincipal.ShowHint(Sender: TObject);begin

    PanlinhaStatus.Caption := Application.Hint;end;

    procedure TFrmPrincipal.MenArquivoSairClick(Sender: TObject);begin

    Close;end;

    procedure TFrmPrincipal.WindowCascadeItemClick(Sender: TObject);

    beginCascade;

    end;

    procedure TFrmPrincipal.WindowTileItemClick(Sender: TObject);begin

    Tile;end;

    procedure TFrmPrincipal.WindowArrangeItemClick(Sender: TObject);begin

    ArrangeIcons;end;

    procedure TFrmPrincipal.WindowMinimizeItemClick(Sender: TObject);

    varI: Integer;begin

    for I := MDIChildCount - 1 downto 0 doMDIChildren[I].WindowState := wsMinimized;

    end;

    procedure TFrmPrincipal.TimTempoTimer(Sender: TObject);begin

    Pantempo.caption:= timetostr(now)+ ' - ' + Datetostr(date)+ ' ';end;

    procedure TFrmPrincipal.MenArquivoCadastroClick(Sender: TObject);beginIf Formexiste(FrmCadastro) = false then (* Se for falso ento cria a

    janela *)BeginScreen.Cursor := CrHourGlass; (* Coloca o cursor na forma de uma

    ampulheta *)

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    18/46

    17

    FrmCadastro := TFrmCadastro.Create(Self); (*Cria a janela filhae atribui a varivel declarada *)

    EndElse

    If Formexiste(Frmcadastro) = true then (* Se for tentar abrir ajanela e ela ja estiver sido criada *)

    BeginFrmCadastro.WindowState := WsNormal; (* Se estiver minimizada

    restaura *)FrmCadastro.BringToFront; (*Se estiver atrs, coloca na frente*)FrmCadastro.Setfocus; (* Coloca o foco na janela *)

    End;end;end.

    Obs.: No menu para colocar separadores coloca - no caption, de um item do menu. Para sublinhar a letra do item de menu que vai ser o atalho coloque o & antes da letra

    escolhida, isto tambm aplicado a outros componentes como os buttons, radiogrupou eoutros.

    Para abrir um Sub-Menu pressione a tecla Control e a seta para direita no item que fornecessrio o Sub-Menu.

    Separador

    Sub-Menu

    Atalho para o Menu

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    19/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    20/46

    19

    7. Trabalhando com Banco de Dados

    7.1 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 capacidadesadicionais alm do database engine (como o Delphi tambm o faz), mas isso longe de dizer que o valoragregado destes recursos adicionais maior de 2 % das capacidades - os outros 98% so providos pelodatabase 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 dadosiro fazer chamadas. Cada estao de trabalho que tiver a aplicao de banco de dados instalada deverter, tambm, o BDE instalado ( o Delphi vem com a instalao do BDE para voc adicionar a suaaplicao).

    O BDE permite a voc usar tabelas dBase, Paradox ou ODBC em modo multi-usurio. A versoCliente/Servidor do Delphi tambm vem com links para servidores de banco de dados como Oracle,Sybase, MS SQL Server, Informix, e InterBase.

    7.2 Arq uitetura do Banco de Dados do Delphi

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    21/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    22/46

    21

    7.5 Paleta de Componen tes da pgin a de Con trole de Dados

    Componente UtilidadeTDBNavigator Botes de navegao para controle de dados que move o apontador do registro

    corrente de uma tabela para o posterior ou anterior, inicia insero ou modo deedio; confirma novos ou modificaes de registros; cancela o modo de edio;e refresca(refaz) a tela para recuperar dados atualizados.

    TDBText Rtulo de controle de dados que pode mostrar um campo corrente do registroativo.

    TDBEdit Caixa de edio de controle de dados que pode mostrar ou editar um campocorrente do registro ativo.

    TDBCheckBox Caixa de verificao de controle de dados que pode mostrar ou editar dadoslgico de uma campo corrente do registro ativo.

    TDBListBox Caixa de Lista de controle de dados que pode mostrar valores da coluna de uma

    tabela.TDBComboBox Caixa de Lista mvel de controle de dados que pode mostrar ou editar valores

    da coluna de uma tabela.TDBRadioGroup Grupos de radio de controle de dados com botes de rdio que pode mostrar ou

    setar valores de colunas.

    TDBGrid Grade padro de controle de dados que possibilita visualizar e editar dados deforma tabular, semelhante a uma planilha; faz uso extensivo das propriedades doTField (estabelecidos no Editor de Campos(Fields Editor)) para determinar avisibilidade de uma coluna, formato da visualizao, ordem, etc.

    TDBMemo Caixa memo de controle de dados que pode mostrar ou editar dados textosBLOB do registro corrente ativo.

    TDBImage Caixa de Imagem de controle de dados que pode mostrar, cortar ou colar

    imagens BLOB bitmaps do registro corrente ativo.TDBLookupList Caixa de Lista de controle de dados que mostrar valores mapeados atravs deoutra tabela em tempo de compilao.

    TDBLookupCombo Caixa de Combo de controle de dados que mostrar valores mapeados atravs deoutra tabela em tempo de compilao.

    7.6 Usand o 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.

    7.6.1 Estados do DataSet

    Estado DescriodsInactive O Dataset esta fechado.

    dsBrowse Estado de Espera. O estado default quando um dataset aberto. Registrospode ser visualizados mas no mudados ou inseridos.

    dsEdit Habilita o a linha corrente para ser editada.

    dsInsert Habilita uma nova linha para ser inserida. Uma chamada para o Post inserir anova linha.

    dsSetKey Habilita FindKey, GotoKey, and GoToNearest para procurar valores nastabelas do banco de dados. Estes mtodos somente pertencem para ocomponente TTable. Para TQuery, a procura feita com a syntax do SQL.

    dsCalcFields Modo quando os OnCalcFields executado; previne qualquer mudanapara outros campos ou campos calculados. Raramente usadoexplicitamente.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    23/46

    22

    7.6.2 Diagrama de Estados do Dataset

    7.6.3 Usando os Eventos do DataSource

    7.6.3.1Evento StateChangeprocedure TForm1.DataSource1.StateChange(Sender:TObject);var S:String;begin

    case Table1.State ofdsInactive: S := 'Inactive';dsBrowse: S := 'Browse';dsEdit: S := 'Edit';dsInsert: S := 'Insert';dsSetKey: S := 'SetKey';

    end;

    Label1.Caption := S;end;

    procedure Form1.DataSource1.StateChange(Sender: Tobject);

    begin

    InsertBtn.Enabled := (Table1.State = dsBrowse);

    CancelBtn.Enabled := Table1.State in [dsInsert, dsEdit,dsSetKey];

    ...

    end;

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    24/46

    23

    7.6.4 Abrindo e Fechado DataSetsAntes que uma aplicao possa acessar dados atravs de um dataset, o dataset deve ser aberto.

    Existem dois meios para abrir o dataset:- Ativando a propriedade Active para True, isto pode ser feito atravs do Object Inspector ou

    programavelmente em tempo de execuo.Table1.Active := True;

    - Chamando o mtodo do Dataset Open em tempo de execuo.Table1.open;

    Para fechar o processo e semelhante s muda o a propriedade paraFalse e o evento para Close;

    7.6.5 Navegando no DatasetPropriedades e Mtodos de Navegao

    Mtodo ou Propriedade DescrioMtodo First Move o cursor para a primeira linha em um dataset.Mtodo Last Move o cursor para a ultima linha em um dataset.Mtodo Next Move o cursor para a prxima linha em um dataset.

    Mtodo Prior Move o cursor linha anterior em um dataset.Propriedade BOF True quando o cursor est no inicio do dataset, em outro caso false.Propriedade EOF True quando o cursor est no final do dataset, em outro caso false.Mtodo MoveBy(n) Move o cursor para n linhas a frente em um dataset, quando n um

    numero inteiro positivo ou negativo.

    Exemplo:Table1.Last; (* Move o cursor para o ltimo registro da tabela *)Table1.Next; (* Move o cursor para o prximo registro da tabela *)

    7.6.6 Modificando dados no Dataset

    Os seguintes mtodos habilitam uma aplicao para inserir, atualizar, e deletar dados no dataset.

    Mtodo DescrioAppend Comfirma qualquer dado pendente e move um registro em branco para o final

    do dataset, e coloca o dataset em estado de Insert.

    Cancel Cancela a operao corrente e coloca o dataset em estado de Browse.Delete Apaga o registro corrente e coloca o dataset em estado de Browse.DeleteTable Apaga uma tabelaEdit Coloca o dataset em estado de edio. Se um dataset j est estado de Edit ou

    Insert, uma chamada para Edit no tem efeito.

    EmptyTable Esvazia uma tabela.Insert Confirma qualquer dado pendente, e coloca o dataset em estado de insero.Post Tentativa para confirmar um registro novo ou alterado. Se sucesso, o dataset e

    colocado em estado de Browse; se insucesso, o dataset fica no estado corrente.

    Refresh Atualiza a viso do banco de dados.

    7.6.7 Lendo Valores do CampoExistem algumas maneiras de ler dados de um dataset:

    1.Edit1.text := Table1Nome_Clie.asstring;2.Edit1.text := Table1.Fields[1].asstring;3.Edit1.text := Table1.FieldByName(Nome_Clie).asstring;

    Para associar outros tipos de campos que no texto a uma caixa de edio (que s aceita valoresdo tipo string), devemos utilizar propriedades de converso do componente TField: AsBoolean,AsDataTime, AsFloat (Real), AsInteger, AsString.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    25/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    26/46

    25

    Exemplo de outra forma de procura em uma tabela.

    procedure TSearchDemo.SearchExactClick(Sender: TObject);begin

    Table1.SetKey; {Primeiro campo a chave}Table1.Fieldbyname(Cidade) := Edit1.Text;Table1.GoToKey;

    end;

    Procura em um indce secundrio.

    procedure TSearchDemo.SearchExactClick(Sender: TObject);beginTable1.indexname := Nome_Clie;Table1.open;Table1.setkey;Table1Nome_clie.asstring := Edit1.text;Table1.gotonearest;

    end;

    Procura em um indce primrio ou secundrio.

    procedure TSearchDemo.SearchExactClick(Sender: TObject);

    beginTable1.indexfieldnames := Codi_Clie;Table1.open;Table1.setkey;Table1Nome_clie.asstring := Edit1.text;Table1.gotonearest;

    end;

    7.6.10 Filtrando Registros em uma TabelaVoc pode filtar registros de uma tabela atravs de mtodos especficos:

    SetRangeStart: Estabelece o limite inicial do filtro. SetRangeEnd: Estabelece o limite final do filtro. ApplyRange: Aplica o filtro tabela. CancelRange: Cancela o filtro aplicado tabela. KeyExclusive: Exclui a chame do indce setado.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.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    27/46

    26

    7.6.11 ndices de uma Tabela

    Mtodo DescrioGetIndexNames Retorna uma lista de nomes disponiveis de ndeces para uma tabela do banco de

    dados.

    IndexFieldCount Nmero de Campos do ndice.IndexFields Vetor de nomes de campos usados no ndiceIndexName Para usar o ndice primrio de uma tabela Paradox.IndexFieldNames Para muda o ndice para qualquer campo.

    As propriedades IndexName e IndexFieldNames so mutualmente exclusivas. Colocando umapropriedade, limpa o valor da outra.

    7.6.12 Sincronizando TabelasO mtodo GotoCurrent um mtodo que sincroniza dois componentes table ligados a uma

    mesma tabela em um banco de dados e usando o mesmo indce.

    Table1.GotoCurrent(Table2);

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    28/46

    27

    8. A Linguagem SQLA 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 bancode dados relacional.

    Comercialmente implementada pela IBM, se tornou um padro de linguagem de acesso a dadosem 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 queatendam 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 Comeandopela letra A da tabela de Clientes sejam exibidos na tela:

    Select *From ClientesWhere Nome=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 adeterminadas tabelas. Comandos para a Manipulao de Dados: servem para manipular os dados contidos nas

    tabelas.

    8.1 Com and os d e Manip ul ao de Dado s

    8.1.1 UpdateAtualiza registros.

    8.1.2 DeleteDeleta Registros

    8.1.3 SelectRecupera registros que satisfaam a uma condio.

    8.1.4 InsertInsere um novo registro.

    8.2 Operadores

    Podemos usar o seguintes operadores: Aritimticos + , - , * , / Comparao: = , >,

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    29/46

    28

    8.3.2 WhereEspecifica uma condio.

    8.3.3 Group BySepara os registros pelo grupo especificado.

    8.3.4 HavingEstabelece a condio que cada grupo deve atender.

    8.3.5 Order ByEspecifica a ordenao dos registros selecionados. Pode-se usar ainda o parmetros

    ASC(Ascendente) e DESC (Descendente)

    8.3.6 DistinctRetira as repeties

    8.4 Fu nes

    Podemos ainda, especificar as seguintes funes: COUNT (Contador); 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);

    8.5 Exemp los1) Select *

    From Clientes

    Seleciona todos(*) os campos de todos registros da tabela clientes.

    2) Select Codigo,NomeFrom ClientesWhere Codigo > 10 And Codigo < 200

    Seleciona os campos Cdigo e Nome da tabela Clientes para os registros que tenham os campoCdigo > (Maior) que 10 e

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    30/46

    29

    5) Select *From Fornecedores, ProdutosWhere Fornecedores.Codigo = Produtos.Codigo

    Seleciona todos os campos e registros das tabelas de Fornecedores e Produtos que tenham ocampo codigo de Fornecedores igual ao campo Codigo de Produtos.

    6) Select *

    From ClientesWhere Nome Like S*

    Seleciona todos os campos e registros da tabela de Clientes cujo o campo Nome comece pelaletra S.

    7) Update FuncionariosSet Salario = Salario * 1.2

    Atualiza o campo Salario de todos os registros da tabela de Funcionarios para o contedo atualmultiplicado por 1.2 (aumento de 20%).

    8) Update FuncionariosSet Salario = Salario * 1.2Where Cargo = Diretor

    Atualiza o campo Salario de todos os registros da tabela de Funcinarios que campo Cargo sejaigual a Diretor para o contedo atual multiplicado por 1.2 (aumento de 20%).

    9) Delete From ProdutosWhere Codigo > 5 And Codigo < 20

    Apaga todos os registros da tabela Produtos para Codigo >(maior) que 5 e < (menor) que 20.

    8.6 Const ru indo uma Consul ta Dinamicamente

    Procedimento para criar construir uma consulta em SQL dinamicamente.

    Query1.Close; {Fecha a query}Query1.SQL.Clear; {Limpa o contedo da propriedade SQL}Query1.SQL.Add(Select *); {Adiciona}Query1.SQL.Add(From Country);Query1.SQL.Add(Where Name = Argentina );Query1.Open; {Abre e executa a Query}

    8.6.1 Passando ParmetrosConteudo da Propriedade SQL da Query1:

    Select *From CountryWhere Name Like :NomeRegiao

    Procedure TForm1.ButtonClick(Senderl: Tobject);Begin

    Query1.close;Query1.Params[0].AsString := edit1.text;Query1.open;

    end;

    Para NomeRegiao e passado o contedo de Edit1.text.Obs.1:

    Query1.open; = Query1.ExecSQL;

    Obs.2:Para caregar de um arquivo texto:Query1.SQL.LoadFromFile(C:\MYQUERY.TXT);

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    31/46

    30

    9. Construindo Relatrios com o QuickReportO Presente trabalho tem como objetivo demostrar os procedimentos para criar relatrios em

    programas feitos em Delphi utilizando o QuickReport. O Delphi 1.0 j possui um gerador de relatrios oReportSmith que perde em desempenho e desenvoltura em relao ao QuickReport, alm de necessitar desua instalao prvia quando da sua utilizao. Por ser um programa a parte torna-se muito lento emrelao a o QuickReport que uma biblioteca de componentes que passa a fazer parte da aplicaoquando da sua utilizao aps a compilao.

    9.1 Qu ic kRep or t bsic o

    QuickReport um gerador de relatrios por banda. Seu relatrio construdo em cima de vriostipos de banda, onde so colocados componentes visveis como campos de banco de dados, rtulos,imagens e outros componentes imprimveis.

    Objetos do QuickReport na Barra de Ferramentas do Delphi.

    9.1.1 Componentes do QuickReport.

    9.1.1.1QuickReport

    Este o componente principal do QuickReport, pois ele transforma a form padro em umrelatrio.

    9.1.1.2QRBand

    Voc constri seus relatrios com diferentes QRBands e colocando componentes visveis decontrole do QuickReport sobre ela. Existem diferentes tipos de bandas, como banda de detalhes, bandade cabealho, banda de rodap e outras.

    9.1.1.3QRGroup

    Existe duas maneiras de imprimir relatrios mestre/detalhes com o QuickReport. Um usar umcomponente TQuery ligado com um Query(Consultas) e QRGroups para grupos de datas, a outra

    QRShape

    QRSysData

    QRDBCalc

    QRDBText

    QRMemo

    QRLabel

    QRDetailLink

    QRGroup

    QRBand

    QuickReport

    QRPreview

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    32/46

    31

    maneira usar o componente DetailLink combinado com bandas DetailGroup. Cada mtodo tem o mesmoresultado. Se voc tiver necessidade de relatrios mestres/detalhes com mais de duas camadas ento useQRGroup e TQuery ter uma probabilidade de ser melhor desempenho.

    9.1.1.4QRDetailLink

    QRDetailLink o segundo caminho para criar relatrios mestre/detalhes no QuickReport.Tipicamente voc usaria QRDetailLink com TTables (ou TQueries) quando voc tem somente dois nveis

    de conexo. A fora do QRDetailLink contudo, que voc pode ter muitas tabelas detalhes.

    9.1.1.5QRLabel

    O Componente QRLabel usado para mostrar textos em um relatrio. A propriedadeCaption(Ttulo) pode ser alterado em alguns eventos durante a preparao do relatrio. Se vocnecessitar um texto para sada de um campo de dados use o componente QRDBText.

    9.1.1.6QRMemo

    O Componente QRMemo utilizado montar linhas que precisam ser composta por vrios itensde dados ou textos que precisem ser digitados para compor o relatrio.

    9.1.1.7QRDBTextO Componente QRDBText uma controle de texto de dados cliente. Texto conectado com um

    campo de banco de dados.

    9.1.1.8QRDBCalc

    Este componente automatiza processos de soma e contagem de campos de dados. Em adio paraesta propriedade o QRDBCalc tem todas a propriedades e eventos herdados do QRDBText.

    9.1.1.9QRSysData

    O Componente QRSysData mostra vrias informaes do sistema. Em adio para aspropriedade do QRSysData tem-se todos os componentes que o QRLabel tem, exceto a propriedadeCaption.

    9.1.1.10QRShape

    QRShape usado para mostrar linhas simples e figuras em um relatrio.

    9.1.1.11QRPreview

    QRPreview usado para criar uma form de pr visualizao. Este componente mostra todas assadas de uma visualizao do preview atual. Para chamar sua prpria form de pr visualizao ao invsde usar uma form padro com QuickReport atribuindo o evento QRPrinter.OnPreview. Neste evento voctraz sua prprio form a qual deve conte o componente QRPreview. Voc no pode selecionar que pgina

    para visualizar usando a propriedade PageNumber.

    9.2 Criand o RelatriosQuickReport 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, evoc usa neste componente os mtodos PRINT e PREVIEW para criar seu relatrio. No tente usar emum relatrio os mtodos de form SHOW ou SHOWMODAL. Uma Form relatrio nunca dever ser emsua aplicao o form principal.

    9.2.1 Relatrio de lista SimplesCriar um relatrio de lista simples do contedo de uma tabela ou uma consulta muito fcil. Siga

    as instrues passo a passo a seguir para criar um relatrio listando todos os clientes de DBDemos. A

    tabela clientes est includa no Delphi.

    1. Criar um novo projeto com um form e sobre um nico form. Esta sua principal forma deaplicao. Salvar unidade do form como MAINFORM e a aplicao como QRTEST.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    33/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    34/46

    33

    3. Adicione um componente TDataSource para o relatrio. Nomeie ele OrdersDS e coloque apropriedade DataSet para OrdersTable

    4. Adicione um TQRBand para o relatrio. Coloque a propriedade BandType para rbSubdetail. Nomeieele para OrdersDetailBand.

    5.

    Adicione um componente TQRDetailLink para o relatrio. Coloque a propriedade DataSource paraOrdersDs. Coloque a propriedade DetailBand para OrderDetailBand. Coloque a propriedade Masterpara REP.

    6. Coloque um componente TQRDBText sobre o OrdersDetailBand. Coloque a propriedade DataSourcepara OrdersDS e a Propriedade DataField para OrderNo.

    7. Duplo clique no componente QuickReport para visualizar o relatrio.

    Se voc desejar mais tabelas de detalhes voc dever repetir os passos 3 a 7 para cara tabela dedetalhes que voc ira incluir. Para mudar a ordem de impresso reorganize a ordem de criao doscomponentes TQRDetailink. As Tabelas de detalhes so imprimidas na ordem correspondente com a

    criao dos componentes TQRDetailink.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    35/46

    34

    10. Arquivos de Inicializao

    10.1 O Objeto TInif i le

    Para manipular arquivos .INI, o Delphi oferece o objeto Tinifile. O Objeto TIniFile, declarado naunit 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.

    10.2 Crian do um Ar qu ivo de Con fig ur ao

    Use o mtodo Create para criar memria para um objeto do tipo TIniFile, passando comoparmetros o nome do arquivo a ser criado.

    NomeObjeto := TIniFile.Create(NomedoArquivo.INI);

    Pode ser informado o junto ao nome o caminho de onde se encontra o arquivo, mas o padro armazenar o arquivo .INI no subdiretrio do Windows.

    Para criar as sees, as entradas e os valores das entradas, utilize os seguintes mtodos: WriteBool - Para criar um valor booleano;

    WriteInteger - Para criar um valor inteiro; WriteString - Para criar uma string.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, comduas sees: Opcoes (com duas entradas) e Configuracao (com uma entrada):

    Procedure TForm1.Button1Click(Sender:TObject);Var

    IniJogo : TIniFile;

    BeginIniJogo := 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 oseguinte formato:

    [Opcoes]Som=1Nivel=3

    [Configuracao]Nome=Oliveira

    Quando voc for distribuir sua aplicao, no esquea de oferecer o arquivo .INI. Outra opo criar oarquivo .INI atravs de um programa de instalao do seu aplicativo, oferecendo ao usurio a

    possibilidade de personalizar o arquivo .INI ja na instalao.

    10.3 Len do o Ar qu ivo de Con fig ur ao

    Quando seu aplicativo for executado, deve ler o arquivo .INI existente. Isto pode ser feito, porexemplo, no evento OnCreate do Formulrio, ou na seo Inicialization.

    Para ler um arquivo .INI, utilize os mtodos: ReadBool - Para ler uma entrada com valores booleanos; ReadInteger -Para ler uma entrada com valores inteiros; ReadString -Para ler uma entrada com valores string.Atribua o resultado da leitura a variveis globais (criadas na clusula var da seo interface da

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    36/46

    35

    unit do formulrio principal), que podem ser utilizadas por toda a aplicao, quando necessrio. Noesquea de adicionar a unit do formulrio principal a clusula uses da seo implementation quando forutilizar as variveis.

    O exemplo abaixo l as entradas do arquivo NOVOJOGO.INI, mostrando para o usurio emLabels:

    VarForm1 : Tform1;Vsom : Boolean;Vnivel : Integer;Vnome : String;IniJogo : Tinifile;

    Implementation

    {$R *.DFM}

    Procedure TForm1.FormCreate(Sender:TObject);Begin

    Label1.Caption := Nvel+InttoStr(Vnivel);If Vsom then

    Label2.Caption := Som Ligado);else

    Label2.Caption := Som Desligado);Label3.Caption := Nome : + Vnome;

    End;

    InitializationBegin

    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;

    10.4 Modif icand o um Arqu ivo .INI

    Voc pode utilizar os mtodos WriteString, WriteBool e WriteInteger para modificar as entradasde um arquivo .INI j existente. Por exemplo o formato de mode estabelecido no WIN.INI, seo [Intl],entrada sCurrency, para R$:

    Procedure TForm1.Button1Click(Sender:TObject);Var

    IniMoeda : TIniFile;Begin

    IniMoeda := TIniFile.Create(WIN.INI);IniMoeda.WriteString(Intl,sCurrency,R$); IniMoeda.Free;

    End;

    10.5 Outr as Operaes com A rqu ivo s .INI

    Atravs do mtodo ReadSection, voc l todas as entradas de um seo de um arquivo .INI paraum objeto da classe Tstring, como ListBox, ComboBox ou Memo:ReadSection(Const Seo:String; ListaEntradas: TStrings);

    A constante Seo determina a seo que ser lida. O parmetro ListaEntradas corresponde aoobjeto do tipo TString que armazenar as entradas (por exemplo, ListBox1.Items).

    Atravs do mtodo ReadSectionValues, voc l todas as entradas e seus valores de uma seo doarquivo .INI para um objeto da classe TString, como ListBox, ComboBox ou Memo:

    ReadSectionValues(Const Seo:String; ListaEntradas: TStrings);

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    37/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    38/46

    37

    11. Criando HELP

    11.1 Viso Ger al

    Inicialmente voc cria os tpicos do help em um arquivo texto, atravs de um editor de textosconvencional (word).

    A parte, cria outro arquivo texto (HPJ) contendo informaes sobre o arquivo de Help para ocompilador.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.

    11.2 Escrend o os tpicos

    Para criar o arquivo Help, utilize um editor de textos que permita a gravao em um arquivoRTF, 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.

    11.3 Inser ind o notas de rodap

    Voc precisa inserir em seus tpicos notas customizadas para que o Win Help possa identificar ecriar 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 entretpicos.

    $ : Ttulo. Aparece como ttulo do tpico da caixa Procura. Normalmente igual ao atributo dotpico.

    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. Oidentificador pode ser um membro (01) ou um nome de grupo seguido de um sinal de dois

    pontos (:) e um membro (doc:01).

    11.4 Adic ionando um Hotspot ao tpico

    Um hotspot uma palavra ou grfico que se clicado leva a um outro tpico.

    Para criar um hotspot: Digite o texto ou insira o grfico que voc quer que seja o hotspot; Selecione o texto e aplique o formato duplo sublinhado a ele; Imediatamente aps o texto ou grfico hotspot, digite a string de contexto do tpico do

    destino; Selecione a string de contexto, e aplique o fundo de texto oculto a ele.Depois de compilado aparecer sublinhado, em verde.

    11.5 Criando um hotsp ot para uma janela po p-up

    Para criar um hotspot para um tpico do mesmo arquivo de help, mostrando este tpico em umajanela pop-up.

    Formate a palavra que ser o hotspot com um sublinhado simples; Imediatamente aps esta palavra digite o nome da string de contexto que representa o tpico,

    mudando seu formato para oculto.

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    39/46

    38

    11.6 Se for usar um tpico de outro arquivo de help:

    Formate a palavra que ser o hotspot com sublinhado simples; Imediatamente aps a palavra, digite o nome da string de contexto que representa o tpico,

    mudando seu formato para oculto; Digite um @; Digite o nome do arquivo de help que contm o tpico a ser acessado.

    Ex.: Criando um novo [email protected]

    11.7 Escrevendo Arqu ivo de Projeto:

    O arquivo de projeto um arquivo texto contendo informaes que o compilador de Help usapara construir o arquivo de Help. O arquivo de projetopode incluir muitas instrues que controlamaspectos do arquivo help.

    Para escrever um arquivo de projeto para o Help:

    Crie um arquivo texto. D a ele o mesmo nome que voc gostaria que fosse dado ao seu arquivode help compilado, acrescentando a extenso .HPJ.

    Adicione as seguintes linhas ao aruqivo (existem outras sees alm das expostas abaixo).

    [OPTIONS]CONTENSTS = String_ContextoTITLE = TtuloCOMPRESS = Nvel_de_CompressoERRORLOG = Nome_do_arquivo_log[CONFIG]Browse Buttons()[FILES]NomeArquivoRTF_1NomeArquivoRTF_2NomeArquivoRTF_3

    Onde:

    String_Contexto: a string de contexto do tpico de contedos. Esta linha no requerida. Sevoc no inclui-la, o Winhelp usar o primeiro tpico do primeiro arquivo como tpico de contedos.

    Ttulo: o nome que aparece na Barra de Ttulo da janela de Help. No coloque entre aspas.

    Nvel_de_compresso: Determina quanto arquivo comprimido quando ele compilado. Estalinha no requerida. Se voc a deixar em branco, compilar o arquivo sem compresso. Os valores

    podem ser:

    Valor Compresso--------- --------------

    False Sem compressoMedium Mdia compressoHigh Alta compresso

    Nome_do_arquivo_log: o nome de um arquivo onde os erros ocorridos durante a compilaos armazenados. A linha no requerida. Se voc no determinar o arquivo, os erros sero mostrados natela.

    Se voc incluir a linha BrowseButtons() os botes >> (prximo) e

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    40/46

    39

    11.8 Compi lando o arquivo de Help:

    H dois compiladores de Help para Windows 3.1:

    HCP.EXE HC31.EXE , HC31.ERRQuando 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.Para compilar o arquivo de Help no prompt do dos:

    nome_do_compilador nome_arquivo_de_projeto

    11.9 Inserin do grfico s em um tpico :

    Voc pode inserir grficos como si,mples ilustres, como um Hotspot ou como hipergrfico(grfico contendo diversos hot spots).

    Os bitmaps devem se encontrar no diretrio do arquivo de projeto.

    No arquivo RTF deve ser inserido a seguinte referncia:

    {bmc bitmap.bmp} ou{bml bitmap.bmp}

    11.10 Criand o um Ho t Spot para uma janela secun dria

    Para criar um hot spot para um tpico mostrado em uma janela secundria: Formate a palavra que ser o hot spot com um sublinhado duplo. Imediatamente aps esta palavra, digite o nome da string do contexto que representa o tpico,

    mudando seu formato para oculto. Digite um > Digite o nome da janela secundriaO nome, tamanho e posio da janela secundria precisam ser definidos na seo [WINDOWS]

    do arquivo projeto do Help.

    [WINDOWS]nome_da_janela = "ttulo", (x, y, largura, altura), tamanho, (clientRGB),(nonscrollRGB), (ftop)

    Por exemplo:

    [WINDOWS]Jan1 = "Exemplo", (123,123,256, 256), 0, (0,255,255), (255,0,0)

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    41/46

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    42/46

    41

    12. Excees

    12.1A Estrutura TryFinallyEnd

    Seu cdigo precisa garantir que, mesmo ocorrendo um erro, os recursos alocados sejamdesalocados. Entre estes recursos esto: arquivos, memria, recursos do Windows, objetos.

    Para garantir a desalocao dos recursos, usamos a estrutura abaixo:

    {Aloca os recursos}Try

    {Comandos que usam os recursos}Finally

    {Libera os recursos}end;

    A aplicao sempre executar os comandos inseridos na parte Finally do bloco, mesmo que umaexeceo 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 soexecutados.

    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:

    Procedure TForm1.Button1Click(Sender:TObject);Var

    Apointer : Pointer;AnInteger, Adividend : Integer;

    BeginAdividend := 0;GetMem(Apointer, 1024);Try

    Aninteger := 10 Div Adividend;Finally

    FreeMem(Apointer, 1024);

    End;End;

    12.2A 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

    {Comandos que voc deseja proteger}Except

    {Comandos de tratamento de erros}

    end;

    A aplicao ir executar os comandos na parte except somente se ocorrer um erro. Se na partetry voc chamar uma rotina que no trata erros, e um erro ocorrer, ao voltar para este bloco a parte exceptser executada. Uma vez que a aplicao localiza um tratamento para exceo ocorrida, os comandos soexecutados, 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 deexceo. Por exemplo, o cdigo abaixo trata o erro de diviso por zero, atravs da exceo EDivByZero:

    Function Diviso (Soma, Numero : Integer) : Integer;Begin

    TryResult := Soma div Numero;

    Excepton EDivByZero do Result 0;

    End;End;

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    43/46

    42

    A palavra reservada on define respostas para uma exceo. On est sempre junto de do, paramanipular a exceo.

    Para ler informaes especficas sobre o erro ocorrido, voc usa uma variao da estruturaondo, 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

    on E:EInvalidOperation doMessageDlg(gnorando a exceo : +E.Message,mtinformation,[mbOk],0);

    End;

    Onde a varivel temporriaE do tipoEInvalidOperation.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}

    Excepton EPrimeiroTipo do

    {Cdigo especifico para o primeiro tipo de erro]on ESegundoTipo do

    {Cdigo especfico para o segundo tipo de erro}Else{Cdigo padro de tratamento de erros}

    End;

    Alm disso, voc pode utilizar as excees genricas para tratar um erro, em vez de uma exceoespecfica. Por exemplo, se voc quer tratar um erro relacionado a uma operao com inteiros, mas nosabe exatamente o erro, poder utilizar a exceo EIntError, que a exceo genrica da qual derivamoutras excees relacionadas a inteiros:

    Try{Comandos}

    Excepton EIntError do{Cdigo de tratamento de erros}

    End;

    12.3 Exc ees Silen cio sas

    Voc pode definir excees que no mostram um quadro de mensagem para o usurios quandoaparecem. So chamadas excees sileciosas.

    O caminho mais curto para criar esta exceo atravs da procedure Abort. Esta procedureautomaticamente gera uma exceo do tipoEAbort, que abortar a operao sem mostrar uma mensagem.

    O exemplo abaixo aborta a operao de incluso de itens em um ListBox quando tentamos inseriro terceiro elemento:

    BeginFor i := 1 to 10 do

    beginListBox1.items.Add(IntToStr(i));If i = 3 then

    Abort;end;

    End;

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    44/46

    43

    13. Dicas

    13.1 Cr iao de MDICh il d

    procedure TForm1.Teste1Click(Sender: TObject);

    beginif formexiste(Form2)= false thenbegin

    Screen.Cursor := CrHourGlass; {Cursor ampulheta}Form2 := TForm2.Create(Self);

    end;else

    begin {Traz a janela para frente}Form2.WindowState := WsNormal;Form2.BringToFront;Form2.Setfocus;

    end;end;

    Obs1.:

    interface

    uses {Declarao da unit da form a ser criada}SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,Controls, Forms, Dialogs, Menus, unit2, StdCtrls;

    Obs2.:

    public{ Public declarations }Form2 : Tform2; {Declarao da janela a ser criada}

    end;

    Obs3.:{Na form Filha criada}procedure TForm2.FormCreate(Sender: TObject);begin

    Screen.Cursor := CrDefault; {Cursor na forma normal}end;

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);begin

    Action := cafree; {Libera da memria a janela}end;

    13.2 Form ExisteFunction TForm1.Formexiste(Nomejanela:TForm):boolean;var

    I : integer;begin

    Formexiste := false;for i := 0 to componentcount - 1 do

    if Components[i] is TForm thenif TForm(Components[i])= nomejanela then

    Formexiste := true

    end;

    Obs.:public

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    45/46

    44

    { Public declarations }Function Formexiste(nomejanela:Tform):boolean;

    end;

    13.3 Cr iao ShowModal

    procedure TForm1.Teste2Click(Sender: TObject);begintry

    Application.CreateForm(TForm3, Form3);Form3.showmodal;

    FinallyForm3.free;

    end;end;

    Obs.:

    interface

    uses {Declarao da unit da form a ser criada}SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,Controls, Forms, Dialogs, Menus, unit3, StdCtrls;

    13.4 Fechar Todasprocedure TForm1.Teste31Click(Sender: TObject);Var

    I: Integer;begin

    for I := MDIChildCount - 1 downto 0 doMDIChildren[I].close;

    end;

    Obs.: Pode ser utilizada para minimizar todas e maximizar todas.

    13.5 Relgio e Tecladoprocedure TForm1.Timer1Timer(Sender: TObject);begin

    {Atualiza a hora do Relgio }label1.caption:=timetostr(now)+' - '+Datetostr(now)+ ' ';

    {Atualiza o Painel de Teclas}if (GetKeyState(vk_NumLock) and $01) 0 then

    Label2.Caption := ' Num ' {Tecla NumLock}else

    Label2.Caption := '';if (GetKeyState(vk_Capital) and $01) 0 thenLabel3.Caption := ' Cap ' {Tecla CapsLock}

    elseLabel3.Caption := '';

    if (GetKeyState(vk_Insert) and $01) 0 thenLabel4.Caption := ' Ins ' {Tecla Insert}

    elseLabel4.Caption := '';

    end;

  • 7/22/2019 Apostila Ilustrada Delphi.doc

    46/46

    13.6 Info rm aes Sis tem aprocedure TForm2.FormCreate(Sender: TObject);type

    FlagSet = set of 120..135;var

    Flgs : FlagSet;

    L : Longint;s : String;beginimage1.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;If L and WF_Enhanced = 0 then

    modo.caption := 'Modo Standard';If L and WF_80x87 = 0 then

    coprocessador.caption := 'Ausente';

    memoria.caption:=FormatFloat('#######',MemAvail DIV 1024) + ' KB Livres';

    {---------- Processador --------------}

    l := GetWinFlags;Flgs := FlagSet(Word(l));s := 'unknown';if 121 in Flgs then

    s:= '286';if 122 in Flgs then

    s:= '386';if 123 in Flgs then

    s:= '486 ou Pentium';Processador.Caption:= s;

    {--------- GDI Recursos -------------}

    l := GetFreeSystemResources(gfsr_GDIResources);gauge1.progress := l;

    {--------- User Recursos -------------}

    l := GetFreeSystemResources(gfsr_UserResources);gauge2.progress := l;

    {--------- Espao Disco -------------}

    l:= (DiskFree(0) div 10240) div (DiskSize(0) div 1024000);Label18.Caption:= IntToStr(DiskFree(0) div 1024000) +

    +' MB ';gauge3.progress := l;end;

    Referncia

    http://www.samnet.com.br/inforsite

    http://www.samnet.com.br/inforsitehttp://www.samnet.com.br/inforsite