Apostila Teórica 1 - Introdução ao Delphi - O ambiente de desenvolvimento 1.1.1 - Barra de Menus Através da barra de Menu o Programador tem acesso a todos os serviços do Delphi: Menu File Comandos de arquivos do projeto, abertura de um novo projeto, inclusão de novos formulários ao projeto, salvamento de projeto, etc. Menu Edit Comandos de edição, copias, recortar, colar, etc. Menu Search Comandos para procurar e substituir textos das units do projeto. Menu Veiw Comandos para exibir as janelas de ferramentas do Delphi como o Object Inspector, a Alignment Palete, etc. Menu Project Comandos de controle do projeto atual, compilação, configurações, etc. Menu Run Comandos para execução e debug do projeto. Menu Component Comandos para instalação de componente e criação de novos. Menu Database Comandos para agilizar a criação de bancos de dados e formulários de dados. Menu Tools Comandos que abrem os utilitários do Delphi, Database Desktop, Image Editor, etc. Menu WorkGroup Comandos que facilitam o desenvolvimento de aplicativos em grupo. Menu Help Ajuda do Delphi. 1.1.2 – Barra de Ferramentas Na barra de ferramentas estão as funções mais utilizadas: Salvar um Projeto; Este botão quanto pressionado salva o seu projeto em disco. Abrir um Projeto; Este botão quando pressionado abre um projeto que havia sido gravado em disco. Acrecentar uma Unit; Este botão quando pressionado acrescenta uma Unit (Arquivo.pas e Formulário) ao seu projeto atual. Exibir Unit; Este botão quando pressionado apresenta uma lista contendo todas as units do projeto atual, ao selecionar uma delas, esta será exibida no editor de código. Exibir Formulario; Similar ao anterior, quando pressionado apresenta uma lista contendo todos os formulários do projeto atual, ao selecionar um deles, este será exibido. Executar o aplicativo; Este botão quando pressionado compila e executa o aplicativo. Interromper a rexecução; Este botão estará ativo somente se o aplicativo estiver sendo executado e interrome a execução. Salvar uma Unit; Este botão, quando pressionado, salva a unit atual em disco. Abrir uma Unit; Este botão, quando pressionado, abre uma unit que havia sido salva em disco. Excluir uma Unit; Este botão, quando pressionado, exclui uma unit do projeto atual. Alternar enter Editor de Código e Formulário; Incluir um novo formulário; Este botão, quando pressionado inclui um novo formulário em branco ao projeto atual assim como uma nova unit. Executar passo a passo externo; Executa o aplicativo linha a linha, porém, quando um procedimento é chamado internamente, as linhas deste não são exibidas. Executar passo a passo interno; Executa o aplicativo linha a linha, até mesmo as linha dos procedimentos chamados internamente. 1.1.3 - Palheta de Componentes Esta é a mais poderosa ferramenta, ou conjunto de ferramentas que o Delphi disponibiliza para o programador. Aqui estão guardados todos os componentes que são necessários para o desenvolvimento de uma aplicação Windows. Você encontrará botões, caixas de dialogo, Menus, controles de banco de dados, etc. Basicamente um sistema em Delphi baseia-se na manipulação destes componentes, alterando suas propriedades e eventos. 1.1.4 - Object Inspector O Object Inspector é a ferramenta utilizada para alterar os valores das propriedades e inserir código nos Eventos do componente selecionado. Quando você abre o Delphi o Object Inspecto deve aparecer no lado esquerdo do formulário, se isto não acontece pressione a tecla F11 ou selecione o menu View -> Object Inspector. Na parte superior do Object Inspector existo o Object Selector que indica o componente atual e seu tipo de dados, e este seletor pode ser usado para mudar a seleção atual. As propriedades listadas, em geral, não são todas as propriedades do componente. Ele inclui somente as propriedades que podem ser definidas em tempo de projeto. As demais propriedades podem ser conhecidas consultando o Help. Para alterar os valores das propriedades você usa a coluna da direita. Se a propriedade for de um tipo simples (Inteiro, String, Real, Boolean), basta você inserir o valor desejado, caso contrário, à direita deverá aparecer um botão com uma seta para baixo ou um botão com três pontos. O botão com seta para baixo indica que o valor da propriedade deve ser selecionado entre uma lista de itens que será exibida quando o botão for pressionado, já o botão com três pontos indica que será aberta uma caixa de diálogo que irá auxiliar o desenvolvedor. Existe ainda no Object Inspector a palheta Events que lista todos os eventos relacionados ao componente selecionado. Para inserir um código a um evento basta dar um duplo clique sobre a coluna da à direita do nome do evento e uma declaração de procedure será criada. Dentro desta declaração deverá ser inserido o código desejado para o evento. 1.1.5 - Formulário Esta é a nossa prancheta de projeto, o Formulário equivale a uma janela do Projeto final. É nele que será desenhado o formato da janela que será apresentada ao usuário, para isto basta ir adicionando componentes a ele e posicionando nos lugares em que se deseja apresenta-los. O próprio Formulário é um componente, portanto possui Propriedades, Metodos e Eventos que podem ser alterados conforme necessário. 1.1.6 - Editor de código Como o próprio nome já descreve, é nesta janela que o Programador irá inserir o código para os eventos que deseja executar. O conteúdo desta janela é salvado no arquivo .pas correspondente a cada unit do projeto. No Delphi 3.0 este editor possui um Help On-line que exibe as propriedades, métodos e eventos do objeto que se está descrevendo. 1.1.7 - Preparando o ambiente É muito importante que se prepare corretamente o ambiente de trabalho para evitar atrasos no desenvolvimento. Esta janela é chamada através do menu “Tools | Enviroment Options”. Nela você pode configurar as características do ambiente em que se irá trabalhar. Ela possui 8 palhetas, porém, somente uma tem real importância no projeto a palheta Preferences, as restantes são apenas de configuração de exibição. 1.1.8 – Opções personalizadas Nesta janela seleciona-se as configurações personalizadas para cada projeto. Na palheta Forms define-se qual o formulário principal da aplicação (Main Form) e quais devem ser os formulários criados no instante da execução do sistema. Na palheta Application define-se qual o título da aplicação, qual o seu ícone e qual o arquivo de help correspondente a ela. Na palheta Compiler define-se as opções de compilação, quanto mais opções forem selecionadas haverá menos chances de o sistema Ter erros, porém ele poderá ficar mais pesado. – Programando em Delphi 1.2.1 – Conceitos de programação visual Por todas as inovações anteriormente citadas é obvio que o modo de programação no Delphi tende a ser diferente das demais linguagens: Interface Visual: o primeiro passo para o desenvolvimento de uma aplicação é a criação de sua interface visual, a cara do programa. Para isso é necessário “desenhar” os componentes da aplicação (janelas, botões, rótulos, campos de entrada de dados, etc) em suas posições definitivas e dimencioná-los de modo a apresentar uma aparência agradável e funcional. Configuração dos Objetos: o segundo passo é a configuração dos componentes que compões a interface visula. Cada objeto, ou componente, tem um conjunto próprio de propriedades que podem ser ajustadas (de acordo com a necessidade do programador) através do “Object Inspector”. Neste momento, será definido o estilo do formulário, título dos botões, número máximo de caracteres aceitos em um campo de entrada de dados e outras características do genero. Codigicação: o próximo passo é a codificação da aplicação. O código de um formulário fica armazenado em um arquivo de código que possui o mesmo nome do arquivo do formulário porém sua extensão é .PAS. Neste arquivo, os códigos referentes a cada evento possível deve ser escrito na forma de um procedimento (Procedure). Basta para isso selecionar o evento desejado na janela Object Inspector e com um duplo click no Delphi cria a procedure e todas as referências necessárias bastando ao programador escrever o código. Teste: depois de digitado e codificado o seu programa, é necessário testá-lo. A linguagem Pascal da Borland sempre foi reconhecida pela velocidade na compilação dos seus programas. O ambiente de trabalho do Delphi incorpora também a função de link-edição no momento da execução da aplicação. Aqui, basta selecionar o menu Run | Run ou pressionar o botão Run da barra de ferramentas para que seu projeto seja compilado, link-editado e executado. Debug: durante a fase de testes do sistema, talvez seja necessário a depuração de alguns erros. Para isso, o Delphi oferece um debug integrado que permite a execução do programa passo a passo e oferece a possibilidade de inspecionar os valores das variáveis do sistema, permitindo desta forma detectar exatamente onde ocorre o problema. Geração de arquivos executável ou DLL: depois de testado e depurado o programa, deve-se gerar o executável a partir do seu projeto. O Delphi é um ambiente de desenvolvimento baseado em uma linguagem de alto nível e que possibilita a criação de programas executáveis extremamente rápidos e pequenos em tamanho, principalmente se comparados com ambientes de desenvolvimento baseados em linguagens semi-interpretadas como o BASIC. Além de um programa executável, existe também a possibilidade da criação de uma DLL a partir do projeto. DLLs são bibliotecas de ligação dinâmica o que possibilita a utilização da mesma em diversas aplicações simultaneamente e por diversas linguagens e ferramentas diferentes. 1.2.2 – A Linguagem A codificação no Delphi é feita através da linguagem Pascal. A linguagem Pascal foi criada inicialmente com objetivos didáticos, porém, descobriu-se ser tão poderosa que começou a ser utilizada para fins comerciais. Com o surgimento de novas linguagens comerciais, como o Clipper, o Pascal começou a ser considerado extinto, até que a borland lançou o Delphi que fez o Pascal renascer, agora como Object-Pascal. Inicialmente para desenvolver aplicações em Delphi não é necessário um grande conhecimento do Pascal, porém, quanto mais você se aprofundar no Delphi, mais sentirá necessidade de conhecer profundamente o Pascal. 1.2.3 – Conceito de Componentes Componentes são objetos, e todo o objeto é composto por: Propriedades; Metodos; Eventos; 1.2.4 - Propriedades Propriedades são atributos ou características dos componentes. As propriedades podem ser somente para leitura, modificáveis em tempo de projeto e/ou execução ou modificáveis somente em tempo de execução. Para modificar os valores de uma propriedade em tempo de projeto utilizamos o Object Inspector, na palheta Properties. Já em tempo de execução nós utilizamos a seguinte sintaxe: {Nome do Componente}.{Propriedade} := Valor; Por exemplo: se quisermos alterar a propriedade Caption do Formulário Form1 utilizamos o seguinte comando: Form1.Caption := Valor; 1.2.5 - Métodos Os métodos são procedures e functions declaradas dentro do objeto e correspondem à ações que o objeto pode desempenhar. Eles só estão acessíveis em tempo de execução. A sintaxe é semelhante a das propriedades com as seguintes diferenças: Não se pode atribuir um valor a métodos; Alguns métodos aceitam argumentos, já que são function e procedures; Os métodos correspondentes às functions retornam valores; os correspondentes às procedures não. Por exemplo, para limpar o texto de um componente Memo utiliza-se o método clear da propriedade Lines: Memo.Lines.Clear; 1.2.6 - Eventos Os eventos correspondem a oportunidades do componente chamar o nosso código. 99% do código escrito será como resposta à eventos. Os eventos normalmente correspondem a mensagens do Windows processadas pela biblioteca do Delphi. Para os programadores DOS, os eventos são uma completa novidade, mas eles estão presentes de alguma forma em todas as ferramentas de desenvolvimento para Windows. Para associar um evento à um código, utiliza-se o Object Inspector na palheta Events. OBS: O Delphi cria automaticamente um trecho de código para cada componente que adicionarmos ao nosso projeto. Caso eliminamos um objeto do projeto o Delphi automaticamente apaga o código que ele criou. Quando damos um duplo-clike em um evento, o Delphi cria automaticamente a declaração da Procedure. E existe uma regra geral para isto: Nunca altere o código que o Delphi criou, a não ser que saiba exatamente aonde está mexendo, sob pena de perder a integridade de seu projeto. 1.2.7 - Arquivos de um Projeto Extensão Descrição DPR Fonte do arquivo de projeto – 1 por projeto PAS Fonte do arquivo de código da Unit – 1 por formulário DFM Arquivo binário que especifica como é um formulário – 1 por formulário DOF Opções de projeto – 1 por projeto RES Recursos diversos do Windows – 1 por projeto DCU É o arquivo .PAS compilado EXE, DLL Produto final do projeto BAK, ~?? Arquivos de “Backup” DSM,DSK Arquivos auxiliares Caixas de mensagens em Delphi Existem três funções básicos em Delphi para se gerar uma caixa de mensagens: ShowMessage; MessageBox; MessageDlg; As três exibem uma mensagem na tela, porém uma se diferencia da outra quanto à apresentação da mensagem. ShowMessage Esta é a função de mensagem mais simples, ele só recebe um parâmetro que é a mensagem que se quer exibir. Sua sintaxe é a seguinte: ShowMessage(‘Texto da Mensagem’); MessageBox Esta função recebe três parâmetros, o primeiro é o texto da mensagem, o segundo é o título da janela e o terceiro é o número do ícone mais o botões que se deseja apresentar. Esta função retorna o código do botão pressionado. Application.MessageBox(‘Texto da Mensagem’,’Título da Janela’,Icone + Botões); Onde Icone pode ser: Mb_IconQuestion Mb_IconExclamation Mb_IconStop Onde Botões pode ser: Mb_Ok Mb_Cancel Mb_YesNoCancel Mb_YesNo Mb_Retry Mb_Help MessageDlg Esta função recebe quatro parâmetros, o primeiro é o texto da mensagem, o segundo é o tipo da mensagem, o terceiro são os botões da mensagem e o quarto é o número de contexto do Help. Esta função retorna o código do botão pressionado. MessageDlg(‘Texto da Mensagem’,Tipo da mensagem,Botões,Contexto de Help); Onde Tipo da mensagem pode ser: MtWarning MtError MtInformation MtConfirmation MtCustom Onde Botões pode ser: MbYes MbNo MbOK MbCancel MbHelp MbAbort MbRetry MbIgnore MbAll MbYesNoCancel MbOkCancel MbAbortRetryIgnore As Units Unit é uma unidade de um projeto, ou seja, é o conjunto feito de um formulário e um arquivo de código. Quando é criado um novo aplicativo o Delphi cria três arquivos, o arquivo de projeto “.DPR” o arquivo do formulário “.DFM” e o arquivo de código do formulário “.PAS”. A cada novo formulário inserido no projeto é criado um novo DFM e um novo PAS. Um esquema que pode demonstrar os arquivos de um projeto é o seguinte: O componente MainMenu Componente utilizado na criação de Menus em formulários. Para preencher os dados do novo menu é necessário abrir o Editor de Menu, isto pode ser feito dando um duplo clique sobre o componente ou dando um clique com o botão direito do mouse sobre o componente e selecionando o Item de Menu “Menu Designer...”. No Editor de Menu será definido os valores de cada propriedade dos itens de menu. Quando o Editor de Menu é aberto é criado um novo item de menu em branco, preenchendo sua propriedade Caption o texto é automaticamente inserido no menu. Os itens superiores são ditos como Item Pai e os seguintes como Item Filho. Para criar um novo item Filho basta pressionar a seta para baixo do teclado e para criar um novo item Pai basta pressionar a seta para a direita do teclado. Os menus podem ainda ser reajustados conforme a necessidade, para isso basta arrastar o item de menu para a posição desejada. Outro tipo de menu muito utilizado é o Menu Expandido, para cria-lo basta colocar o cursor sobre o menu filho que se deseja expandir e pressionar as teclas CTRL+Seta p/ a direita. Cada item de menu possui suas propriedades e um único evento (OnClick). As propriedades mais interessantes dos menus são Caption ( onde se insere o texto que é exibido ao usuário ) e ShortCut ( onde se define a tecla de atalho para o menu ). Chamadas entre formulários Quando se desenvolve aplicativos com multiplas janelas é necessário que haja uma forma de chama-las. Existem dois métodos inseridos nos componentes Form que são utilizados para este serviço, são eles: Show – Método que exibe um formulário de modo aberto, ou seja, o usuário poderá alternar enter o formulário exibido e o formulário que o chamou. ShowModal – Método que exibe um formulário de modo fechado, ou seja, o usuário não poderá ir para nenhuma outra janela do aplicativo sem fechar a janela exibida. Em aplicativos de Banco de Dados é muito útil utilizar o método ShowModal pois o usuário é obrigado a seguir uma certa ordem na inclusão dos dados. Criando formulários dinamicamente Quando o nosso aplicativo é executado ele carrega em memória todas as janelas que foram criadas. Isto causa uma série de problemas como a demora para abrir o aplicativo e o uso excessivo dos recursos da máquina. Para que isto não aconteça é necessário configurar no menu “Project -> Options” quais formulários devem ser criados no momento da execução e quais deverão ser criados dinamicamente. Para criar um formulário dinamicamente é necessário criar uma variável de memória que irá armazenar o novo formulário, esta variável deve ser do tipo do formulário que ser irá criar. Por exemplo, se nós tivermos em um aplicativo o formulário principal (Form1) e o formulário secundário (Form2) e eu quero chamar o Form2 a partir do Form1 eu criaria o seguinte código: Procedure XXXXXXX Var Nova_Janela : Tform2; Begin Nova_Janela := Tform2.Create(Self); Nova_Janela.ShowModal; Nova Janela.Free; End; Neste código nós criamos a variável Nova-Janela que é do tipo Tform2 (quando é incluído um novo componente no Delphi, é automaticamente criado um novo tipo). Na primeira linha do código nós estamos inserindo na variável a criação do formulário, após isto ter sito feito a variável pode ser tratada como um formulário pois é isto que ela é. Eu utilizei o método ShowModal para chamar a janela pois é o método que geralmente uso. Na última linha do código eu chamo o método Free que destroi a variável, ou seja apaga-a da memória. Isto é feito pois a nossa intenção é manter os recursos da máquina o mais livre possível e se eu não libera-se a memória locada por esta variável ela ficaria indisponível até que o meu programa fosse finalizado. Criando aplicativos MDI Os aplicativos MDI são um tipo de aplicativo que trata a janela principal como uma área de tarefas e as demais como janelas filhas. Para criar um aplicativo MDI em Delphi é necessário que se defina a propriedade FormStyle do formulário principal como fsMDIForm e a propriedade FormStyle das demais janelas do aplicativo como fsMDIChild. Em um aplicativo MDI as janelas não podem ser chamadas através do método ShowModal e devem ser criadas dinamicamente utilizando a seguinte sintaxe: Application.CreateForm(Tform1, Form1); Onde Form1 é a janela que se deseja chamar e TForm1 é o seu tipo. Este código é utilizado somente em janelas do estilo MDI, em outros estilos de janela é utilizado: Form1 := TForm1.Create(Self); Como as janelas dos aplicativos MDI não podem ser exibidas como Modal o código que libera a janela da memória deverá ser inserido no evento OnClose da janela com a seguinte sintexe: Action := caFree; Onde Action é uma variável que representa qual a ação que deverá ser executada sobre a janela e caFree é uma variável que indica a liberação da memória. Este código é utilizado somente em janelas MDI, nos outros estilos de janelas é utilizado: Form1.Free Um diálogo com o Windows Você já deve ter observado que em qualquer aplicativo Windows quando você precisa salvar um arquivo a caixa de diálogo é sempre a mesma. Isto acontece porque quem gerencia esta tarefa é o Windows. No Delphi nós temos uma palheta dedicada somente a esta tarefa, é a palhete Dialog. Os componente da palheta Dialog são todos caixas de diálogo padrão Windows como a caixa de abertura de arquivo, salvamento de arquivo, opções de impressão, etc. Para que uma caixa de diálogo seja apresentada ao usuário é utilizado o método Execute. Este método retorna True se o usuário pressionou o botão OK da caixa e False se não. Por exemplo, um diálogo OpenDialog serve para que o usuário possa abrir um arquivo, o nome do arquivo escolhido pelo usuário fica armazenado na propriedade FileName do OpenDialog. Como o método de chamada de uma caixa de diálogo retorna True ou False é possível criar o seguinte código: If OpenDialog.Execute then [Abrir arquivo;] Banco de dados em Delphi O banco de dados está basicamente relacionado aos componentes Query, DataSource e Table da palheta Data Access e todos os componetens da palhete Data Controls. Para criar um aplicativo de banco de dados você deve inserir um Table ou um Query no formulário junto com um DataSource e efetuar a ligação entre eles. O componente Table Este é o componente utilizado para abrir o arquivo de dados, nele é configurado a forma de exibição de cada campo da tabela e é nele que se controla os eventos de inclusão, alteração, exclusão, etc. O componente Query Componente semelhante ao Table porém este utiliza SQL para buscar os dados no banco de dados. Este componente é utilizado para consultas já que a manipulação de dados com o mesmo requer um grande conhecimento de SQL. O componente DataSource Componente que faz a ligação entre a tabela aberta ( Table ou Query ) e os componentes de manipulação de dados ( qualquer componente da palhete Data Controls ). Um esquema que pode auxiliar na compreenção da ligação deste componentes é o seguinte: Onde: “Componentes de acesso a dados” representa qualquer componente da palheta Data Controls e “DataSource” é a propriedade deste componete que aponta para o DataSource e “DataField” é a propriedade deste componente que aponta para o campo do arquivo de dados; “Componente DataSource” é o próprio componente DataSource da palheta Data Access e “DataSet” é a propriedade deste componente que aponta para o componente Table; “Componente Table ou componente Query” é o próprio componente Table ou Query da palheta Data Access e “DatabaseName” é o diretório onde se encontram os arquivos de dados ou o Álias que representa este diretório e “TableName” é o nome do arquivo de dados que se quer abrir O Database Desktop O Database Desktop é uma ferramenta que é instalada junto com o Delphi para o desenvolvimento de arquivos de dados. Para abrir o Database Desktop selecione o mentu “Tool -> Database Desktop” do Delphi. No menu File existe um Item chamado Work Directory, neste item você pode configurar em qual diretório ou álias está trabalhando, desta forma sempre que você for abrir ou salvar uma tabela o Database Desktop irá abrir as caixas de dialogo de Abertura ou Salvamento de arquivos neste diretório. Criando Tabelas Para criar uma nova tabela selecione o mentu “File -> New -> Table”. O Database Desktop irá solicitar então o tipo de tabela que se quer criar. Nós vamos criar somente tabelas Paradox por ser o banco de dados mais completo disponível no Database Desktop. Após selecionar o tipo da tabela é aberto o Editor de Tabelas onde são criados os campos do arquivo de dados. Na coluna Type, se você pressionar a barra de espaço poderá ver quais os tipo de dados disponíveis para os arquivos paradox. Na coluna Key é inserido um asterisco para o campo ou campos que formarão a chave dos registros ( este é o campo chave ou indice primário ). Após criar todos os campos da tabela é hora de definir as opções de cada campo e da tabela em geral. Ao lado direito do editor de campos existe um conjunto de opções de configuração de campos e tabela, neste conjunto são criadas a integridade referencial, os indices secundários, as validações de campos, etc. Inserindo Validações de campos Na caixa Table Properties selecione o item Validity Checks e estarão disponíveis as seguintes configurações de campos: Onde: Required Field - Indica se o campo deverá ter obrigatoriamente um valor; Minimum value - Indica qual o valor mínimo aceito pelo campo; Maximum value - Indica qual o valor máximo aceito pelo campo; Default value - Idica qual o valor padrão do campo; Picture - Idica qual a mascara usada pelo campo; Estas opções são individuais para cada campo do arquivo. Criando a integridade referencial Na caixa Table Proprieties selecione o item Referential Integrity e você poderá definir a integridade referencial desta tabela com relação às demais através do Editor de Integridade: Onde: Fields - é a lista de campos do arquivo atual; Child fields - é o campo que serve de ligação com a tabela externa; Parent’s key - é o campo chave da tabela externa; Table - é o conjunto de tabelas do diretório ou álias padrão (definido no menu Work Directory); Cascade - define se o relacionamento é do tipo cascata, ou seja o que for efetuado no campo chave será efetuado também nos registros relacionados. Prohibit - define se o relacionamento é do tipo reservado, ou seja o registro pai não poderá ser alterado nem excluído se existir pelo menos um registro filho. Você escolhe o campo que é a chave externa da tabela atual e pressiona o botão com a seta para adireita, na lista Table você seleciona a tabela com a qual o campo se relaciona e pressiona o botão com a seta para a esquerda então o indice primário desta tabela será inserido no campo Parent’s Key. Em seguida basta definir se o relacionamento é cascade ou Prohibit. Pressionando o botão OK será solicitado um nome a este relacionamento. Criando indices secundários Para criar indices primários basta inserir um asterisco na coluna Key do editor de tableas, já os indices secundários você deve selecionar o item Secondary Indexes na caixa Table Properties. Pressionando o botão Define é aberta a janela de Definição de Indices: Nesta janela são listados todos os campos do arquivo na caixa da esquerda, os campos que você quiser utilizar para criar o novo indice deve ser passado para a caixa da direita. Isto é feito selecionando o campo desejado e pressionando o botão com a seta para a direita ou dando um duplo clique sobre o campo desejado. Após inserir os campos é hora de definir as opções do indice: Unique – Indice único. Maintained – Define se o indice deve ser atualizado automaticamente. Case sensitive – Diferencia entre maiúsculas e minusculas em uma consulta. Descending – Indice em ordemdecrescente. Pressionando o botão OK será solicitado o nome do novo indice e pronto. Se você quiser criar mais indice repita o processo. Inserindo senhas às tabelas Muitas vezes é necessário que nós tenhamos uma forma de impedir que terceiros entrem no Database Desktop e alterem nossos arquivos de dados. Para inserir uma senha em uma tabela selecione o tiem Password Security na caixa Table Properties. Pressionando o botão Define é aberta a janela de definição de senhas: No campo Master password você deve digitar a senha desejada e no campo Verify master password esta senha deve ser redigitada para que seja confirmada, após esta tarefa basta pressionar o botão OK e nossa tabela estará protegida. Devolta ao Delphi Criando um álias Todos os nossos arquivos de dados provavelmente estarão em um diretório do nosso disco rígido ou em um diretório de um servidor de rede. Na propriedade DatabaseName do componente Table nós devemos inserir o PATH do diretório que contém os arquivos de dados, porém, é um tanto incomodo inserir o PATH a cada novo table inserido no projeto e isto se torna uma tarefa muito pesada quando nós queremos mudar nossos arquivos de dados para outro diretório. Para evitar este serviço desnecessário existe a possibilidade de se criar um álias (apelido) que será a nossa referência ao diretório que contém os dados. Para criar um álias selecione o menu “Database -> Explore” e será aberta a janela do SQL Explorer com todos os álias já criados. Para criar um novo álias selecione o menu “Object será criado um álias em branco: -> New” e automaticamente A primeira coisa a se fazer é dar o nome que se deseja ao álias, em seguida deverá ser alterada a propriedade PATH, nela você deve inserir o caminho do diretório onde se encontram os dados como por exemplo “C:\DADOS”. Após Ter criado o novo álias você deve aplica-lo através do menu “Object -> Apli”. Sempre que você quiser alterar alguma característica do álias você deve desativalo através domenu “Object -> Close”. Após efetuar as alterações desejadas é necessário aplicar o álias novamente. Abrindo uma tabela no projeto Para abrir uma tabela de dados é utilizado o componente Table. São duas as propriedades que devem ser configuradas: DatabaseName - Propriedade que deve conter o diretório ou o álias da base de dados. TableName - Propriedade que deve conter o nome do arquivo de dados que se quer abrir neste Table. Para cada arquivo que se queira abrir é incluído um table no projeto. Geralmente é incluido ao projeto um formulário DataModule que é utilizado para armazenar os componentes table. Para inserir ao projeto um DataModule selecione o menu “File -> New DataModule”. Se você quiser abrir o arquivo de dados de modo exclusívo, ou seja nenhum outro usuário poderá alterar ou incluir registros nesta tabela, você deve atribuir o valor True à propriedade Exclusive. Configurando as propriedades dos campos Para alterar as propriedades dos campos de uma tabela é utilizado o Editor de Campos. Para abrir o editor de campos dê um clique com o botão direito do mouse sobre o componente Table que abre a tabela da qual você quer editar os campos e selecione o Item de Menu “Fields Editor...”. A principio o Editor de Campos aparece como na figura acima, vazio. Para inserir os campos da tabela pressione o botão direito do mouse sobre o Editor de Campos e selecione o Item de Menu “Add Fields”. Na janela de Adicionar Campos você seleciona os campos que deseja exibir e pressiona OK. Geralmente são inculídos todos os campos ao Editor de Campos. Ao voltar para o Editor de Campos ele deverá conter todos os campos que foram Adicionados. Cada um dos campos possue propriedades como DisplayLabel que define o texto que é exibido ao usuário em um grid, por exemplo. É aqui que são definidas as mascaras, através da propriedade EditMask de cada campo. Cada campo possui também seus eventos onde o mais importante é o evento OnValidate que ocorre sempre que um campo é validado, se você quiser fazer alguma validação antes de salvar os dados do campo insira o seu código neste evento. Criando campos virtuais Nas tabelas é possível criar um campo virtual que receba um valor, este campo deve ser criado através do componente do Editor de Campos. Para abrir o Editor de Campos, dê um duplo clique no componente Table que tem a tabela na qual você que criar o campo calculado ou dê um clique com o botão direito do mouse e escolha o Item de Menu Fields Editor... No Editor de campos é possível listar todos os campos da tabela e editar suas propriedades. Para criar um campo calculado, dê um clique com o botão direito do mouse sobre o Editor de Campos e selecione a opção “New Field”, este comando abrirá a janela de criação de campo: Nesta janela você define o nome do campo, seu tipo, tamanho e categoria ( Data, Calculated ou Lookup ). No caso do campo calculado basta apenas definir o seu nome, tipo e tamanho e pronto. No caso de um campo Lookup é necessário especificar qual o campo chave do arquivo atual ( Key Fields ), qual o Table ligado a tabela de origem ( Dataset ) qual o campo chave da tabela de origem ( Lookup Keys ) e qual o campo que se deseja receber da tabela de origem ( Result Field ). O campo chave da tabela atual e o campo chave da tabela de origem devem ser do mesmo tipo para que possa haver um relacionamento. O valor de um campo calculado deve ser inserido no evento OnCalcField do componetne Table, neste evento você fará o código do calculo e atribuirá o resultado ao campo. O valor de um campo lookup é buscado automaticamente, o que é feito é o seguinte; o Delphi pesquisa no campo chave especificado da tabela de origem o valor do campo chave especificado da tabela atual, caso seja encontrado uma ocorrencia do valor é retornado para o campo lookup o valor do campo especificado no item Result Field. Um exemplo muito prático da utilização de campos Lookup é a nota fiscal. Você possui um cadastro de Fornecedores e na nota fiscal é inserido apenas o código deste fornecedor. Para exibir o nome do fornecedor você cria um campo lookup onde os itens ficariam configurados desta forma: Key Field : Seria o código do fornecedor na tabela de notas fiscais; Dataset : Seria o table que abre a tabela de fornecedores; Lookup Keys : Seria o código do fornecedor na tabela de fornecedores; Result Field : Seria o nome do fornecedor na tabela de fornecedores; Desta forma, sempre que fosse exibidos os dados de uma nota fiscal o Delphi iria pegar o código do fornecedor desta nota e procurar por este código na tabela de fornecedores, se encontrar uma ocorrencia o Delphi iria trazer devolta o valor contido no campo nome da tabela de fornecedores. Filtrando dados de uma tabela Uma forma eficiente de fazer um filtro de dados é através do componente Query, usando SQL. Porém o componente Table também permite que seja feito um filtro. Isto é feito através da propriedade Filter. Digamos que eu tenha uma tabela que contenha os seguinte campos: COMP_DATA COMP_FORNECEDOR Data - Data da compra Integer - Código do Fornecedor Nesta tabela eu quero que seja exibido somente as compras do dia “30/01/98” do fornecedor número “10”. Para que isto seja efetuado eu teria que inserir o seguinte texto na propriedade Filter do Table: COMP_DATA = ‘30/01/98’ and COMP_FORNECEDOR = 10 Eu teria ainda que definir a propriedade Filtered como true. Ligando as tabelas aos componentes de Edição de Dados A ligação entre os componentes de Edição de Dados e a tabela não pode ser feito diretamente, o intermediário nesta ligação é o componente DataSource. Nele a propriedade DataSet deve apontar para o componente Table. Quando você dá um clique sobre a propriedade DataSet é exibida uma caixa de listagem ao lado da propriedade, dando um clique nesta caixa é aberta uma lista onde irão aparecer os nomes de todos os componentes Table e Query disponíveis. Nos componente de Edição de Dados deve ser configuradas das propriedade DataSource que aponta para o DataSource correspondente e DataField que aponta para o campo do arquivo que este componente irá exibir. Quando você dá um clique sobre a propriedade DataSource é exibida uma caixa de listagem ao lado da propriedade, dando um clique nesta caixa é aberta uma lista onde irão aparecer os nomes de todos os componentes DataSource disponíveis. Há, porém, componentes de Edição de Dados que não precisam da definição da propriedade DataField, é o caso do componente DBGrid no qual apenas se aponta para o DataSource desejado e pronto, todos os campos da tabela são listados imediatamente. Criando um banco de dados Master Detail O banco de dados Master Detail é quando os dados de uma mesma entidade são armazenados em duas ou mais tabelas. Isto ocorre, por exemplo, no cadastro de notas fiscais, onde em uma tabela são armazenados os dados da nota como o seu número, data, fornecedor, etc, e em outra são armazenados os ítems desta nota. Este relacionamento é chamado de Master Detail porque existe uma tabela que é a mestre e as demais são filhas ou tabelas de detalhes. Nas tabelas de detalhes deve existir um campo que irá armazenar o código do registro com que se relaciona na tabela mestre. Para concretizar isto no Delphi é necessário que se utilize, pelo meno, dois componente DataSource e dois componente Table, onde um DataSource e um Table abrirão a tabela Mestre e o outro abrirá a tabela de detalhe. Na Table mestre o procedimento é normal, configure a propriedade DatabaseName para o álias ou diretório em que se encontram as tabelas e a propriedade TableName para o nome da tabela que se quer abrir e ative o componente. No DataSource mestre aponte a propriedade DataSet para o componente Table mestre. Na Table de detalhes existem mais duas propriedade que devem ser configuradas, são elas: MasterSource - Esta propriedade deve apontar para o DataSource mestre. MasterField - Esta propriedade deve apontar para o campo da tabela mestre que é a chave externa do relacionamento. Para configurar a propriedade MasterSource basta selecionar um dos componentes DataSource disponíveis, já a propriedade MasterField é necessário utilizar uma janela de diálogo que auxilina nesta configuração, a “Field Link Designer”: Onde: Available Indexes Detail Fields - é o Master Fields - são Joined Fields - são são os campos indexados disponíveis na tabela de detalhes; indice atual; os campos da tabela mestre; os campos que foram selecionados; Os campos que serão ligados devem ser do mesmo tipo e o campo da tabela de detalhes deve ser indexado. Criando consultas com SQL O componente utilizado para realizar consultas com SQL é o Query. Este componente é semelhante ao Table porém os seus dados é o resultado de uma consulta em uma ou mais tabelas. Para que este componente funcione adequadamente é necessário que se conifigure a propriedade DababaseName com o diretório ou álias em que se encontram as tabelas de dados. O comando SQL que irá realizar a consulta deverá ser inserido na propriedade SQL do componente. Assim que o componente é ativado ele imediatamente já realiza a consulta, mesmo em tempo de projeto. Noções de SQL A estrutura básica de um comando SQL é o seguinte: Select campos do arquivo From Arquivos Where condições de filtragem Na instrução Select você deverá inserir quais os campos do arquivo que deverão ser retornados. Este recurso é muito importante pois quanto menos campos fornem solicitados mais rápida será a consulta. Você deve inserir os nomes dos campos separados por virgula, caso você queira trazer todos os campos da tabela deverá inserir um sinal de asterísco “*” entre a instrução Select e From. Na instrução From você deverá inserir quais os arquivos que serão utilizados para a consulta separados por virgula. Este é um dos motivos pelo qual não se deve utilizar o mesmo nome de campos em tabelas diferentes, digamos que eu tenha duas tabelas, uma de Clientes e outra de Fornecedores, e nas duas tabelas eu tenho um campo que se chama NOME e eu quero trazer todos os nomes de meus cliente e fornecedores em uma única consulta, a instrução SQL seria a seguinte Select NOME From Clientes, Fornecedores Não há como a instrução saber a qual tabela pertence o campo nome e isto gera um problema. Na instrução Where você deverá inserir as opções de filtragem, por exemplo, se eu tivesse uma tabela Clientes com os seguintes campos: CLIE_CODIGO Integer CLIE_NOME String - Identificador do registro Descrição do Cliente Digamos que eu queira trazer os nomes dos clientes com código maior que 20, a instrução SQL seria a seguinte: Select CLIE_NOME From Clientes Where CLIE_CODIGO > 20 Comandos SQL Existem ainda comandos que são eles: auxiliam no desenvolvimento de uma consulta, Distinct – Retorna registros distíntos, ou seja diferentes uns dos outros; SUM() – Efetua uma soma de campos; AVG() – Retorna a média entre campos; MIN() – Retorna o número minimo de um campo; MAX() – Retorna o número máximo de um campo; COUNT() – Retorna o número de ocorrencias deste campo; Group by – Utilizado com o comando Sum(), este comando agrupa a soma á um valor de um registro chave; Order by – Ordena o resultado da consulta pelo campo determinado. Descending – Utilizado com o comando Order by define se a ordem deve ser decrescente. Extract – Utilizado para extrair o dia (day), mês(Month) ou ano(Year) de uma data. LIKE – Utilizado para pesquisar uma sub-string; Operadores SQL Os operadores utilizados para as comparações em SQL são os seguintes: * Matemáticos = + , - , / , * * Relacionais = > , < , = , <> , >= , <= * Lógicos = AND, OR, NOT Exemplos de comandos SQL a) Select * From Clientes Where CLIE_NOME LIKE “%Fabio%” Order by CLIE_CIDADE Retornará todos os campos da tabela Clientes que contenham no campo CLIE_NOME o texto Fabio ordenado pelo campo CLIE_CIDADE. b) Select Distinct CLIE_ENDERECO From Clientes Retornará o campo CLIE_ENDERECO da tabela de Cliente sendo que não será retornado registros repetidos. Select FAT_CLIENTE, Sum(FAT_VALOR) From Faturas Where FAT_CLIENTE in (10,20,30,40) Group by FAT_CLIENTE Retornará o campo FAT_CLIENTE e a soma do campo FAT_VALOR da tabela de Fatura onde FAT_CLIENTE esteja inserido no grupo (10,20,30,40) e irá agrupar a soma pelo código dos clientes. Select * From Compras Where Extract(Month From COMP_DATA) = 2 Retornará todos os campos da tabela de Compras onde o mês da data da compra seja igual a 2. Apostila Prática Exercício 1 Passos: Abra uma nova aplicação através do menu “File -> New Application”; Salve o Projeto com o nome Introduc.DPR e a unit como U_Int.PAS; Inclua um componente Button no formulário; Selecione o componente Button1; No Object Inspector insira o texto “&Fechar” na propriedade Caption; No Object Inspector selecione a palheta Events; Dê um duplo clique no evento OnClick; Insira o seguinte código: Form1.Close; Inclua um componente Edit no formulário; Inclua mais um componente Button no formulário; Selecione o componente Button2; No Object Inspector insira o texto “Alterar Título” na propriedade Caption; No Object Inspector seleciona a palheta Events; Dê um duplo clique no evento OnClick; Insira o seguinte código: Form1.Caption := Edit1.Text; Ajuste o tamanho do formulário para que ele fique parecido com a figura abaixo; Salve o projeto pressionando o botão Save All da palheta de ferramentas. Execute o projeto pressionando o botão Run da palheta de ferramentas. Descrição: Este programa não tem uma função útil, ele simplesmente altera o título da janela (Botão “Alterar Título”) e fecha a janela (Botão “Fechar”), mas é um bom exemplo de alterações de propriedades via código. Discussão do Código: Nós inserimos duas linhas de código: 1. Form1.Close – Chama o método Close do componente Form1. Este método fecha o formulário sem destruí-lo, ou seja, não o retira da memória. Como o formulário que estamos fechando é o formulário principal da aplicação a aplicação é encerrada. Outra forma de fechar a aplicação é utilizando o método Terminate do Objeto Application da seguinte forma : Application.Terminate; 2. Form1.Caption := Edit1.Text – Este código atribui o texto da propriedade Text do componente Edit1 na propriedade Caption do componente Form1. A propriedade Caption, no formulário, é responsável pela exibição do título, quando esta propriedade é alterada o título do formulário também o será automaticamente. É importante observar que as duas propriedades (Caption e Text) são do mesmo tipo (String), se isso não fosse verdadeiro seria necessário converter os tipos, isso será visto mais tarde. Exercício 2 Passos: Abra o projeto Introduc.DPR pressionando o botão Open Project da barra de Ferramentas. Inclua um componente RadioGroup no formulário; Dê um duplo clique na propriedade Items do componente RadioGroup e a janela String list editor será aberta: Insira as seguintes linhas nesta janela: MessageBox MessageDlg ShowMessage A propriedade ItemIndex do componente RadioGroup deve estar com o valor igual a –1, altere este valor para 0; Ajuste o formulário para que ele fique parecido com a figura abaixo: Selecione o botão “Alterar Título” e no seu evento OnClick insira o seguinte código: Form1.Caption := Edit1.Text; If RadioGroup1.ItemIndex = 0 then Application.MessageBox(‘Título alterado com sucesso’,’ATENÇÃO’,mb_iconexclamation + mb_ok) Else If RadioGroup1.ItemIndex = 1 then MessageDlg(‘Título alterado com sucesso’,mtInformation,mb_OK,0) Else If RadioGroup1.ItemIndex = 2 then ShowMessage(‘Título alterado com sucesso’); Salve o projeto pressionando o botão Save All da palheta de ferramentas. Execute o projeto pressionando o botão Run da palheta de ferramentas. Descrição: Este programa é uma continuação do anterior. Nesta versão é utilizada um RadioGroup para que o usuário selecione que tipo de mensagem quer ver quando a operação de alteração de título estiver concluída. Discussão do Código: Nós inserimos apenas uma rotina neste código: Form1.Caption := Edit1.Text Atribui o conteúdo da propriedade Text do componente Edit1 à propriedade Caption do componente Form1. If RadioGroup1.ItemIndex = 0 then Application.MessageBox(‘Título alterado com sucesso’,’ATENÇÃO’,mb_iconexclamation + mb_ok) Se o usuário selecionou a primeira opção do RadioGroup então é exibida uma mensagem com a função MessageBox. Else If RadioGroup1.ItemIndex = 1 then MessageDlg(‘Título alterado com sucesso’,mtInformation,mb_OK,0) Se o usuário selecionou a Segunda opção do RadioGroup então é exibida uma mensagem com a função MessageDlg. Else If RadioGroup1.ItemIndex = 2 then ShowMessage(‘Título alterado com sucesso’); Se o usuário selecionou a última opção do RadioGroup então é exibida uma mensagem com a função ShowMessage. Exercício 3 Passos: Selecione o menu “New -> New Applicatio”; Salve o projeto como “CONDIC.DPR” e o formulário como “PRINCIPA.PAS”; Inclua um botão no formulário e altere sua propriedade Caption para “&Fechar”; Selecione o formulário e no seu evento OnClick inclua o seguinte código: ShowMessage(‘Recebi um clique’); Selecione o botão e no seu evento OnClick inclua o seguinte código: If Application.Messagebox(‘Deseja realmente sair?’,’ATENÇÃO’, mb_Iconquestion + mb_yesno) = idyes then Close Else ShowMessage(‘Beleza’); Salve o projeto pressionando o botão Save All da palheta de ferramentas. Execute o projeto pressionando o botão Run da palheta de ferramentas. Descrição Este programa envia uma mensagem ao usuário toda vez que este dá um clique sobre o formulário e quando o usuário quiser sair ele é questionado. Discussão do Código: ShowMessage(‘Recebi um clique’); Este código foi inserido no evento OnClick do formulário e exibe a mensagem Recebi um clique. If Application.Messagebox(‘Deseja realmente sair?’,’ATENÇÃO’, mb_Iconquestion + mb_yesno) = idyes then Close Else ShowMessage(‘Beleza’); Este código foi inserido no evento OnClick do botão e chama uma caixa de mensagem através da função MessageBox. Caso o usuário tenha pressionado o botão Yes na caixa de mensagem é executado o método Close, que fecha o formulário, senão é enviada mais uma mensagem ao usuário (Beleza) Exercício 4 Crie um novo aplicativo e salve-o como Multi.DPR e Principa.PAS (O nome do arquivo DPR e do arquivo PAS não podem ser iguais). Inclua no form1 um componente MainMenu e crie o seguinte menu: Cadastro Clientes Fornecedores Produtos Sair Movimento Compras Vendas Serviços Consultas Relatórios Mala direta Inclua um novo formulário no projeto pressionando o botão New Form da barra de tarefas. Salve novamente o projeto e dê à unit1 o nome de Clientes.PAS; Guia de Referência 1 - Guia de Referencia - Componentes 1. Animate Componente da palheta Win95 que exibe animacoes AVI. Este componente e utilizado, geralmente em operacoe demoradas para distrair o usuario enquanto a operacao não for concluida. 2. Bevel Componente da palheta Additional utilizado para formatar o formulario. Este componente exibe linhas em alto ou baixo relevo, geralmente utilizadas para separar grupos de dados ou botoes. 3. BitBtn Componente da palheta Additional utilizado como ferramenta de interface com o usuario. Este e o botao mais completo do Delphi, ele tem e executa todas as funcoes dos demais botoes alem de outras. Este botao possui funcoes pre-determinadas em sua propriedade Kind e permite que seja inserida uma imagem em sua face. 4. CheckBox Componente da palheta Standart utilizado como ferramenta de interface com o usuario. Este componente tem a única e exclusiva funcao de indicar se uma condicao e verdadeira ou falsa, ou seja, quando ele esta checado significa que a condicao que ele representa e verdadeira, quando não significa que e falsa. 5. ComboBox Componenete da palheta Standart que consiste em uma caixa de edição onde o usuário pode inserir um texto e em uma lista de itens pré-determinados que podem ser selecionados. 6. DataSource Componente da palheta Data Access que estabelece a conexão entre componentes de acesso a bancos de dados e componentes que exibem os valores de campos de bancos de dados. 7. DBCheckBox Componente da palheta Data Controls que permite ao usuário selecionar ou não uma opção no aplicativo. Este controle é semelhante ao CheckBox, exceto que o seu valor está associado a um campo de um registro de um banco de dados. Quando o componente estiver selecionado, então a string armazenada em sua propriedade ValueChecked será igual à armazenada no campo correspondente do banco de dados. Se o componente não estiver selecionado, então a string armazenada em sua propriedade ValueUnChecked será igual à armazenada no campo correspondente do banco de dados. 8. DBComboBox Componente da palheta Data Controls que consiste em uma caixa de edição onde o usuário pode inserir valores e uma lista de itens que podem ser selecionados. Este componente é semelhante ao ComboBox, exceto que o seu vlor está associado a um campo de um registro de um banco de dados. Quando o usuário digita ou seleciona um item, a string correspondente será armazenada no campo respectivo do banco de dados. 9. DBCtrlGrid Componente da palheta Data Controls semelhante ao componente DBGrid, com a diferença de que este permite que se controle o layout e a aparência de cada registro de um banco de dados exibido em uma grade. Sua aplicação pode usar a grade para exibir, inserir, deletar ou editar campos do banco de dados associado. 10. DBEdit Componente da palheta Data Controls que consiste em uma caixa de edição onde o usuário pode digitar um texto. Este componente é semelhante ao Edit, exceto que o seu valor está associado a um compo de um registro de um banco de dados. Quando o usuário digita um texto na caixa de edição, a string correspondente será armazenada no campo respectivo do banco de dados. 11. DBGrid Componente da palheta Data Controls que permite o acesso aos dados de um banco de dados e exibi-los em uma grade. Sua aplicação pode usar a grade para exibir, inserir, deletar ou editar campos do banco de dados associado. 12. DBImage Componente da palheta Data Controls que permite exibir uma imagem armazenada em um campo de um registro de um banco de dados como um objeto BLOB (Bynary Large Object). 13. DBListBox Componente da palheta Data Controls que consiste em uma caixa de Listagem. Este controle é semelhante ao ListBox, exceto que o seu valor está associado a um campo de um registro de um banco de dados. Quando o usuário seleciona um item da caixa de listagem, a string correspondente será armazenada no campo respectivo do banco de dados. 14. DBLookupCombo Componente da palheta Data Controls que consiste em uma caixa combo que está associada aos campos de um banco de dados. Este componente é semelhante a ComboBox, exceto que o seu valor está associado a um campo de um registro de um banco de dados. 15. DBLookupListBox Componente da palheta Data Controls que consiste em uma caixa de listagem que está associada aos campos de um banco de dados. Este componente é semelhante ao ListBox, exceto que o seu valor está associado a um campo de um registro de um banco de dados. 16. DBMemo Componente da palheta Data Controls que exibe texto para o usuário e permite que o usuário digite dados no componente. Este componente é semelhante ao Memo, exceto que o seu valor está associado a um campo de um registro de um banco de dados. Quando o usuário digita um texto no componente, este texto será armazenado no campo respectivo do banco de dados. 17. DBRadioGroup Componente da palheta Data Controls que permite a exibição de um conjunto de botões de rádio que representam opções mutuamente exclusivas. Este componente é semelhante ao Radio Group, exceto que neste caso as opções represntadas pelos botões de rádio estão associadas a campos de registros de um banco de dados. 18. DBRitchEdit Componente da palheta Win32 que permite a exibição de uma grande quantidade de texto com a possibilidade de formatação do texto inserido. 19. DBText Componente da palheta Data Controls que permite a exibição de um texto em um formulário. Este componente é semelhante ao Label, exceto que neste caso o texto exibido está associado a um campo de um registro de um banco de dados. 20. Edit Componente da palheta Standart que pode inserir um texto. 21. Principal inseridos uma caixa consiste em uma caixa de edição onde o usuário Form componente de uma aplicação desenvolvida em Delphi, pois é nele que são os demais componentes. Este componente pode ser usado como uma janela, de diálogo ou qualquer tipo de formulário para entrada de dados. 22. GroupBox Componente da palheta Standart que permite agrupar componentes que se relacionam, como botões de rádio, por exemplo. 23. HTML Componente da palheta Internet que abre uma pagina HTML. 24. Image Componente da palheta Additional que exibe uma imagem em um formulário. 25. Label Componente da palheta Standart que permite a exibição de um texto em um Formulário. 26. ListBox Componente da palheta Standart que consiste em uma caixa de listagem na qual o usuário pode selecionar um ou mais itens. 27. MainMenu Componente da palheta Standart utilizado para moldar um menu no formulário. 28. MaskEdit Componente da palheta Additional que consiste uma caixa de edição especial, na qual o usuário só pode digitar um conjuto de caracteres definidos como válidos. 29. Memo Componente da palheta Standart que exibe um texto para o usuário e permite que o usuário digite dados no componente. Ao contrário do componente Edit, este componente permite múltiplas linhas. 30. OpenDialog Componente da palheta Dialogs que fornece uma caixa de diálogo padrão Windows para a abertura de arquivos. 31. Panel Componente da palheta Standart que permite que se coloquem painéis em formulário, nos quais podem ser inseridos outros componentes. 32. PopupMenu Componente da palheta Standart que cria um menu flutuante. 33. ProgressBar Componente da palheta Win95 utilizada para exibir o progresso da execução de uma tarefa. 34. QRDBText Componente da palheta Report que exibe em um relatório o valor de um campo de um banco de dados. 35. QRExpr Componente da palheta Report que executa uma expressão e exibe o resultado em um relatório. 36. QRSubDetail 37 . QRSysData Componente da palheta Report que exibe dados do sistema em um relatório. 38. QuickRep 39. RadioButton Componente da palheta Standart que permite ao usuário selecionar ou não uma opção do aplicativo. 40. RitchEdit Componente da palheta Win95 semelhate ao componente Memo, mas permite a aplicação de fontes com diferentes atributos a partes distintas do texto inserido no componente. 41. SaveDialog Componente da palheta Dialogs que fornece uma caixa de diálogo padrão do Windows para salvar arquivos. 42. SpeedButton Componente da palheta Additional que permite a inclusão de um bitmap na sua faze e normalmente é usado como botão de uma barra de ferramentas. 43. StatusBar Componente da palheta Win95 que permite que se exiba uma barra de status na janela principal de uma aplicação para transmitir informações ao usuário. 44. StringGrid Componente da palheta Additional que permite a exibição de um conjunto de strings e dados na forma de um arranjo de linhas e colunas. 45. Table Componente da palheta Data Access que permite o acesso a tabelas de bancos de dados. Esta componente é responsável pela abertura de um arquivo de dados. 46. Timer Componente da palheta System que dispara um evento OnTimer a intervalos regulares de tempo. - Propriedades AutoMerge Propriedade do tipo Lógica que determina se os menus de diversos formulários devem ser combinados automaticamente. Active Propriedade do tipo Lógico que diz se um componente está ou não ativo. ActiveControl Propriedade do tipo TwinControl, que indica o componente que possui o foco da aplicação. Align Propriedade do tipo Talign que determina como deve ser o alinhamento do componente em relação ao seu componente-pai (arqule que o contém). Valores AlNone O componente permanece no local em que foi colocado no formulário (valor default). AlTop O componente se desloca para o topo do componente-pai e é automaticamente redimensionado, de forma a ocupar toda a largura do componente-pai, mantendo-se a sua altura original. AlBottom O componente se desloca para a base do componente-pai e é automaticamente redimensionado, de forma a 0ocupar toda a lartgura do componente-pai, mantendo-se a sua altura original. AlLeft O componente se desloca para a extremidade esquerda do componente-pai e é automaticamente redimencionado, de forma a ocupar toda a altura do componente-pai, mantendo-se a sua largura original. AlRight O componente se desloca para a extremidade esquerda co componente-pai e é automaticamente redimensionado, de forma a ocupar toda a altura do componente-pai, mantendo-se a sua largura original. AlClient O componente é redimensionado para ocupar toda a área-cliente do componente-pai. Alignment Para os componentes CheckBox, DBCheckBox e RadioButton, esta propriedade determina como deve ser o alinhamento do texto da propriedade Caption do componente. Para o componente PopupMenu esta propriedade determina onde o menu flutuante deve aparecer quando o usuário clicar o botão direito do mouse. Para os componentes Label, Memo, QRLabel, Panel e RichEdit, esta propriedade define como deve ser o alinhamento do texto no componente. Valores para os componentes CheckBox, DBCheckBox e RadioButton. TaLeftJustify O texto é exibido do lado esquerdo do conponente. TaRightJustify O texto é exibido do lado direito do componente. Valores para o componente PopupMenu. PaLeftta O menu flutuante é exibido com o seu canto superior esquerdo sob o ponteiro do mouse PaCenter O menu flutuante é exibido com o centro da sua borda superior sob o ponteiro do mouse. PaRight O menu flutuante é exibido com o seu canto superior direito sob o ponteiro do mouse. Valores pra os componentes Label, Memo, QRLabel, Panel e RichEdit TaCenter O texto é exibido centralizado no componente. TaLeftJustify O texto é exibido do lado esquerdo do componente. TaRightJustify O texto é exibido do lado direito do componente. AllowDelete Propriedade do tipo Lógico que determina se o usuário pode deletar o registro corrente usando a combinação de teclas Ctrl+Delete. AllowGrayed Propriedade do tipo Lógico que determina se o componente pussuirá dois ou três estados. Se for igual a True, o componente poderá possuir três estados: cbChecked, cbUnchecked e cbGrayed. A diferença entre os estados cbGrayed e cbChecked é que no primeiro caso a marca de verificação aparece com uma cor cinza. AllowInsert Propriedade do tipo Lógico que determina se o usuário pode inserir ou adicionar um registro usando a tecla Insert ou Ctrl+Insert. AutoCalcFields Propriedade do tipo Lógico que determina se o evento OnCalcFields deve ser disparado quando a aplicação carrega um novo registro do Banco de Dados. AutoDisplay Propriedade do tipo Lógico que define se o conteúdo do componente deve ser exibido automaticamente. . AutoEdit Propriedade do tipo Lógico que define se os controles conectados aum componente DataSource estarão ou não em modo de edição constante. AutoSelect Propriedade do tipo Lógico que determina se o texto exibido pelo componente será selecionado quando este receber o foco da aplicação. AutoSize Propriedade do tipo Lógico que determina se o componente será automaticamente redimencionado para acomodar o seu conteúdo AutoScroll Propriedade do tipo Lógico que determina se o componente exibirá automaticamente as barras de rolagem quando não for grande o suficiente para exibir todos os componentes que contém. BorderIcons Propriedade do tipo TborderIcons que consistem em um conjunto de variáveis que determina os ícones a serem exibidos na barra de título de um formulário. Valores BiSystemMenu O formulário possui um menu de sistema. BiMinimize O formulário possui um botão de minimização. BiMaximize O formulário possui um botão de maximização. BorderStyle No Formulario esta propriedade é do tipo TformBorderStyle e determina o estilo de borda do componente. Para os demais componentes esta propriedade é do tipo TborderStyle e determina se o componente terá ou não uma borda. Valores para o Formulario BsDialog Borda não redimensionável, comum em quadros de diálogo. BsSingle Borda simples e redimensionável BsNone Borda invisível, não redimensionável, sem botões de maximização, minimização e menu de sistema. BsSizeable Borda padrão redimensionável. Valores para os demais componentes BsNone Sem borda BsSingle Borda Simples Cancel Propriedade do tipo lógico que indica se um componente Button ou BitBtn associa o seu evento OnClic ao pressionamento da tecla ESC. Caption Propriedade do tipo String que indica o rótulo exibido para o componente. Para transformar um dos caracteres do rótulo em uma tecla de atalho basta colocar um “E comercial” – (&) antes do caracter. Center Propriedade do tipo Lógico que determina se a imagem deve ser exibida centralizada no componente. Se for igual a False, o alinhamento da imagem e do controle é feito coincidindo-se a extremidade superior esquerda. CharCase Propriedade do tipo TeditCharCase que define se o texto exibido pelo componente deve aparecer apenas em letras maiúsculas, apenas em letras minúsculas ou em letras maiúsculas e minúsculas. Valores EcLowerCase Texto exibido em letras minúsculas. EcNormal Texto exibido em letras maiúsculas e minúsculas. EcUpperCase Texto exibido em letras maiúsculas. Checked Propriedade do tipo Lógico que determina se o componente está selecionado. Valores para os componentes CheckBox e DBCheckBox: True O componente está selecionado e apresenta uma marca de verificação na cor preta. False O componente não está selecionado; apresenta uma marca de verificação na cor cinza ou não apresenta uma marca de verificação. Valores para o componente RadioButton: True O componente está selecionado e apresenta um círculo na cor preta. False O componente não está selecionado e não paresenta um círculo na cor preta. ClientHeight Propriedade to tipo Inteiro que define a altura, em pixel, da área-cliente de um componente. ClientWidth Propriedade do tipo Inteiro que define a largura, em pixels, da área-cliente de um componente. ColCount Propriedade do tipo Inteiro que define o número de colunas do componente. Color Propriedade do tipo Tcolor que define a cor de fundo de um componente. Columns Propriedade do tipo Inteiro que indica o número de colunas do componente. CommonAVI Propriedade do tipo TCommonAVI que define qual a anivação padrão em um componente Animate. Ctl3D Propriedade do tipo Lógico que determina se o controle terá um aspecto tridimensional (True) ou bidimensional (False). Cursor Propriedade do tipo Tcursor que indica a imagem exibida pelo ponteiro do mouse quando este passa sobre o componente. DataField Propriedade do tipo String que indica o campo a que este componente corresponde no registro de um banco de dados. DataSet Propriedade do tipo TdataSet e indica o componente Table ou Query que representa um Banco de Dados ao qual o componente será associado. DataSource Propriedade do tipo TdataSource que indica o componente ao qual está vinculado o Banco de Dados cujos campos se quer exibir. Default Propriedade do tipo Lógico que indica se um componente Button ou BitBtn associa o seu evento OnClick ao pressionamento da tecla Enter. DefaultExt Propriedade do tipo TfileExt que especifica a extensão a ser adicionada ao nome de um arquivo quando o usuário digita o nome de um arquivo sem a sua extensão. DropDownAlign Propriedade que define o tipo de alinhamento do texto exibido na lista drop-down mostrada pelo componente. Valores: DaLeft Alinhamento à esquerda. DaCenter Alinhamento pelo centro. DaRight Alinhamento à direita. DropDownCount Propriedade do tipo Inteiro que define o número máximo de elementos a serem exibidos simultaneamente numa lista DropDown. DropDownRows Propriedade do tipo Inteiro que define o número de colunas a serem exibidos simultaneamente numa lista DropDown. DropDownWidth Propriedade do tipo Inteiro que define, em pixels, a largura da lista drop-down exibida pelo componente. EditMask Propriedade do tipo string que define a máscara que limita os dados que podem ser digitados no componente. Enabled Propriedade do tipo Lógico que define se o componente está habilitado (True) ou desabilitado (False). FileName Propriedade do tipo String que indica qual o nome de um arquivo utilizado por um componente. Filter Propriedade do tipo String que define a filtragem de uma seleção de dados. FixedColor Propriedade do tipo Tcolor e especifica a cor das colunas e linhas fixas em um componente de grade. Font Propriedade do tipo Tfont e controla os atributos do texto exibido por um componente. FormStyle Propriedade do tipo TformStryle que determina o estilo do formulário. Valores FsNormal Definição padrão de formulário. FsMDIChild O formulário será uma janela-filha de uma aplicação MDI. FsMDIForm O formulário será o formulário-pai de uma aplicação MDI. FsStayOnTop O formulário permanece sobre todos os outros formulários do projeto, exceto aqueles que também têm a propriedade FormStyle igual a fsStayOnTop. Glyph Propriedade do tipo Tbitmap que define o bitmap que aparece em um botão BitBtn ou SpeedButton. Height Propriedade do tipo Inteiro que define a dimensão vertical, em pixels, de um componente. HideScrollBars Propriedade do tipo Lógico que define se as barras de rolagem não devem ser exibidas quando não forem necessárias. HideSelection Propriedade do tipo Lógico que define se um texto selecionado permanece selecionado quando o componente perde o foco. Hint Propriedade do tipo string que contém o texto que é exibido ao usuário quando este deixa o cursor do mouse sobre o componente. Para que este texto seja exibido a propriedade ShowHint deve estar especificada como True. InitialDir Propriedade do tipo String que define o diretório inicial quando a caixa de diálogo é aberta. Items Propriedade do tipo Tstrings que define a lista de strings que aparecem no componente. KeyField Propriedade do tipo String que define o nome do campo do banco de dados definido na sua propriedade ListSource que corresponde ao compo definido na propriedade DataField. KeyPreview Propriedade do tipo Lógico que define se o formulário deve ou não responder a um pressionamento de tecla, através dos eventos OnKeyDown, OnKeyPress e OnKeyUp, em vez de acionar os eventos do componente. Kind Propriedade do tipo TbitBtnKind que define o tipo de Bitmap exibido pelo botão e a função do botão. Layout Propriedade do tipo TbuttonLayout que define onde o bitmap aparece em um botão BitBnt ou Speedbutton. Valores BlGlyphLeft A imagem aparece próxima ao lado esquerdo do botão. BlGlyphRight A imagem aparece próxima ao lado direito do botão. BlGlyphTop A imagem aparece próxima ao topo do botão. BlGlyphBottom A imagem aparece próxima à base do botão. Left Propriedade do tipo Inteiro que define, em pixels, a coordenada da extremidade esquerda de um componente em relação à extremidade esquerda do formulário que o contém. ListField Propriedade do tipo String que define o nome do campo do banco de dados cujos valor é exibido no componente. Se não for especificado um valor para esta propriedade, será usado o valor armazenado na propriedade KeyField. ListSource Propriedade do tipo TdataSource que define o nome do componente que faz a conexão com a tabela de dados do qual será selecionado um campo cujo valor será exibido pelo componente. Margin Propriedade do tipo Inteiro que define, em pixels, a distância entre um dos lados do bitmap e o lado correspondente do botão que o contém. MaxLength Propriedade do tipo Inteiro que define o número máximo de caracteres que podem ser digitados no componente. Orientation Propriedade do tipo Torientation que define se a orientação do componente será em Horizontal ou Vertical. Valores para componentes do tipo TPrinter PoPortrait Página impressa verticalmente. PoLandscape Valores para do tipo TDBCtrlGrid RoHorizontal Painéis internos dispostos horizontalmente. RoVertical Painéis internos dispostos verticalmente. PanelBorder Propriedade do tipo TDBCtrlGridBorder e define o tipo de borda desenhada ao redor de cada um dos seus painéis internos. Valores GbNone Painéis sem borda. GbRaised Painéis com bordas elevadas. PanelHeight Propriedade do tipo Inteiro que especifica a altura de cada painel do componente. PanelWidth Propriedade do tipo Inteiro que especifica a largura de cada painel do componente. ParentColor Propriedade do tipo lógico que define se o valor da propriedade Color do componente atual deve ou não ser igual à propriedade Color do seu componente-pai. ParentCtl3D Propriedade do tipo lógico que define se o valor da propriedade ctl3D do componente atual deve ou não ser igual à propriedade Ctl3D do seu componente-pai. ParentFont Propriedade do tipo lógico que define se o valor da propriedade Font do componente atual deve ou não ser igual à propriedade Font do seu componente-pai. ParentShowHint Propriedade do tipo lógico que define se o valor da propriedade ShowHint do componente atual deve ou não ser igual à propriedade ShowHint do seu componente-pai. PasswordChar Propriedade do tipo Char que permite a criação de uma caixa de edição que exiba caracteres especiais ao invés do texto digitado. Picture Propriedade do tipo Tpicture que define a imagem a ser exibida pelo componente. PlainText Propriedade do tipo lógico que define se o texto será exibido com um único tipo de formatação ou com atributos de formatação distintos. PopupMenu Propriedade do tipo TpopupMenu que define o nome do menu flutuante que aparece quando o usuário seleciona um componente e pressiona o botão direito do mouse. Position Propriedade do tipo Tposition que define o tamanho e posição de um formulário no momento em que ele aparece na sua aplicação. Valores PoDesigned O formulário aparece no mesmo tamanho e posição exibidos na fase de projeto PoDefault O formulário aparece com o tamanho e posição a serem definidos pelo Delphi. PoDefaultPosOnly O formulário aparece no mesmo tamanho exibido na fase de projeto, mas a posição é definida pelo Delphi. PoDefaultSizeOnly O formulário aparece na mesma posição exibida na fase de projeto, mas o tamanho é definido pelo Delphi. PoScreenCenter O formulário aparece no mesmo tamanho exibido na fase de projeto, mas a posição é sempre no centro da tela. QuickDraw Propriedade do tipo lógico que define se a imagem a ser exibida no componente deverá ser desenhada rapidamente e com qualidade inferior ou com qualidade superior. ReadOnly Propriedade do tipo Lógico que define se o componente é do tipo Somente Leitura ou não. Repetitions Propriedade do tipo Inteiro que define quantas vezes uma animação deve se repetir. Se esta propriedade for igual a 0 terão infinitas repetições. RowCount Propriedade do tipo Inteiro que define o número de linhas do componente. ScrollBars Propriedade do tipo TscrollStyle que define se o componente possui ou não barras de rolagem. Valores SsNone Nenhuma barra de rolagem SsHorizontal Barra de rolagem horizontal na base do componente SsVertical Barra de rolagem vertical do lado direito do componente. SsBoth Barras de rolamento horizontal e vertical. SelectedColor Propriedade do tipo Tcolor, e define a cor da gua selecionada em um componenteem um componente TabSet. Shape Propriedade que define o formato geométrico do componente. Valores para componente Bevel BsBox Forma de uma caixa. BsFrame Forma de um quadro. BsTopLine Apresenta uma linha no topo do componente. BsBottonLine Apresenta uma linha na base do componente. BsLeftLine Apresenta uma linha na lateral esquerda do componente. BsRightLine Apresenta uma linha na lateral direita do componente. ShowFocus Propriedade do tipo lógico que define se um retângulo de foco deve ser desenhado no painel que exibe o registro corrente. ShowHint Propriedade do tipo lógico que define se uma string de auxílio deve ou não ser exibida quando o usuário mantém o ponteiro do mouse sobre um componente. Stretch Propriedade do tipo lógico que define se uma imagem deve ser redimensionada de forma a assumir o tamanho do componente que vai exibi-la. Sorted Propriedade do tipo lógico que define se os items de um componente estão ordenados alfabeticamente. Spacing Propriedade do tipo Inteiro que define a distância, em pixels, entre a imagem gráfica e o texto. StartFrame Propriedade do tipo Inteiro que define em que quadro a animação deve iniciar. State Propriedade que define os vários estados que podem ser assumidos pelo componente. Valores para os componente CheckBox e DBCheckBox: CbUnchecked O componente não apresenta uma marca de verificação. CbCheckBox O componente apresenta uma marca de verificação na cor preta. CbGrayed O componente apresenta uma marca de verificação na cor cinza, indicando que o componente está num terceiro estado. Valores para os componentes DataSource, Table e Query. DsInactive O Banco de Dados está fechado. DsBrowse O Banco de Dados está sendo consultado. DsEdit O Banco de Dados está sendo editado. DsInsert O Banco de dados permite inclusão de registros. DsSetKey O Banco de Dados está definindo registros-chave. DsCalcFields O evento OnCalcFields foi acionado. Style Propriedade que define o estilo de apresentação de um componente. Valores para o componente Bevel BsLowered Apresenta-se me baixo relevo BsRaised Apresentase em alto relevo. Valores para o Objeto Tfont FsBold Negrito FsItalic Itálico FsUnderline Sublinhado FsStrikeOut A fonte é contrada por uma linha horizontal. Valores para o componente ComboBox CsDropDown Cria uma lista drop-down com uma caixa de edição na qual o usuário pode digitar o texto. CsSimple Cria uma caixa de edição sem uma lista drop-down. CsDropDownList Cria uma lista drop-down sem uma caixa de edição. CsOwnerDrawFixed Cria uma lista drop-down sem caixa de edição em que os itens podem ser qualquer objeto definido pelo usuário, e não apenas strings, sendo que todos têm altura fixa. CsOwnerDrawVariable Cria uma lista drop-down sem caixa de edição em que os itens podem ser qualquer objeto definido pelo usuário, e não apenas strings, sendo que não têm altura fixa. Valores para o componete ListBox LbOwnerDrawFixed Os itens podem ser qualquer objeto definido pelo usuário, e não apenas strings, sendo que todos têm altura fixa, definida pelo propriedade ItemHeight. LbOwnerDrawVariable Os itens podem ser qualquer objeto definido pelo usuário e não apenas strings, sendo que não têm altura fixa. LbStandard Todos os itens são strings e possuem mesma altura. Valores para componentes BitBtn e SpeedButton BsAutoDetect O bitmap possui o aspecto da versão do Windows sob a qual o aplicativo está sendo executado. BsWin31 O bitmap possui o aspecto da versão 3.1 do Windows, independente da versão do Windows sob a qual o aplicativo está sendo executado. BsNew O bitmap possui um novo aspecto, independente da versão do Windows sob a qual o aplicativo está sendo executados. StopFrame Propriedade do tipo inteiro que define que em quadro a animação deve parar. TabOrder Propriedade do tipo Inteiro que define a ordem segundo a qual os diversos componentes de um formulário recebem o foco da aplicação quando o usuário pressiona a tecla Tab. TabStop Propriedade do tipo lógico que define se um componente pode ou não receber o foco da aplicação quando o usuário pressiona a tecla Tab. Tag Propriedade do tipo Longint que é colocada em todos os componentes para que possa ser utilizada como for mais conveniente. Text Propriedade do tipo String que contém o texto inserido em um componente. TitleFont Propriedade do tipo Tfont que determina o tipo de fonte usada para exibir os títulos das colunas da grade. Top Propriedade do tipo Inteiro que define a coordenada da extremidade superior de um componente em relação à extremidade superior do formulário que o contém. Transparent Propriedade do tipo lógico que define se o componente será exibido com a cor definida na sua propriedade Color ou com a cor do componente sobre o qual está posicionado. ValueChecked Propriedade do tipo String cujo valor será atribuído a um campo de dados registro corrente quando o usuário selecionar o componente. do Values Propriedade do tipo Tstring que armazena uma lista de strings em que cada item vai corresponder a um possível valor de um campo em u registro do banco de dados. ValueUnchecked Propriedade do tipo String cujo valor será atribuído a um campo de dados do registro corrente quando o usuário retirar a seleção do componente. Visible Propriedade do tipo lógico que define se o componente aparece ou não na tela. WantReturns Propriedade do tipo lógico que define se a tecla Enter está habilitada em um componente. WantTabs Propriedade do tipo lógico que define se a tecla Tab está h