Aptdelph

download Aptdelph

of 65

Transcript of Aptdelph

  • 8/14/2019 Aptdelph

    1/65

    Tubaro / Santa Catarina / BRAZILE-Mail : [email protected]

    http://www.geocities.com/wallstreet/5693

  • 8/14/2019 Aptdelph

    2/65

    ndice

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

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

    2.1 ARQUIVOSQUE COMPEMUM APLICAO.........................................................................................................2.2 CDIGOFONTEDOARQUIVO PROJECT(.DPR).....................................................................................................2.3 CDIGOFONTEDOARQUIVO UNIT (.PAS).........................................................................................................

    3. JANELAS...................................................................................................................................................

    3.1 CODE EDITOR(EDITORDE CDIGO).................................................................................................................3.2 FORM (FORMULRIO).....................................................................................................................................3.3 OBJECT INSPECTOR(INSPETORDE OBJETOS).......................................................................................................3.4 COMPONENT PALETTE( PALHETADE COMPONENTES)...........................................................................................3.5 ALIGNMENT PALETTE(PALHETADE ALINHAMENTO).............................................................................................

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

    4.1 EVENTOS.......................................................................................................................................................4.2 PROPRIEDADES...............................................................................................................................................4.3 MTODOS......................................................................................................................................................

    5. APPLICATION.................................................................................................................................... ......

    5.1 MTODOS:.....................................................................................................................................................5.2 PROPRIEDADES:..............................................................................................................................................

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

    6.1 USANDOO MODELODE APLICAO MDI.........................................................................................................6.2 EXEMPLO MDI..............................................................................................................................................

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

    7.1 BDE............................................................................................................................................................7.2 ARQUITETURADO BANCODE DADOSDO DELPHI................................................................................................7.3 ARQUITETURADOS COMPONENTESDE BANCODE DADOS.....................................................................................7.4 PALETADE COMPONENTESDAPGINADE ACESSODE DADOS...............................................................................7.5 PALETADE COMPONENTESDAPGINADE CONTROLEDE DADOS...........................................................................7.6 USANDO DATASETS........................................................................................................................................

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

    8.1 COMANDOSDE MANIPULAODE DADOS..........................................................................................................8.2 OPERADORES.................................................................................................................................................8.3 EXPRESSES...................................................................................................................................................8.4 FUNES.......................................................................................................................................................8.5 EXEMPLOS.....................................................................................................................................................

    8.6 CONSTRUINDOUMA CONSULTA DINAMICAMENTE.................................................................................................9. CONSTRUINDO RELATRIOS COM O QUICKREPORT........................................................ ......

    9.1 QUICKREPORTBSICO.....................................................................................................................................9.2 CRIANDO RELATRIOS.....................................................................................................................................

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

    10.1 O OBJETO TINIFILE......................................................................................................................................10.2 CRIANDOUM ARQUIVODE CONFIGURAO......................................................................................................10.3 LENDOO ARQUIVODE CONFIGURAO............................................................................................................10.4 MODIFICANDOUM ARQUIVO .INI...................................................................................................................10.5 OUTRAS OPERAESCOM ARQUIVOS .INI.......................................................................................................10.6 MANIPULAODE ARQUIVOS.........................................................................................................................

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

    11.1 VISO GERAL..............................................................................................................................................11.2 ESCRENDOOSTPICOS...................................................................................................................................

    2

  • 8/14/2019 Aptdelph

    3/65

    11.3 INSERINDONOTASDERODAP.........................................................................................................................11.4 ADICIONANDOUM HOTSPOTAOTPICO............................................................................................................11.5 CRIANDOUMHOTSPOTPARAUMAJANELAPOP-UP..............................................................................................11.6 SEFORUSARUMTPICODEOUTROARQUIVODEHELP:.......................................................................................11.7 ESCREVENDO ARQUIVODE PROJETO:...............................................................................................................11.8 COMPILANDOOARQUIVODE HELP:.................................................................................................................11.9 INSERINDOGRFICOSEMUMTPICO:...............................................................................................................

    11.10 CRIANDO

    UM

    HOT

    SPOT

    PARA

    UMA

    JANELA

    SECUNDRIA

    ..................................................................................11.11 TORNANDOOARQUIVODE HELPSENSVELAOCONTEXTO..................................................................................11.12 CHAMADASAOARQUIVODE HELP.................................................................................................................

    12. EXCEES..............................................................................................................................................

    12.1 A ESTRUTURA TRYFINALLYEND.............................................................................................................12.2 A ESTRUTURA TRYEXCEPTEND..............................................................................................................12.3 EXCEES SILENCIOSAS.................................................................................................................................

    13. DICAS.......................................................................................................................................................

    13.1 CRIAODE MDICHILD...............................................................................................................................13.2 FORM EXISTE..............................................................................................................................................13.3 CRIAO SHOWMODAL................................................................................................................................

    13.4 FECHARTODAS............................................................................................................................................13.5 RELGIOE TECLADO....................................................................................................................................13.6 INFORMAES SISTEMA.................................................................................................................................

    14. BIBLIOGRAFIA......................................................................................................................................

    3

  • 8/14/2019 Aptdelph

    4/65

    1.O queDelphi?

    O

    Delphi umambiente de

    desenvolvimento de aplicaes, orientado a objeto, que permite o desenvolvimento de aplicaes para os

    Sistemas operacionais Windows 3.11, Windows 95 e Windows NT, com pouca codificao.O Delphi tem ferramentas de desenvolvimento, como templates e experts de aplicaes eformulrios, que aumentam muito a produtividade, facilitando a programao da aplicao.

    2.Como formado uma Aplicao em DelphiQuando voc abre um projeto no Delphi, ele j mostra uma UNIT com vrias linhas de cdigo.

    Este texto tem como objetivo explicar um pouco desta estrutura que o ele usa. Um projeto Delphi tem,inicialmente, duas divisrias: uma UNIT, que associada a um Form, e outra Project, que engloba todosos FORM e UNITs da aplicao.

    Em Delphi temos: o Project, os Forms e as Units. Para todo Form temos pelo menos uma Unit(Cdigo do Form), mas temos Units sem form (cdigos de procedures, funes, etc).

    4

  • 8/14/2019 Aptdelph

    5/65

    2.1Arquivos que Compem um Aplicao

    2.1.1Arquivos 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 eprocedimentos 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 das

    opes 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 peloprojeto.

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

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

    .~DF Backup do Arquivo grfico do

    formulrio

    Se voc abrir um .DFM no editor de cdigo e

    fizer alguma alterao, este arquivo gerandoquando voc salva o arquivo..DSK Situao da rea de Trabalho Este arquivo armazena informaes sobre a

    situao da rea de trabalho especifica para oprojeto 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.2Arquivos 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.

    5

  • 8/14/2019 Aptdelph

    6/65

    2.2Cdigo fonte do arquivo 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;

    uses

    Forms,

    Unit1 in 'UNIT1.PAS' {Form1};

    {$R *.RES}

    begin

    Application.CreateForm(TForm1, Form1);

    Application.Run;

    end.

    2.3Cdigo fonte do arquivo 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.1Seo UnitDeclara o nome da unit.

    2.3.2Seo Uses

    Contm as units acessadas por este arquivo.

    2.3.3Seo 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 das

    MensagensClasses=elementos de baixo nvel do sistema de componentesGraphics=elementos grficosControls=elementos de nvel mdio do sistema de componentes

    6

  • 8/14/2019 Aptdelph

    7/65

    Forms=componentes de forma e componentes invisveis de aplicativosDialogs=componentes de dilogo comuns

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

    Public declaraes publicas da Unit.

    7

  • 8/14/2019 Aptdelph

    8/65

    2.3.5Seo VarDeclara as variveis privadas utilizadas.

    2.3.6SeoImplementationContm os corpos das funes e procedures declaradas nas sees Interface e Type. Nesta seo

    tambm esto definidos todos os procedimentos dos componentes que esto includos no Form. Asdeclaraes desta seo so visveis apenas por ela mesma. Esta seo formada pelo seguinte cdigo:{$R*.DFM} - Diretiva compiladora que inclui toda a interface, propriedades da forma ecomponentes do arquivo *.DFM{$S+} - Diretiva compiladora que ativa verificao de pilha.

    2.3.7Seo uses adicionalServe para declarar Units que ativam esta.

    2.3.8InicializationNesta seo, que opcional, pode ser definido um cdigo para proceder as tarefas de

    inicializao da Unit quando o programa comea. Ela consiste na palavra reservada inicialization seguida

    por uma ou mais declaraes para serem executadas em ordem.

    2.3.9Exemplo

    Abaixo veja como fica a unit quando voc abre um projeto novo:

    unit Unit1;

    interface

    uses

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

    Forms, Dialogs;

    type

    TForm1 = class(TForm)

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form1: TForm1;

    implementation

    8

  • 8/14/2019 Aptdelph

    9/65

    {$R *.DFM}

    {Uses Adicional}

    {Initialization}

    end.

    9

  • 8/14/2019 Aptdelph

    10/65

  • 8/14/2019 Aptdelph

    11/65

    3.3Object Inspector (Inspetor de Objetos)

    uma ferramenta composta de duas pginas: Properties (Propriedades) e Events (Eventos).

    A pgina Properties([Propriedades) permite que voc estabelea parmetros de formulrios ecomponentes. Estes parmetros especificam os valores iniciais de caractersticas como nome docomponente e sua posio no formulrio.

    A pginas Events (Eventos) permite associar os componentes com aes do usurio.

    3.4Component Palette( Palheta de Componentes)

    composta de vrias pginas contendo cada uma grupos de componentes. Para mudar de pgina

    11

  • 8/14/2019 Aptdelph

    12/65

    na palheta de componentes, clique sobre a aba da pgina que voc quiser acessar.

    12

  • 8/14/2019 Aptdelph

    13/65

  • 8/14/2019 Aptdelph

    14/65

    4.Orientao a ObjetosPor ser baseado no Pascal Object, o Delphi permite que se construa aplicaes orientadas a

    objetos. Em linhas gerais, aplicaes orientadas a objetos se baseiam no conceito de classe. A classe umtipo de dados, contendo atributos e servios. O objeto uma varivel de determinada classe. Porexemplo, um formulrio nada mais do que um objeto da classe Formulrio (Tform). Contm atributos eservios.

    4.1Eventos

    Os programas feitos em Delphi so orientados a eventos. Eventos so aes normalmentegeradas pelo usurio. Ex.: Clicar o mouse pressionar uma tecla, mover o mouse etc. Os eventos podemser tambm gerados pelo windows.

    Existem eventos associados ao formulrio e cada componente inserido neste.Exemplos:

    - Ao formulrio est ligado on create, que ocorre quando mostramos o formulrio na tela.- Ao componente boto est ligado o evento on click, que ocorre quando damos um click com omouse sobre o boto.

    4.1.1Eventos comuns ao formulrio e aos componentes.Alguns eventos ligados tanto ao formulrio quanto aos componentes esto listados a seguir. OnClick:ocorre quando o usurio clica o objeto. OndblClick: ocorre quando o usurio da um duplo clique. OnKeyDown: ocorre quando o usurio pressiona uma tecla enquanto o objeto tem foco. OnKeyUp: ocorre quando o usurio solta uma tecla enquanto o objeto tem o foco. OnKeyPress: ocorre quando usurio da um clique numa tecla ANSI. OnMouseDown: ocorre quando o usurio pressiona o boto do mouse. OnMouseUp: ocorre quando o usurio solta o boto do mouse. OnMouseMove: ocorre quando o usurio move o ponteiro do mouse.

    4.1.2Rotinas que Respondem a EventosCada evento gera uma procedure, aonde voc deve inserir as linhas de cdigo que envolvem este

    evento. Por exemplo, o evento OnClick, que gerado ao clicarmos em um boto chamado BTNSair, criaa procedure:

    Procedure TForm1.BTNSairClick(Sender: Tobject);

    onde Tform1 o objeto Tform que contm o boto BTNSair, e Sender um objeto Tobject que representao componente que deu origem ao evento.

    Se voc quiser inserir uma rotina que trate um determinado evento de um componente, faa o

    seguinte: clique sobre o componente; no Object Inspector, seleciona a pgina Events; d um duplo clique sobre o evento para o qual quer inserir o cdigo; entre no editor de cdigo e escreva as linhas de cdigo.

    Exemplo:

    Procedure TForm1.BTNSairClick(Sender: Tobject);

    begin

    Form1.Close;

    end;

    14

  • 8/14/2019 Aptdelph

    15/65

    Obs.: Escreva seu cdigo entre o begin e o end, se por acaso voc quiser retirar o evento e o componente,retire primeiro os eventos do componente removendo somente o cdigo que voc colocou e depois ocomponente; os resto dos procedimentos o DELPHI tira para voc.

    4.2Propriedades

    Como vimos, eventos podem estar associados a modificaes em propriedade de componente e

    formulrio, ou seja, voc pode modificar propriedades de formulrios e componentes durante a 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.

    15

  • 8/14/2019 Aptdelph

    16/65

    4.2.1Consult

    ando

    Propriedades e Eventos de um componente.

    16

  • 8/14/2019 Aptdelph

    17/65

    Obs.: Cada componente tem sua prpriaspropriedades e eventos, e podem existir propriedadesiguais de um componente para o outro, portanto

    lembre-se das propriedades e eventos comuns entreeles.

    4.3Mtodos

    So procedures ou funes embutidas noscomponentes e formulrios, previamente definidaspelo Delphi.

    Alguns mtodos so descritos a seguir:

    Show : Mostra um formulrio; Hide : Esconde um formulrio mais no o descarrega; Print : Imprime um formulrio na impressora;

    SetFocus : Estabelece o foco para um formulrio ou componente; BringtoFront: Envia para frente.

    4.3.1Chamado de mtodos como resposta a eventos:Um evento pode gerar a chamada para um mtodo, ou seja, uma subrotina previamente definida

    para um componente.No cdigo, para utilizar um mtodo, use a seguinte sintaxe:

    .

    Por exemplo, clicar em um boto pode dar origem ao evento Show de um outro formulrio,mostrando este novo formulrio na tela:

    Form2.show;

    17

  • 8/14/2019 Aptdelph

    18/65

    5.ApplicationSempre que voc processa um projeto DELPHI, o Delphi cria automaticamente o objeto

    Application. Voc tem de trabalhar com propriedades e mtodos desse objeto para poder fazer coisascomo especificar o cone do aplicativo, especificar o nome de arquivo de Help do projeto ou o titulo da

    aplicao.

    5.1Mtodos:

    MessageBox - Exibe uma caixa mensagem padro Windows.Mtodo Minimize - Minimiza o aplicativo a um cone;Mtodo Restore - Restaura o aplicativo ao estado anteriorProcessMessages - Permite ao seu aplicativo deixar o Windows processar eventos para outrosaplicativos.Terminate - Finaliza a aplicao.

    5.2Propriedades:

    ExeName - Traz o nome do executvel que o nome projeto

    HelpFile - Nome de arquivo de Help.Icon - cone da aplicao por completo, sendo que cada janela tem seu prprio cone.Title - Ttulo da aplicao.

    Obs.: Algumas Propriedades podem ser acessadas pelo Menu Options, Opo Project, Guia Application.

    6.MDI ApplicationUma aplicao MDI (Multiple Document Interface) aquela em que vrios formulrios ou

    janelas podem ser abertas em um pai.Exemplos: Word, Excel.

    6.1Usando o Modelo de Aplicao MDI

    Para criar uma aplicao MDI automaticamente:Ative a galeria de projetos, atravs do Menu Options, opo Environment, guia preferences,

    marcando a opo Use on New Project, do quadro Gallery;No Menu do Delphi, escolha File opo New Project.Clique sobre o cone da aplicao MDI,Clique no boto OK.O DELPHI pede ento o diretrio onde voc ir armazenar a aplicao.Escolha o diretrio, e clique no boto OK.

    O DELPHI gera automaticamente um projeto MDI, contendo dois formulrios: um formulriopai e um formulrio Filho. O Formulrio pai, de nome MainForm, ligado a unit Main, possui o seguinteaspecto:

    18

  • 8/14/2019 Aptdelph

    19/65

  • 8/14/2019 Aptdelph

    20/65

    Application.Run;

    end.

    6.2.2Principa.DFM

    6.2.3Principa.PAS

    unit Principa;

    interface

    uses WinTypes, WinProcs, SysUtils, Classes, Graphics, Forms, Controls,

    Menus,StdCtrls, Dialogs, Buttons,Messages, ExtCtrls, Cadastro;

    (* Aqui eu declaro as janelas filha *)

    type

    TFrmPrincipal = class(TForm)

    MenPrincipal: TMainMenu;

    Panel1: TPanel;

    PanLinhaStatus: TPanel;

    MenArquivo: TMenuItem;

    PanTempo: TPanel;

    Window1: TMenuItem;

    MenArquivoSair: TMenuItem;

    WindowCascadeItem: TMenuItem;

    WindowTileItem: TMenuItem;

    20

  • 8/14/2019 Aptdelph

    21/65

    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*)

    end;

    var

    FrmPrincipal: TFrmPrincipal;

    implementation

    {$R *.DFM}

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

    var

    I : integer;

    21

  • 8/14/2019 Aptdelph

    22/65

    begin

    Formexiste := false;

    for i := 0 to componentcount - 1 do

    if Components[i] is TForm then

    if TForm(Components[i])= nomejanela then

    Formexiste := true

    end;

    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);

    begin

    Cascade;

    end;

    procedure TFrmPrincipal.WindowTileItemClick(Sender: TObject);

    begin

    Tile;

    end;

    procedure TFrmPrincipal.WindowArrangeItemClick(Sender: TObject);

    begin

    ArrangeIcons;

    22

  • 8/14/2019 Aptdelph

    23/65

    end;

    procedure TFrmPrincipal.WindowMinimizeItemClick(Sender: TObject);

    var

    I: Integer;

    begin

    for I := MDIChildCount - 1 downto 0 do

    MDIChildren[I].WindowState := wsMinimized;

    end;

    procedure TFrmPrincipal.TimTempoTimer(Sender: TObject);

    begin

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

    end;

    procedure TFrmPrincipal.MenArquivoCadastroClick(Sender: TObject);

    begin

    If Formexiste(FrmCadastro) = false then (* Se for falso ento cria a

    janela *)

    Begin

    Screen.Cursor := CrHourGlass; (* Coloca o cursor na forma de uma

    ampulheta *)

    FrmCadastro := TFrmCadastro.Create(Self); (*Cria a janela filha

    e atribui a varivel declarada *)

    End

    Else

    If Formexiste(Frmcadastro) = true then (* Se for tentar abrir a

    janela e ela ja estiver sido criada *)

    Begin

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

    restaura *)

    FrmCadastro.BringToFront; (*Se estiver atrs, coloca na frente*)

    FrmCadastro.Setfocus; (* Coloca o foco na janela *)

    End;

    end;

    end.

    23

  • 8/14/2019 Aptdelph

    24/65

    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.

    6.2.4Cadastro.DFM

    6.2.5Cadastro.Pas

    unit Cadastro;

    interface

    uses

    24

  • 8/14/2019 Aptdelph

    25/65

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

    Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, DBCtrls, Mask, DB,

    DBTables;

    type

    TFrmCadastro = class(TForm)

    BitBtn1: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action:

    TCloseAction);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    FrmCadastro: TFrmCadastro;

    implementation

    {$R *.DFM}

    procedure TFrmCadastro.FormCreate(Sender: TObject);

    begin

    Screen.Cursor := CrDefault; (* Coloca o cursor em modo normal *)

    end;

    procedure TFrmCadastro.FormClose(Sender: TObject;

    var Action: TCloseAction);

    begin

    Action := Cafree; (* Libera a variavel da janela da memria *)

    end;

    procedure TFrmCadastro.BitBtn1Click(Sender: TObject);

    25

  • 8/14/2019 Aptdelph

    26/65

    begin

    Close; (* Fecha a janela *)

    end;

    end.

    26

  • 8/14/2019 Aptdelph

    27/65

    7.Trabalhando com Banco de Dados

    7.1BDE

    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.2Arquitetura do Banco de Dados do Delphi

    27

  • 8/14/2019 Aptdelph

    28/65

    7.3Arquitetura dos Componentes de Banco de Dados

    7.4Paleta de Componentes da pgina de Acesso de Dados

    Componente UtilidadeTDataSource Atua como um conduto entre componentes TTable, TQuery, TStoredProc e

    componentes de controle, como um TDBGridTTable Recupera dados de um tabela de banco de dados via o BDE e abastece ele paraum ou mais componentes de controle de dados atravs do componenteTDataSource. Envia dados recebidos de um componente para uma banco dedados via o BDE.

    TQuery Usa estruturas em SQL para recuperar dados de uma tabela de banco de dadosvia o BDE, e abastece ele para um ou mais componentes de controle de dadosatravs de um TDataSouce, ou usa estruturas em SQL para enviar dados de umcomponente para um banco de dados via o BDE.

    TStoreProc Habilita uma aplicao para acessar procedimentos armazenados em umservidor. Envia dados recebidos de um componente para um banco de dados viao BDE.

    TDataBase Instala uma conexo permanente com um banco de dados, especialmente um

    banco de dados remoto requerendo um login do usurio e uma senha.TBatchMove Copia a estrutura de uma tabela ou seus dados. Pode ser usado para movertabelas inteiras de uma formato de banco de dados para outro.

    TReport Habilita imprimir e visualizar relatrios de um banco de dados atravs doReportSmith.

    28

  • 8/14/2019 Aptdelph

    29/65

    7.5Paleta de Componentes da pgina de Controle 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 umatabela.

    TDBComboBox Caixa de Lista mvel de controle de dados que pode mostrar ou editar valoresda coluna de uma tabela.

    TDBRadioGroup Grupos de radio de controle de dados com botes de rdio que pode mostrar ousetar 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 colarimagens 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 de

    outra tabela em tempo de compilao.

    7.6Usando DataSets

    As classes de componentes TTable e TQuery so descendentes de TDataset atravs do TDBDataSet. Estaclasse de componente herda uma parte de propriedades, mtodos e eventos.

    7.6.1Estados do DataSet

    Estado DescriodsInactive O Dataset esta fechado.dsBrowse Estado de Espera. O estado default quando um dataset aberto. Registros

    pode 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

    a nova linha.dsSetKey Habilita FindKey, GotoKey, and GoToNearest para procurar valores nas

    tabelas 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 mudana paraoutros campos ou campos calculados. Raramente usado explicitamente.

    29

  • 8/14/2019 Aptdelph

    30/65

    7.6.2Diagrama de Estados do Dataset

    7.6.3Usando os Eventos do DataSource

    7.6.3.1Evento StateChange

    procedure TForm1.DataSource1.StateChange(Sender:TObject);

    var S:String;

    begin

    case Table1.State of

    dsInactive: 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);

    30

  • 8/14/2019 Aptdelph

    31/65

    begin

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

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

    dsSetKey];

    ...

    end;

    31

  • 8/14/2019 Aptdelph

    32/65

    7.6.4Abrindo 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 ouprogramavelmente 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.5Navegando 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.6Modificando dados no DatasetOs 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.7Lendo 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;

    32

  • 8/14/2019 Aptdelph

    33/65

    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.

    Para atribuir valores para o dataset o procedimento o mesmo s que no sentido inverso, desdeque que a tabela esteja em modo de edio ou insero.

    7.6.8Marcando Dados

    Os mtodos para marcar so

    GetBookmark - Pega a posio do registro e coloca em uma varivel do tipo TBookmark; GotoBookmark - Leva o apontador para uma variavel do tipo TBookmark; FreeBookmark - Desaloca uma variavel do tipo TBookmark;

    Exemplo:

    procedure DoSomething;

    var

    Marca: TBookmark;begin

    Marca := Table1.GetBookmark; {Marca a posio}

    Table1.DisableControls; {Desabilita o controle de dados}

    try

    Table1.First;

    while not Table1.EOF do

    begin

    {Faz alguma coisa}

    Table1.Next;

    end;

    finally

    Table1.GotoBookmark(Marca);

    Table1.EnableControls;

    Table1.FreeBookmark(Marca); {Desaloca a variavel}

    end;

    end;

    7.6.9Procurando dados em uma TabelaOs mtodos GoToKey e GoToNearest habilita uma aplicao para procurar uma chave em uma

    tabela. SetKey coloca a tabela em modo de procura. No estado SetKey, atribui-se valores para a procuraem um campo indexado. GoToKey ento move o cursor para a primeira linha da tabela que encontroueste valor. Como GoToKey uma funo ela retorna True ou False se teve sucesso na procura. OGoToNearest uma funo que leva para o valor mais parecido encontrado.

    Exemplo:

    procedure TSearchDemo.SearchExactClick(Sender: TObject);

    33

  • 8/14/2019 Aptdelph

    34/65

    begin

    Table1.SetKey; {Primeiro campo a chave}

    Table1.Fields[0].AsString := Edit1.Text; (*

    Table1.Fieldbyname(Cidade) := Edit1.Text *)

    Table1.GoToKey;

    end;

    Todo procedimento acima pode ser substitudo usando a funoFindExemplo:

    procedure TSearchDemo.SearchExactClick(Sender: TObject);

    begin

    Table1.FindKey([Edit1.text]);

    end;

    34

  • 8/14/2019 Aptdelph

    35/65

    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);

    begin

    Table1.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);

    begin

    Table1.indexfieldnames := Codi_Clie;

    Table1.open;

    Table1.setkey;

    Table1Nome_clie.asstring := Edit1.text;

    Table1.gotonearest;

    end;

    7.6.10Filtrando 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;

    35

  • 8/14/2019 Aptdelph

    36/65

    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.

    36

  • 8/14/2019 Aptdelph

    37/65

    7.6.11ndices 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.12Sincronizando 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);

    37

  • 8/14/2019 Aptdelph

    38/65

    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 Clientes

    Where 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 dedados.

    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 nastabelas.

    8.1Comandos de Manipulao de Dados

    8.1.1UpdateAtualiza registros.

    8.1.2DeleteDeleta Registros

    8.1.3SelectRecupera registros que satisfaam a uma condio.

    8.1.4InsertInsere um novo registro.

    8.2Operadores

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

  • 8/14/2019 Aptdelph

    39/65

    8.3.1FromEspecifica o nome(s) da(s) tabela(s) que originaro os dados.

    8.3.2WhereEspecifica uma condio.

    8.3.3Group BySepara os registros pelo grupo especificado.

    8.3.4HavingEstabelece a condio que cada grupo deve atender.

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

    ASC(Ascendente) e DESC (Descendente)

    8.3.6Distinct

    Retira as repeties

    8.4Funes

    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.5Exemplos

    1) Select *

    From Clientes

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

    2) Select Codigo,Nome

    From Clientes

    Where 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

  • 8/14/2019 Aptdelph

    40/65

    4) Select *

    From Clientes

    Order By Codigo

    Seleciona todos os campos e registros da tabela Clientes ordenada pelo campo Codigo.

    40

  • 8/14/2019 Aptdelph

    41/65

    5) Select *

    From Fornecedores, Produtos

    Where Fornecedores.Codigo = Produtos.Codigo

    Seleciona todos os campos e registros das tabelas de Fornecedores e Produtos que tenham o

    campo codigo de Fornecedores igual ao campo Codigo de Produtos.

    6) Select *

    From Clientes

    Where Nome Like S*

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

    7) Update Funcionarios

    Set 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 Funcionarios

    Set Salario = Salario * 1.2

    Where 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 Produtos

    Where Codigo > 5 And Codigo < 20

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

    8.6Construindo uma Consulta 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.1Passando Parmetros

    Conteudo da Propriedade SQL da Query1:

    Select *

    41

  • 8/14/2019 Aptdelph

    42/65

    From Country

    Where 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);

    42

  • 8/14/2019 Aptdelph

    43/65

    9. ConstruindoRelatrioscom oQuickReport

    O Presentetrabalho tem comoobjetivo demostrar os procedimentos para

    criar relatrios em programas feitos emDelphi utilizando oQuickReport. ODelphi 1.0 j possui

    um gerador de relatrioso ReportSmith que perde em desempenh

    desenvoltura em

    relao aoQuickReport, almde necessitar de sua instalao prvia quando da sua utilizao. Por ser um programa a parte torna-semuito lento em relao a o QuickReport que uma biblioteca de componentes que passa a fazer parte daaplicao quando da sua utilizao aps a compilao.

    9.1QuickReport bsico

    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.

    43

  • 8/14/2019 Aptdelph

    44/65

    9.1.1Componentes do QuickReport.

    9.1.1.1QuickReport

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

    9.1.1.2QRBandVoc constri seus relatrios com diferentes QRBands e colocando componentes visveis de

    controle do QuickReport sobre ela. Existem diferentes tipos de bandas, como banda de detalhes, 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 outramaneira usar o componente DetailLink combinado com bandas DetailGroup. Cada mtodo tem omesmo resultado. Se voc tiver necessidade de relatrios mestres/detalhes com mais de duas camadasento use QRGroup e TQuery ter uma probabilidade de ser melhor desempenho.

    9.1.1.4QRDetailLinkQRDetailLink o segundo caminho para criar relatrios mestre/detalhes no QuickReport.

    Tipicamente voc usaria QRDetailLink com TTables (ou TQueries) quando voc tem somente dois nveisde 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 itens

    de dados ou textos que precisem ser digitados para compor o relatrio.

    9.1.1.7QRDBText

    O Componente QRDBText uma controle de texto de dados cliente. Texto conectado com umcampo de banco de dados.

    9.1.1.8QRDBCalc

    Este componente automatiza processos de soma e contagem de campos de dados. Em adiopara esta 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.

    44

  • 8/14/2019 Aptdelph

    45/65

    9.2Criando Relatrios

    QuickReport pode criar vrios tipos de relatrios, de fato com um breve conhecimento de Delphie 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 deser mostrado na tela como forms. Em uma form relatrio deve ser includo um componenteTQuickReport, e voc usa neste componente os mtodos PRINT e PREVIEW para criar seu relatrio.No tente usar em um relatrio os mtodos de form SHOW ou SHOWMODAL. Uma Form relatrio

    nunca dever ser em sua aplicao o form principal.

    9.2.1Relatrio 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. Atabela 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.

    2. Adicionar um form em branco para o projeto . Estabelecer o nome para a propriedadeMYREPORT. Estabelecer a largura(Width) da form para mais ou menos 800. O atual nmero no

    crtico.3. Adicionar uma TTable para o componente form. Nomear o componente CustomerTable,

    estabelecer a propriedade DataBaseName para DBDEMOS e a propriedade TableName paraCOSTUMER. Estabelecer a propriedade ativa para TRUE.

    4. Adicionar um componente TDataSource para o form. Nomear o CustomerDS e estabelecer apropriedade DateSet para CustomerTable.

    5. Adicionar um componente TQuickReport para o form. Nomear o componente REP. Estabelecer apropriedade DataSource para CustomerDS.

    6. Adicionar um componente QRBand para o form. Estabelecer a propriedade BandType para

    rbDetail.

    7. Colocar um componente TQRDBText sobre o band. Estabelecer a propriedade DataSource paraCustomerDS e a propriedade DataField para CompanyName.

    8. Salvar o form como REPORT.

    9. Voltar MAINFORM (form principal) e adicionar a clusula USES MYREPORT no topo docdigo fonte.

    10. Dar um duplo clique no boto da form principal. Isto ir mostrar o evento ONCLICK do boto.Adicionar o seguinte cdigo para o evento : MyReport.Rep.Preview;

    11. Rode seu projeto .

    Voc criou agora um projeto com relatrio. Seu programa pode agora: apresentar, imprimir,salvar e carregar relatrios!

    9.2.2Criando um relatrio compostoO QuickReport pode imprimir relatrios mestre e detalhes muito facilmente. Estes relatrios

    podem ser imprimidos juntamente com componentes TQuery (consulta) e de componentes TTable(tabela) conectadas com MasterSource (fonte mestre)/propriedades MasterField(campo mestre). Emacrscimo o QuickReport pode criar mestres complexos/relatrios detalhes com registros de um nmeroilimitado de tabelas detalhes.

    Voc poder ver como criar ambos os tipos de relatrios a seguir. Relatrios mestre/detalhes

    usando o componente TTable (tabela).Criando um mestre/detalhes com o componente TTable (tabela) deixa o relatrio muito maisrpido e flexvel. Em adio voc pode incluir dados detalhes de muitas outras tabelas detalhes que vocqueira. Voc pode criar um relatrio de uma relao resumida de clientes de todos os seus clientes (master

    45

  • 8/14/2019 Aptdelph

    46/65

    data) e para cada cliente da lista todas as ordens que o cliente tenha feito (detail data), todos os seuscontatos pessoais com seus clientes (detail data), todos os produtos de uma categoria que o cliente estejainteressado (detail data) e muitas outras tabelas que voc quiser unir com a tabela clientes. Cada umadestas tabelas detalhes podem conter a sua banda cabealho, banda detalhe e banda rodap.

    Para criar relatrios mestre usando componentes TTable siga as instrues a seguir. Voc vai ter anecessidade de olhar o relatrio MDREP do projeto demonstrao. Ele e um relatrio mestre/detalhe quevoc pode usar como modelo.

    Crie um relatrio padro seguindo o exemplo deste captulo Criando Relatrios.

    1. Alterar a propriedade MyReport.ReportType para qrMasterDetail.

    2. Acrescentar um novo componente TTable para o relatrio. Nomear ele OrderesTable, colocar apropriedade DataBaseName para DBDEMOS, a propriedade TableName para Orders, o MasterSourcepara CustomerDS e na caixa de dialogo MasterFields conecte o ndice secundrio (custno) paraCustomer. Custno. Coloque a propriedade Active da TTable para TRUE.

    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 acriao dos componentes TQRDetailink.

    46

  • 8/14/2019 Aptdelph

    47/65

    10.Arquivos de Inicializao

    10.1O Objeto TInifile

    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.2Criando um Arquivo de Configurao

    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;

    Begin

    IniJogo := TIniFile.Create(NOVOJOGO.INI);

    IniJogo.WriteBool(Opcoes,Som,True);

    IniJogo.WriteInteger(Opcoes,Nivel,3);

    IniJogo.WriteString(Configuracao,Nome,Oliveira);

    IniFile.Free;

    End;

    O arquivo de configurao NOVOJOGO.INI armazenado no diretrio \Windows, e possui oseguinte formato:

    [Opcoes]

    Som=1

    Nivel=3

    47

  • 8/14/2019 Aptdelph

    48/65

    [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 apossibilidade de personalizar o arquivo .INI ja na instalao.

    10.3Lendo o Arquivo de ConfiguraoQuando seu aplicativo for executado, deve ler o arquivo .INI existente. Isto pode ser feito, por

    exemplo, 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 daunit do formulrio principal), que podem ser utilizadas por toda a aplicao, quando necessrio. No

    esquea de adicionar a unit do formulrio principal a clusula uses da seo implementation quando forutilizar as variveis.O exemplo abaixo l as entradas do arquivo NOVOJOGO.INI, mostrando para o usurio em

    Labels:

    Var

    Form1 : Tform1;

    Vsom : Boolean;

    Vnivel : Integer;

    Vnome : String;IniJogo : Tinifile;

    Implementation

    {$R *.DFM}

    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;

    48

  • 8/14/2019 Aptdelph

    49/65

    Initialization

    Begin

    IniJogo := TIniFile.Create(NOVOJOGO.INI);

    Vsom := IniJogo.ReadBool(Opcoes,Som,False);

    Vnivel := IniJogo.ReadInteger(Opcoes,Nivel,-1);

    Vnome := IniJogo.ReadString(Configuracao,Nome,);

    IniFile.Free;

    end;

    10.4Modificando um Arquivo .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.5Outras Operaes com Arquivos .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);

    A constante Seo determina a seo que ser lida. O parmetro ListaEntradas corresponde aoobjeto do tipo TString que armazenar as entradas (por exemplo, memo1.lines). Voc pode usar apropriedade Values de uma string ou lista de strings para acessar uma string especfica na lista de string.

    Para apagar uma seo inteira de uma arquivo .INI use o mtodo EraseSection.A propriedade FileName contm o nome do arquivo .INI que est sendo manipulado pelo objeto

    TIniFile.

    10.6Manipulao de Arquivos

    Alguns comandos podem ser uteis para manipular o arquivo .INI :

    10.6.1GetDirRetorna o diretrio corrente do drive especificado.

    49

  • 8/14/2019 Aptdelph

    50/65

    D pode assumir os seguintes valores:

    0 - Default1 - A2 - B3 - C

    Sintaxe:GetDir(D: Byte; var S: String);

    10.6.2FileExistsA funo FileExist retorna True se o arquivo especificado existe.

    Sintaxe:FileExists(const FileName: string): Boolean;

    10.6.3DeleteFileA funo DeleteFile apaga o arquivo especificado do disco. Se o arquivo no poder ser apagado ou noexistir retorna falso.

    Sintaxe:DeleteFile(const FileName: string): Boolean;

    50

  • 8/14/2019 Aptdelph

    51/65

    11.Criando HELP

    11.1Viso Geral

    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.2Escrendo 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.3Inserindo 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.O identificador pode ser um membro (01) ou um nome de grupo seguido de um sinal dedois pontos (:) e um membro (doc:01).

    11.4Adicionando 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.5Criando um hotspot para uma janela pop-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.

    51

  • 8/14/2019 Aptdelph

    52/65

    11.6Se 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.7Escrevendo Arquivo 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_Contexto

    TITLE = Ttulo

    COMPRESS = Nvel_de_Compresso

    ERRORLOG = Nome_do_arquivo_log

    [CONFIG]

    Browse Buttons()

    [FILES]

    NomeArquivoRTF_1

    NomeArquivoRTF_2

    NomeArquivoRTF_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 valorespodem 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.

    52

  • 8/14/2019 Aptdelph

    53/65

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

  • 8/14/2019 Aptdelph

    54/65

    11.8Compilando o arquivo de Help:

    H dois compiladores de Help para Windows 3.1:

    HCP.EXE HC31.EXE , HC31.ERR

    Quando voc compilar o arquivo de Help os arquivos abaixo devem de preferncia estar nomesmo 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.9Inserindo grficos 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.10Criando um Hot Spot para uma janela secundria

    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 secundria

    O 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)

    54

  • 8/14/2019 Aptdelph

    55/65

    11.11Tornando o arquivo de Help sensvel ao contexto

    Aps criar o arquivo de Help, voc pode utiliz-lo na sua aplicao em Delphi , ligando partesde sua aplicao (como itens de menu, botes, etc...) a tpicos do arquivo de Help.

    Para ligar o arquivo de Help a Aplicao: Copie o HLP para o diretrio do Projeto Entre na aplicao em Options/Project. Na caixa HelpFile, entre com o nome do arquivo de Help (.HLP) que ser ligado a aplicaoO Delphi liga um componente a um tpico do Help atravs de um nmero de contexto. Este

    nmero de contexto deve ser atribudo 'a string de contexto do tpico, na seo MAP do arquivo dePorjeto. A seo [MAP] mapeia todos os nmeros de contexto, associando-os as strings de contextorespectivas.

    Por exemplo:

    [MAP]

    Abrir_doc 001

    Criar_doc 002

    11.12Chamadas ao arquivo de Help

    Chamar o tpico do contedo:

    Application.helpcommand(help_contents,0)

    Chamar um tpico especfico:

    Application.helpcommand(help_contents,xx)

    xx = ndice da string de contexto definido na seo [MAP] do arquivo de projeto do

    Help.

    Fechar o arquivo de Help:

    Application.HelpCommand(help_quit,0);

    55

  • 8/14/2019 Aptdelph

    56/65

    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 uma

    execeo ocorra. Quando um erro ocorre no bloco protegido, o programa pula para a parte finally,chamada de cdigo limpo, que executado. Mesmo que no ocorra um erro, estes comandos 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;

    Begin

    Adividend := 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}

    56

  • 8/14/2019 Aptdelph

    57/65

    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 de

    exceo. Por exemplo, o cdigo abaixo trata o erro de diviso por zero, atravs da exceo EDivByZero:

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

    Begin

    Try

    Result := Soma div Numero;

    Except

    on EDivByZero do Result 0;

    End;

    End;

    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 estrutura ondo, que prov uma varivel temporria que engloba a exceo. Nesse caso, voc poder criar seu prprioquadro de mensagem contendo a string da mensagem da exceo:

    Try

    {Comandos}

    Except

    on E:EInvalidOperation do

    MessageDlg(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}

    Except

    on 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}

    57

  • 8/14/2019 Aptdelph

    58/65

    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}

    Except

    on EIntError do

    {Cdigo de tratamento de erros}

    End;

    12.3Excees Silenciosas

    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 tentamosinserir o terceiro elemento:

    Begin

    For i := 1 to 10 do

    begin

    ListBox1.items.Add(IntToStr(i));

    If i = 3 then

    Abort;

    end;

    End;

    58

  • 8/14/2019 Aptdelph

    59/65

    13.Dicas

    13.1Criao de MDIChild

    procedure TForm1.Teste1Click(Sender: TObject);

    begin

    if formexiste(Form2)= false then

    begin

    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);

    59

  • 8/14/2019 Aptdelph

    60/65

    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.2Form Existe

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

    var

    I : integer;

    begin

    Formexiste := false;

    for i := 0 to componentcount - 1 do

    if Components[i] is TForm then

    if TForm(Components[i])= nomejanela then

    Formexiste := true

    end;

    Obs.:

    public

    { Public declarations }

    Function Formexiste(nomejanela:Tform):boolean;

    end;

    13.3Criao ShowModal

    procedure TForm1.Teste2Click(Sender: TObject);

    begin

    try

    Application.CreateForm(TForm3, Form3);

    Form3.showmodal;

    Finally

    Form3.free;

    end;

    60

  • 8/14/2019 Aptdelph

    61/65

    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.4Fechar Todas

    procedure TForm1.Teste31Click(Sender: TObject);

    Var

    I: Integer;

    begin

    for I := MDIChildCount - 1 downto 0 do

    MDIChildren[I].close;

    end;

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

    13.5Relgio e Teclado

    procedure 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 then

    Label3.Caption := ' Cap ' {Tecla CapsLock}

    else

    Label3.Caption := '';if (GetKeyState(vk_Insert) and $01) 0 then

    Label4.Caption := ' Ins ' {Tecla Insert}

    61

  • 8/14/2019 Aptdelph

    62/65

    else

    Label4.Caption := '';

    end;

    62

  • 8/14/2019 Aptdelph

    63/65

    13.6Informaes Sistema

    procedure TForm2.FormCreate(Sender: TObject);

    type

    FlagSet = set of 120..135;

    var

    Flgs : FlagSet;

    L : Longint;

    s : String;

    begin

    image1.picture.graphic := application.icon;

    titulo.caption := application.title;

    L := GetVersion;

    windows.caption := Format ('Windows %u.%.2u', [Lobyte(loword(L)),

    Hibyte(loword(L))]);

    dos.caption := Format ('DOS %u.%.2u',[Hibyte(Hiword(L)),

    Lobyte(HIword(L))]);

    L := GetWinFlags;

    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';

    63

  • 8/14/2019 Aptdelph

    64/65

  • 8/14/2019 Aptdelph

    65/65

    14.Bibliografia

    Delphi por Adelize Generini de OliveiraBookStre EditoraFone: 048-222-1125E-mail: [email protected]

    Aplicaes em Delphi por Adelize Generini de OliveiraBookStore EditoraFone: 048-222-1125E-mail: [email protected]

    Manipulando Banco de Dados com Delphi por Adelize Generini de OliveiraBookStore EditoraFone: 048-222-1125E-mail: [email protected]

    Delphi - Tcnicas Avanadas por Adelize Generini de OliveiraBookStore EditoraFone: 048-222-1125E-mail: [email protected]

    Programao em Delphi - para Leigos por Neil J. RubenkingEditora BerkeleyFone: 011-832-8039

    Aprendendo Delphi Avanado por Amrico Damasceno Jr.Editora ricaFone: 011-295-3066

    Delphi Segredos e Solues por Gary Cornell/Troy Strain

    Editora Makron BooksFone: 011-829-8604

    Borland Delphi - Guia de Referncia Inteligente por Marcelo LeoAxcel Books do Brasil Ltda

    Borland Delphi - Curso Bsico e Rpido por Marcelo LeoAxcel Books do Brasil Ltda

    Manuais Borland Delphi 1.0 for WindowsManuais Borland Delphi Professional 3.0 for Windows

    Sites

    Delphi Clubhttp://www.geocities.com/Colosseum/1870/

    Delphi Brasilhttp://www.geocities.com/SiliconValley/8314/delphi.htm

    Delphi Super Pagehttp://sunsite.icm.edu.pl/delphi/index.html