Usando as Ferramentas e Forms do Visual Basic

Objetos do Visual Basic

Uma das maiores vantagens da interface gráfica é que o usuário pode interagir com um conjunto padronizado de objetos, tais como janelas, botões e barras de deslocamento. Aplicativos que usam esses objetos padrões comportam-se de forma padrão, simplificando o aprendizado do aplicativo. Uma parte do trabalho do programador é selecionar o estilo de interação mais apropriado para a situação e escrever os seus programas de forma que o usuário ache-o intuitivamente.

Em um ambiente GUI (Graphical User Interface - Interface Gráfica com Usuário), o usuário interage com os objetos apresentados na tela, para dar início a eventos -abrir uma janela, dar um clique em um ícone, escolher um item de menu, e por meio disto, controlar o aplicativo. O Visual Basic transforma eventos iniciados pelo usuário em atividade programada, chamando o procedimento associado ao evento. A codificação que você insere no tal procedimento de evento implementa a resposta apropriada à interação com o objeto.

Uma Nota sobre Este Capítulo

Este capítulo descreve a maioria dos objetos que se encontram disponíveis quando você constrói aplicativos em Visual Basic, incluindo forms e os objetos criados pelas várias ferramentas contidas na caixa de ferramentas. Você já encontrou alguns destes objetos em capítulos anteriores; aqui, entretanto, terá uma visão mais aprofundada sobre algumas das propriedades que podem ser configuradas e como elas afetam os objetos, em eventos gerados quando o usuário manipula esses objetos em um aplicativo, e sobre alguns procedimentos e métodos que podem ser usados com os objetos. Também exploraremos o processo de criação e desenvolvimento de menus para seus aplicativos.

No final da maioria das seções deste capítulo, um projeto simples demonstra como você pode usar os objetos do Visual Basic que foram abordados. Os passos para a criação dos dois primeiros projetos foram colocados explícita e detalhadamente, entretanto, nos projetos subseqüentes, as recomendações serão mais genéricas - por exemplo, simplesmente avisando-o para criar um novo projeto, sem indicar de que forma fazer isso -, assumindo que você já saiba como proceder.

Geralmente, será decisão sua salvar ou não um aplicativo de exemplo. Na maioria dos casos, isso não é necessário. Porém, se você sabe que usará uma ferramenta específica ou objeto em um futuro próximo, poderá ser útil salvar o projeto associado, para poder posteriormente retornar a ele.

Você deve saber que as listas de propriedades, procedimentos, eventos e métodos apresentados neste capítulo não estão completas; ao contrário, o objetivo é fornecer-lhe as ferramentas suficientes para escrever programas úteis. Achamos que a apresentação da lista completa neste momento seria um tanto quanto exaustiva. Porém, caso necessite de informações adicionais, ela se encontra disponível no sistema de ajuda on-line. No CD que contém este manual, você pode encontrar uma tradução para o português da parte mais utilizada da ajuda on-line.

Observe que muitos dos objetos que serão descritos aqui têm propriedades idênticas ou suportam eventos semelhantes. Em tais casos, a descrição completa das propriedades, procedimentos, eventos, e assim por diante, não será repetida para cada objeto. Iniciaremos com a descrição dos forms; você encontrará uma descrição mais ampla nesta mesma seção.

Uma Nota sobre Sintaxe

A maioria das descrições de procedimentos e métodos inclui a sintaxe das instruções Visual Basic envolvidas. Nesta sintaxe das instruções, itens mostrados em itálico indicam que o tipo de informação deve ser fornecido; por exemplo, onde for visto o termo variável, deverá ser introduzido o nome de uma variável. Itens tipo romano (texto) indicam palavras-chave ou caracteres que devem ser colocados na forma em que estão sendo apresentados. Itens colocados entre colchetes ([ ]) são opcionais, isto é, a instrução será válida mesmo que os itens sejam omitidos. Itens entre chaves ({ }) que estejam separados por barra vertical ( | ) indicam uma escolha; você deve selecionar um dos itens dentro das chaves. Se um conjunto de colchetes ou chaves for seguido por reticências ( ... ), a seqüência dentro do conjunto de colchetes ou chaves pode ser repetida. Eis um exemplo:

O nome é [muito] {grande | pequeno} [e { espessa | tímida | verde }] ...

Segundo a notação sintática apresentada, você pode usar este exemplo para construir todas as frases abaixo:

A fábrica é muito grande.

O submarino é pequeno e verde.

A janela é muito pequena e espessa e tímida e verde.

Como se pode ver, sintaxe correta não produz necessariamente instruções com significado; você verá que é muito fácil escrever programas sintaticamente corretos, mas que não funcionam. Cuidaremos desse problema no Capítulo 7.

Forms

Como você aprendeu no Capítulo 1, forms são pranchetas onde o aplicativo é criado visualmente. Cada form corresponde a uma janela, quando o aplicativo estiver sendo processado.

Propriedades

Muitas propriedades podem afetar a aparência e o comportamento de um form quando ele é exibido; aqui, serão apresentadas apenas as propriedades usadas com maior freqüência. A menos que seja feita alguma observação em contrário, as propriedades podem ser configuradas por meio da janela de propriedades (Properties) enquanto você está desenvolvendo o seu aplicativo, ou então por meio de instruções executadas durante o processamento do programa.

AutoRedraw A propriedade AutoRedraw (discutida em detalhe quando falarmos de gráficos) controla como as imagens da tela são recriadas. Quando você volta ao form do Visual Basic, após trabalhar em outra janela que tenha sido sobreposta, o Visual Basic gerará ou traçará novamente qualquer gráfico sobre o form se a propriedade

AutoRedraw estiver configurada para True. Quando essa propriedade está configurada como False, o Visual Basic deve chamar um procedimento de evento para efetuar esse trabalho.

BackColor Esta propriedade determina a cor do fundo. Ao selecionar BackColor a partir da lista de propriedades, na janela de propriedades, vê-se a configuração default &H8000000F&, uma constante hexadecimal (base 16) que define uma cor Visual Basic. O Capitulo 10 fornece maiores detalhes sobre essas configurações de cores, porém não é necessário saber muito a seu respeito para configurar a propriedade BackColor: basta dar um clique no botão de seta para baixo à direita do valor padrão na janela de propriedades e o Visual Basic exibirá as opções de cores, como mostrado aqui:

Figura 5.1

Escolha a cor a partir da palheta, dando um clique no quadrado que contiver a cor desejada, ou então dê um clique fora da área da palheta para fechá-la.

BorderStyle Você pode configurar esta propriedade para um dos seis valores predefinidos. A propriedade BorderStyle pode ser configurada apenas em tempo de desenvolvimento. As configurações não afetam o form em tempo de desenvolvimento, porém modificarão a exibição da janela em tempo de execução, como segue:

Figura 5.2

Caption Esta propriedade contém o texto da barra de título da janela de form

ControlBox Esta propriedade booleana deve ser configurada para True se você desejar uma caixa para o menu de controle a ser exibido no canto superior esquerdo da janela. Você pode alterar esta propriedade apenas em tempo de desenvolvimento. Configurar esta propriedade para True não tem efeito se a configuração de BorderStyle for 0 - None.

Enabled Todo objeto Visual Basic tem a propriedade Enabled, que pode ser configurada para True ou False, ativando-se ou desativando-se o objeto. Para forms esta propriedade é normalmente configurada como True, porém você pode passá-la para False, para evitar que eventos de teclado ou mouse sejam enviados para o form.

FontBold, FontItalic, FontStrikethru, FontUnderline Você pode configurar estas propriedades booleanas para True se desejar que o texto a ser impresso no form apareça em negrito, em itálico, tachado ou sublinhado (ou ainda com qualquer combinação destas propriedades). Apenas os caracteres impressos após a modificação destas propriedades é que serão afetados pela nova configuração.

FontName A esta propriedade é assinalado o nome da fonte que será usada para impressões no form Quando esta propriedade é modificada, o texto já escrito sobre o form permanece com a fonte anterior. Por exemplo, se você executasse a codificação a seguir, a letra C seria impressa na fonte Courier New, e todas as outras seriam impressas em Times New Roman:

FontName = "Times New Roman"

Print "AB"

 

FontName = "Courier New"

Print "C"

FontName = "Times New Roman"

Print "DE"

FontSize Esta propriedade permite-lhe especificar o tamanho (em pontos) para o texto a ser impresso no form (Ponto é a unidade padrão tipográfica para mensuração de tamanho de tipos; 1 ponto equivale a 1/72 polegadas.) Como as anteriores, a modificação desta propriedade afeta apenas os textos que forem impressos após a mudança.

ForeColor Esta propriedade define a cor do texto ou gráfico. Você pode configurar esta propriedade com a palheta de cores, da mesma forma que a usou para configurar a propriedade BackColor. (Maiores detalhes no Capítulo 11.) Todas as instruções Print escrevem texto usando esta cor.

Height, Width Estas propriedades determinam a altura e o comprimento de um form, medidos na unidade chamada twips, ou seja, 1/20 de um ponto. (Um twip é equivalente a 1/1440 polegadas.)

Icon Você pode configurar esta propriedade para o nome de um arquivo contendo um ícone. Esse ícone representará o form, quando ele for minimizado. Para configurar esta propriedade em tempo de desenvolvimento, selecione-a a partir da lista de propriedades na janela de propriedades e então dê um clique no botão de reticências, que aparece ao lado da caixa de configurações para esta propriedade ao selecioná-la. Na caixa de diálogo resultante, escolha o arquivo de ícone. Se desejar configurar esta propriedade em tempo de execução, você deverá usar a função LoadPicture, ou assinalar o valor da propriedade Icon de algum outro form,

MaxButton, MinButton Você deve assinalar estas propriedades para True se desejar que os botões de minimização e maximização sejam exibidos no canto superior direito da janela. Estas duas propriedades serão ignoradas se a propriedade BorderStyle for configurada para 0 - None. Observe que esses botões não desaparecem do form, em tempo de desenvolvimento, mesmo que as propriedades MaxButton e MinButton tenham sido configuradas para False; o efeito dessa configuração é visível apenas em tempo de execução.

Name Esta propriedade define o nome do form, no código do programa. Não pode ser modificada em tempo de execução.

Picture Você pode configurar esta propriedade para indicar a imagem do tipo bitmap que sempre será exibida na janela. Para configurar esta propriedade em tempo de desenvolvimento, selecione-a a partir da lista de propriedades e dê um clique no botão de reticências que aparece à direita da caixa de configurações na janela de propriedades. Na caixa de diálogo resultante, escolha o arquivo contendo a imagem que você deseja exibir. Para alterar esta propriedade em tempo de execução, você deve usar a função LoadPicture.

Top, Left Estas propriedades controlam o posicionamento da janela em relação ao vídeo, definindo as coordenadas do ponto superior esquerdo da janela, calculadas em twips.

Visible A definição desta propriedade booleana indica quando a janela form, é ou não visível. Configurá-la para False faz com que o form, torne-se "invisível".

WindowState Esta propriedade determina quando a janela está exibida em seu estado normal (valor 0), minimizada como um Ícone (valor 1) ou em um estado maximizado (valor 2).

StartUpPosition Com esta propriedade você define a posição inicial do formulário na tela quando do seu carregamento. Pode ser configurada tanto em tempo de desenvolvimento quanto em execução. As seguintes constantes representam os valores válidos para a propriedade:

Figura 5.3

Eventos

Click (dar um clique), DlbClick (dar um clique duplo) e Load (carga) são os eventos mais comuns para um form processar. (O evento Keypress - pressionamento de tecla - e o processo de arrastar e soltar (drag-and-drop) serão apresentados nos Capítulos 6 e 7.)

Click Quando o usuário dá um clique no form, o Visual Basic chama o procedimento form_Click. Caso o clique seja dado em um objeto que se encontra no form, o evento Click não será passado para o form mesmo que o objeto em questão não processe o evento.

DblClick Este evento é recebido quando o usuário dá dois cliques em rápida sucessão no mesmo ponto do form, Este processo na realidade dispara dois eventos: o evento Click para o primeiro clique do mouse e o evento DbIClick para o segundo clique.

Load Este evento ocorre automaticamente sempre que o form, for carregado. Por exemplo, quando o aplicativo é iniciado.

Procedimentos e Métodos

Os métodos mais interessantes de um form, são gráficos. Por serem um tanto complexos, foi reservado um capítulo especial para eles (Capítulo 11). Neste momento, daremos uma pequena introdução a alguns métodos (e a uma função) para despertar o seu interesse.

Cls Este método provoca a limpeza de todos os textos e gráficos de um form. A sintaxe completa é a seguinte:

[formName].Cls

LoadPicture Você pode usar esta função para configurar a propriedade Picture de um form. Eis a sua sintaxe:

LoadPicture([fileName])

fileName deve ser uma expressão de string que identifique um arquivo contendo um ícone, um bitmap do Windows ou um metarquivo do Windows. (Esses nomes de arquivos têm sufixos bem característicos: ICO, BMP e WMF, respectivamente.)

Caso não seja especificado um nome de arquivo, load picture retornará uma imagem em branco.

Print Este método escreve texto em um form. Use a sintaxe:

[formName].print [[expressão][{;|,}]]...

Cada expressão é seguida por ponto e vírgula ou por vírgula. Se for usado (;) a saída da próxima expressão segue imediatamente o último caractere escrito. Se for usado (,), a posição de saída no form será tabulada para a próxima coluna. (Colunas são definidas a cada 14 caracteres.) Caso a expressão final na instrução Print não termine com (;) ou(,), a posição do próximo caractere a ser escrito no form será configurada para o início da próxima linha. Eis aqui alguns exemplos de uso do método Print na janela Immediate:

Figura 5.4

Por mais estranho que possa parecer, o método Print na realidade é um método gráfico; você encontrará maiores informações a respeito no Capítulo 12.

O Aplicativo Sorriso

Agora, tente construir este projeto simples, que demonstra algumas configurações de propriedades, métodos e procedimentos associados a forms.

Inicie o aplicativo Paint no Windows 95, desenhe uma imagem simples e salve-a em seu disco fixo. Eis um exemplo, usando um famoso ícone cultural dos anos 70, que chamaremos de Sorriso.bmp.

Figura 5.5

Retorne ao Visual Basic e crie um novo projeto com a opção New Project do menu File

Na janela de propriedades, selecione a propriedade Picture da lista de propriedades e dê um clique no botão de reticências à direita do campo de configurações. A caixa de diálogo Load Picture aparece:

Figura 5.6

Use a caixa de diálogo para localizar o arquivo gráfico criado pelo Paint e dê um clique no botão Abrir. A versão do form agora está parecida com:

Figura 5.7

Abra a janela de código para Form1, clicando no botão View Code na janela do Explorador de Projeto ou com um clique duplo no form.

Selecione Form na caixa Object no topo da janela de código e então selecione Click na caixa de procedimentos. Introduza o código necessário para criar o procedimento Form_Click, como mostrado abaixo:

Private Sub Form_Click ()

Form1.Print "Tenha um ";

Form1.FontBold = True

Form1.Print "bom";

Form1.FontBold = False

Form1.Print " dia"

End Sub

Selecione o procedimento DlbClick na caixa de procedimentos. Introduza a linha de código para criar o procedimento Form_DbIClick, como mostrado a seguir:

Sub Form_DbIClick()

Form1.Cls

End Sub

Execute agora o aplicativo, escolhendo a opção Start do menu Run, dando um clique no botão Start da barra de ferramentas ou pressionando F5. Dê cliques em vários pontos do form O aplicativo deveria comportar-se como mostrado aqui:

Figura 5.8

8. Enquanto o aplicativo estiver sendo processado, tente dar um clique duplo no form Isso fará com que seu programa execute o procedimento Form_DbIClick. Se você examinar atentamente, verá que o procedimento Form_Click é executado antes que o procedimento Form_DbIClick limpe o form Além disso, repare que o método Cls limpa apenas as informações que foram adicionadas ao form e não a imagem de fundo.

O código escrito para esse exemplo é muito específico. Por exemplo, tanto o método Print quanto a propriedade FontBold fazem referência explícita ao form Form1, Em certas ocasiões, essa especificidade pode causar problemas. Para ilustrar, deixe o aplicativo (pressionando Alt-F4 ou dando um clique no botão End da barra de ferramentas) e retorne ao modo de desenvolvimento. Agora, altere a propriedade Name do form para Sorriso. Em seguida, tente executar o programa novamente. O Visual Basic exibirá a mensagem de erro mostrada na Figura 5.9.

O Visual Basic está reclamando que não conhece o objeto chamado de Form1, Realmente, o seu programa não contém tal objeto; o único form agora se chama Sorriso.

Figura 5.9 A mensagem de erro objeto não definido

A modificação dos nomes dos forms pode demandar um tempo considerável, principalmente quando se tornar necessário incorporar pedaços de um programa em outro. O Visual Basic oferece um mecanismo que permite evitar esse tipo de problema. Métodos e propriedades, tais como variáveis, também têm escopo. Caso o nome de propriedades ou métodos sejam usados sem referência explícita ao objeto o que pertencem, o Visual Basic usará o contexto da execução presente para determinar qual o objeto envolvido. Se você eliminar todas as referência ao Form1, o código do aplicativo Sorriso ficará assim:

Sub Form_Click ()

Print "Tenha um ";

FontBold = True

Print "bom";

FontBold = False

Print " dia"

End Sub

Sub Form_DbIClick ()

CIS

End Sub

Uma vez que os procedimentos Form_Click e Form_DbIClick sempre são executados levando-se em consideração o contexto do form (independentemente do nome do Form), os métodos Print e CIs e a propriedade FontBold devem estar dentro do escopo do form atual. Assim, o código que você cria será mais genérico.

(Além disso, haverá menos digitação a ser feita.)

Caixas de Imagem e Imagens

Os controles de caixa de imagem e imagens permitem-lhe colocar informações gráficas em posições especificas do form As ferramentas Caixa de Imagem e Imagens da caixa de ferramentas são mostradas nas Figuras 5.10 e 5.11. A caixa de imagem é o controle mais flexível, portanto seu uso demanda mais memória e tempo de processamento. As caixas de imagem são mais indicadas para o tratamento de ambientes dinâmicos - por exemplo, quando você está traçando gráficos diretamente sobre o vídeo, enquanto o programa está executando ou deslocando um ícone pela tela para gerar o efeito de animação. (Métodos gráficos, que lhe permitem traçar linhas e imprimir textos, encontram-se descritos no Capítulo 11.) Quando se tratar de situações estáticas, é mais recomendável o uso de objetos de imagens - isto é, quando ícones ou imagens bitmap que você criou e colocou sobre a tela não são modificados.

Figura 5.10 A ferramenta Caixa de Imagem.

Figura 5.11 A ferramenta Imagem.

Propriedades

Os controles de caixa de imagem e imagem têm as propriedades Enabled, Height, Left, Name, Picture, Top, Visible e Width. A maioria dessas propriedades comporta-se exatamente como descrito na seção precedente sobre forms exceto pelo fato de as coordenadas para as propriedades Height, Left, Top e Width serem medidas com relação à localização do objeto dentro do form e não em termos de sua posição absoluta na tela. (Isso é válido para todos os controles criados a partir da caixa de ferramentas.) A propriedade Picture pode ser configurada para exibir uma imagem bitmap ou um ícone. Em tempo de desenvolvimento, use a janela de propriedades e a caixa de diálogo Load Picture (como será usada no projeto simples que se segue); em tempo de execução, é necessário usar a função LoadPicture.

Caixas de imagem, que apresentam comportamento semelhante a pequenos forms colocados dentro do form principal, possuem algumas propriedades a mais que o controle de imagem: AutoRedraw, FontBold, FontItalic, FontName, FontSize, FontUnderline. Essas propriedades comportam-se do mesmo modo que para o form. Controles de imagens têm uma propriedade que as caixas de imagem não têm: a propriedade Stretch. Por default, essa propriedade é configurada para False, fazendo com que o controle de imagens se redimensione para acomodar a imagem que ele contém. Quando a propriedade Stretch for True, o redimensionamento é feito sobre a imagem, de forma a caber dentro do controle.

Os controles caixas de imagem e imagens ainda diferem em um aspecto. A exibição de um form. é composta por três camadas, conforme ilustrado pela Figura 5.12. Toda e qualquer informação exibida diretamente sobre o form. (por exemplo, mediante impressão ou desenho com métodos gráficos) será colocada na camada inferior. Informações geradas a partir dos três controles gráficos (imagens, forma e controle de linhas) aparecem na camada intermediária e todos os outros objetos são exibidos na camada superior. Em função disso, texto impresso no form. poderá ser sobreposto por uma caixa de imagem.

Figura 5.12 As camadas de exibição de um form.

Eventos

A exemplo dos forms os controles caixas de imagem e imagens também podem receber os eventos mais simples que ocorrem com maior freqüência: Click e DbIClick.

Métodos e Procedimentos

A função LoadPicture pode ser chamada para configurar a propriedade Picture de uma caixa de imagem ou do controle de imagens. Caixas de imagens suportam tanto os métodos CIs e Print quanto os métodos gráficos descritos no Capítulo 11.

A Palheta de Símbolos

Este projeto simples faz com que você use uma série de imagens para criar uma palheta de ícones semelhante à caixa de ferramentas do Visual Basic. Este programa deveria funcionar da mesma forma, seja com caixas de imagem, seja com controles de imagens; lembre-se, no entanto, de que as caixas de imagens são menos eficientes para o tratamento de situações estáticas.

Crie um novo projeto em Visual Basic, com a opção New Project do menu File.

Configure as propriedades do form. conforme mostrado a seguir. (A notação [vazio] indica que a configuração dever ser uma string vazia.)

Propriedade Configuração

BorderStyle 1 - Fixed Single

Caption [vazio]

MaxButton False

MinButton False

Name Simbolos

Dê um clique na ferramenta Imagem da caixa de ferramentas e arraste o ponteiro do mouse no form para criar um pequeno controle de imagem no canto superior esquerdo do form:

Figura 5.13

Crie mais três controles de imagem do mesmo tamanho, dispondo-os dois a dois. Para realizar essa tarefa com mais facilidade, selecione o primeiro controle imagem criado e dê um clique no botão de Copiar na barra de ferramentas; clique então no botão de Colar; responda não à caixa de diálogo que perguntará se você quer criar uma matriz de controles; uma cópia do controle será colada sobre o primeiro; para movimentar com precisão o novo controle, mantenha a tecla Ctrl pressionada e use as teclas de seta para movimentá-lo na direção desejada. Com o mouse redimensione o contorno da janela do form para acomodar apenas os quatro controles de imagem. Agora, o seu form deve estar parecido com:

Figura 5.14

Dê um clique no controle de imagem superior esquerdo do form (Image1) para selecioná-lo. Na janela de propriedades, selecione a propriedade Picture para Image1, a partir da lista de propriedades. A seguir, dê um clique no botão de reticências, à direita da propriedade selecionada, para abrir a caixa de diálogo Load Picture (mostrada anteriormente). Na caixa de diálogo, configure o tipo de arquivo para exibir arquivos de ícones (com extensão ICO). Você poderá encontrar os quatro arquivos de ícone que usaremos neste projeto na pasta ...\PacoteVB\Icones\Misc\ no primeiro cd deste produto. Selecione o arquivo CLUB.ICO e clique em abrir na caixa de diálogo LoadPicture. Ao escolher esse arquivo, o ícone que ele contém aparecerá no controle de imagem selecionado:

Figura 5.15

Dê um clique duplo na imagem e defina o seguinte procedimento na janela de código:

Private Sub lmage1_Click ()

Debug.Print "Selecionado Paus"

End Sub

Repita esse mesmo processo para os outros três controles de imagem, carregando os arquivos DIAMOND.ICO, HEART.ICO e SPADE.ICO e definindo os três procedimentos Click como mostrado a seguir:

Private Sub Image2_Click ()

Debug.Print "Selecionado Ouro"

End Sub

Private Sub Image3_Click ()

Debug.Print "Selecionado Copas"

End Sub

Private Sub Image4_Click ()

Debug.Print "Selecionado Espada"

End Sub

8. Para separar visualmente os ícones, você pode colocar bordas ao seu redor. Dê um clique na imagem no canto superior esquerdo para selecioná-la e então, mantendo a tecla Ctrl pressionada, dê um clique nas outras três imagens para selecionar as quatro ao mesmo tempo. Selecione a propriedade BorderStyle na lista de propriedades da janela de propriedades e configure-a para 1 - Fixed Single.

Quando você executar o aplicativo (pressionando F5), o seu form será a palheta "Símbolos". Dando cliques em alguns dos ícones, você deverá ver um resultado semelhante ao mostrado na Figura 5.16.

Figura 5.16 Usando a palheta de símbolos.

Ao incluir uma codificação semelhante em um aplicativo maior, você pode criar uma palheta de ícones apropriada ao programa. A caixa de ferramentas do Visual Basic, que é usada em tempo de desenvolvimento, é um exemplo desse tipo de palheta.

Dica: Se você tem o Visual C++ instalado no seu sistema, pode utilizar-se do editor de ícones que o acompanha. Entre no Visual C++ e escolha a opção New do menu File. Entre as opções apresentadas na janela New escolha a ficha File. Será exibida uma relação de tipos de arquivos dentre os quais está a opção "Icon File". Ao selecionar esta opção, será aberto o editor de ícones para que você crie um novo ícone para a sua aplicação. Para informar-se sobre como utilizá-lo procure mais informações no help do próprio Visual C++.

Rótulos

Um rótulo oferece uma área na qual você pode apresentar informação textual que não poderá ser editada pelo usuário. O conteúdo é configurado pela propriedade Caption do rótulo. Você não pode imprimir ou desenhar um rótulo. Os rótulos devem ser criados com a ferramenta Rótulo da caixa de ferramentas do Visual Basic, mostrada na Figura 5.17.

Figura 5.17 A ferramenta Rótulo.

Propriedades

Os rótulos têm as propriedades FontBold, FontItalic, FontName, FontSize, FontUnderline, Height, Left, Name, Top, Visible e Width, que operam de forma padrão. Algumas propriedades adicionais são apresentadas a seguir:

Alignment Esta propriedade determina o alinhamento do texto (propriedade Caption) em relação ao rótulo. Por default, a propriedade Alignment é configurada para 0, o que provoca alinhamento à esquerda. Você pode ainda configurar o alinhamento para 1 -Right Justify (justificado à direita) ou 2 - Center (centralizado).

AutoSize Se esta propriedade for True, o rótulo é automaticamente redimensionado para conter o texto especificado pela propriedade Caption. Se for False, o rótulo manterá o tamanho definido em tempo de desenvolvimento; nesse caso, se o texto for muito longo, ele será truncado.

BorderStyle Esta propriedade pode ser 0 (default) para o rótulo não conter borda ou 1 para ter borda simples.

Caption A propriedade Caption contém o texto a ser exibido no campo de rótulo ou numa área da tela.

Enabled Esta propriedade é normalmente configurada como True. Porém, você pode passá-la para False, para dar um tom acinzentado ao texto, desabilitando qualquer evento associado ao mouse

Eventos

Os objetos do tipo rótulo recebem os eventos Click e DlbClick da mesma forma que caixas de imagem, controles de imagem e forms.

Procedimentos e Métodos

Objetos de rótulos são adequados para exibir pequenos blocos de texto. Uma vez que os textos que serão exibidos são definidos simplesmente pela configuração da propriedade Caption, nenhum dos métodos associados com rótulos é de grande utilidade ou necessário para programadores iniciantes.

Modificando o Aplicativo Cronômetro

Façamos mais uma modificação no programa Cronômetro criado no Capítulo 1. Nesse programa, você usou caixas de texto para exibir a saída do aplicativo. Como você deve lembrar-se, caixas de texto podem ser modificadas pelo usuário. Para ilustrar isso, carregue e execute o aplicativo. Depois de parar o cronômetro, selecione o texto na caixa Hora Inicial e digite xyz - muito estranho, não? Evidentemente, é um tanto difícil saber por que o usuário desejaria fazer isso, no entanto, é comum programadores gastarem longas noites solitárias imaginando por que os usuários fazem o que fazem. Seja como for, para evitar esse tipo de problema no seu aplicativo, uma solução é usar rótulos em vez de caixas de texto.

Termine a execução do aplicativo e retorne ao modo de desenvolvimento. Elimine as três caixas de texto, dando um clique em cada uma para selecioná-las, e então pressione a tecla DeI ou escolha a opção Delete do menu Edit. No lugar das caixas de texto, desenhe três rótulos.

Configure a propriedade BorderStyle de cada rótulo para 1 - Fixed Single, para criar uma linha de borda simples. Remova qualquer texto que apareça no área de valor para a propriedade Caption, deixando essa propriedade configurada como uma string vazia para cada um dos rótulos.

Configure a propriedade Name do rótulo superior para IblInicial. Em seguida, configure a propriedade Name do rótulo intermediário para IbIFinal e a propriedade Name do rótulo inferior para IblDecorrido.

Nota: A abreviatura lbl provém da palavra Label, que em inglês significa rótulo

Você deve ainda modificar a codificação para os botões Iniciar e Parar. A versão anterior do programa exibia seus resultados, assinalando a propriedade Text das caixas de texto. No entanto, no caso dos rótulos, é necessário usar a propriedade Caption em vez da propriedade Text. E, naturalmente, você substituiu as caixas de texto por rótulos. É preciso que você edite os procedimentos Click dos dois botões, para que todas as referências à propriedade Text das caixas de texto sejam corrigidas. O seu novo código deveria parecer-se com:

Private Sub btnlniciar_Click ()

TempoInicial = Now

IblInicial.Caption Format(TempoInicial, "hh:mm:ss")

IbIFinal.Caption = ""

lblDecorrido.Caption = ""

btnParar.Enabled = True

btnIniciar.Enabled = False

End Sub

Private Sub btnParar_Click ()

TempoFinal = Now

TempoDecorrido = TempoFinal - TempoInicial

IbIFinal.Caption = Format(TempoFinal, "hh:mm:ss")

lblDecorrido.Caption = Format(TempoDecorrido, "hh:mm:ss")

btnParar.Enabled = False

btnIniciar.Enabled = True

End Sub

Execute o aplicativo novamente para testar as suas modificações. A aparência deveria ser exatamente igual à de quando você executou o aplicativo no Capítulo 1, porém agora não é mais possível selecionar e modificar o texto exibido na tela.

Caixas de Texto

Até agora, você trabalhou com caixas de texto, usando a ferramenta Caixa de Texto mostrada na Figura 5.18. A sua simples colocação no form cria uma área na tela na qual o usuário pode introduzir texto.

Figura 5.18 A ferramenta Caixa de Texto.

Propriedades

As caixas de texto têm as propriedades padrões BorderStyle, Enabled, FontBold, FontItalic, FontName, FontSize, FontUnderline, Height, Left, Name, Top, Visible e Width, e as seguintes propriedades:

Locked Você pode rolar o texto e selecioná-lo, mas não pode editá-lo. O programa ainda pode modificar o texto atribuindo valores à propriedade Text.

MaxLength Esta propriedade normalmente é configurada para 0 (por default), indicando que a caixa de texto deverá aceitar tantos caracteres quantos o usuário digitar. Caso esta propriedade seja configurada para um valor diferente de zero, o Visual Basic restringirá a entrada do usuário ao número de caracteres especificado.

MultLine Na maioria das vezes, você desejará configurar esta propriedade de forma que o usuário introduza apenas uma linha de texto. Caso esta propriedade seja configurada para True, o usuário poderá pressionar a tecla Enter, fazendo com que o texto continue na próxima linha.

PasswordChar Esta propriedade controla quando a caixa de texto é um campo de senha. Ao introduzir um texto num campo de senha, os caracteres mostrados são diferentes dos caracteres digitados. Por default, esta propriedade é configurada para uma string vazia, indicando que o usuário verá os caracteres que introduziu. Caso a propriedade seja configurada para um caractere, tal como asterisco (*), será exibido um asterisco a cada caractere introduzido pelo usuário. Observe que o conteúdo real da caixa de texto é configurado para o texto digitado pelo usuário; apenas a exibição é afetada.

ScrollBars Você pode configurar esta propriedade para 0 (sem barras de deslocamento na caixa de texto), 1 (apenas barra de deslocamento horizontal), 2 (barra de deslocamento vertical) e 3 (barras de deslocamento horizontal e vertical).

SelLength Esta propriedade indica a quantidade de caracteres atualmente selecionados. O seu valor se modifica à medida que o usuário seleciona texto na caixa de texto. Você também pode alterar o texto selecionado via programa, configurando essa propriedade para um valor inteiro. Se SelLength for 0, não há nenhum caractere selecionado. Essa propriedade, junto com SeIStart e SeIText, apenas pode ser acessada em tempo de execução. (Não pode ser configurada em tempo de desenvolvimento.)

SeIStart O valor armazenado nesta propriedade indica-lhe a posição do texto onde se inicia a seleção atual. O valor 0 indica que a seleção (ou ponto de inserção) inicia-se antes do primeiro caractere, o valor 1 indica que a seleção começa antes do segundo caractere, e assim por diante. O valor desta propriedade pode ser alterado com instruções de assinalamento.

SeIText Nesta propriedade é armazenada a string de texto atualmente selecionada. Se não houver qualquer seleção, esta propriedade contém uma string vazia. Caso venha a alterar o conteúdo desta propriedade, você fará com que o texto selecionado anteriormente seja substituído pelo novo texto. Por exemplo, se uma caixa de texto contiver a linha "Francamente, meu claro, eu não me importo com isto" e for selecionada a palavra "claro", você pode corrigir a frase, executando a instrução Text1.SeIText = "caro". Observe que isso também modificará o valor da propriedade SelLength. Por outro lado, como a seleção inicia-se na mesma posição, a propriedade SelStart não será alterada.

Text O programa lê esta propriedade para ver o que o usuário digitou. O programa também pode alterar a propriedade Text para modificar o texto que está sendo exibido.

Eventos

Caixas de texto podem monitorar cada tecla pressionada pelo usuário. Veremos mais a respeito de eventos de teclado no Capítulo 6.

Change Este evento será sinalizado quando a propriedade Text de uma caixa de texto vier a ser modificada, seja pelo usuário, seja pelo próprio programa, que pode assinalar um novo valor para a propriedade Text. Observe que, quando o usuário digitar a palavra Alô, este evento será disparado três vezes, uma para cada letra digitada.

LostFocus Este evento é sinalizado quando o usuário pressiona a tecla Tab para se mover para outro lugar, ou usa o mouse para selecionar algum outro objeto no form. Se você quiser examinar o conteúdo da propriedade Text, normalmente será mais eficiente fazê-lo como parte do procedimento de evento LostFocus. O procedimento de evento Change, como se viu, é acionado a cada letra digitada.

Procedimentos e Métodos

O método mais útil associado às caixas de texto é SetFocus, que coloca o cursor em uma caixa de texto específica. Quando você cria um form. com múltiplas caixas de texto, pode usar este método para direcionar a atenção do usuário para a caixa de texto mais importante. A sintaxe é simples:

[object.]SetFocus

 

  Novidades do Visual Basic 6.0

 

O Aplicativo NotasEdit

Até agora, você usou caixas de texto para textos simples de uma única linha; vejamos agora como as caixas de texto se comportam com linhas múltiplas, implementando um pequeno bloco de notas que permita cortar, colar e fazer edições simples.

Inicie abrindo um novo projeto. Configure as propriedades Caption e Name do form. para NotasEdit. Crie uma caixa de texto no form. e configure as suas propriedades como segue:

Propriedade Configuração

MultLine True

Name TxtBox

ScrollBars 3 - Both

Text [vazio]

Após isso, o seu form. NotasEdit deverá parecer-se com:

Figura 5.19

A caixa de texto trabalhará com o texto introduzido e fará edição sem que seja necessário escrever alguma instrução. Quando você processar o aplicativo, poderá introduzir texto, editá-lo, cortá-lo, copiá-lo e colá-lo com essas teclas de atalho padronizadas pelo Windows: Ctrl-X, Ctrl-C e Ctrl-V.

Para tornar esse aplicativo mais profissional, você poderá fazer com que a caixa de texto ocupe inteiramente a janela do form. Para tanto, edite o procedimento ReSize do form. como abaixo:

Private Sub Form_ReSize()

TxtBox.Top = 0

TxtBox.Left = 0

TxtBox.Width = ScaleWidth

TxtBox.Height = ScaleHeight

End Sub

Esse procedimento será executado toda vez que o form for redimensionado, inclusive na primeira vez em que for exibido. Configurando as propriedades Top e Left da caixa de texto para 0, você assegura que o seu canto superior esquerdo seja colocado no topo do form. como mostrado na Figura 5.20. As propriedades Width e Height da caixa de texto foram configuradas para ficar de acordo com as propriedades ScaleWidth e ScaleHeight do form. (as dimensões totais da área de exibição do form. Observe que você poderia ter escrito essas duas linhas como: TxtBox.Width = NotasEdit.ScaleWidth e TxtBox.Height = NotasEdit.ScaleHeight. Porém, como as instruções sempre serão executadas no contexto do form. não é necessário fazer referência ao nome do form. Além disso, se o nome do form viesse a ser modificado posteriormente, seria preciso alterar a codificação.

Figura 5.20 Processando o aplicativo NotasEdit redimensionado.

Botões de Comando, Caixas de Checagem e Botões de Opção

Estes três objetos do Visual Basic, sob o ponto de vista dos programadores, são muito semelhantes. No entanto, para o usuário final, eles diferem visualmente, prestando-se a propósitos distintos. Botões de comando normalmente disparam uma ação (isto é, um comando a ser executado) quando recebem um clique, enquanto caixas de checagem e botões de opções indicam estados e permitem ao usuário alterar o estado. O usuário dá cliques nas caixas de checagem para selecionar ou cancelar um certo recurso; quando um sinal aparece na caixa de checagem, a característica é selecionada, ou é habilitada. Cada caixa de checagem opera independentemente. Ao contrário, os botões de opção aparecem em conjunto e permitem ao usuário escolher uma opção do conjunto. Quando um botão de opção de um conjunto é acionado, todos os outros são desabilitados. (Botões de opção são algumas vezes chamados de botões de rádio.)

As ferramentas da caixa de ferramentas usadas para criar esses três tipos de objetos do Visual Basic são mostradas nas Figuras 5.21, 5.22 e 5.23.

Figura 5.21 A ferramenta Botão de Comando.

Figura 5.22 A ferramenta Caixa de Checagem.

Figura 5.23 A ferramenta Botão de Opção.

Propriedades

Botões de comando, caixas de checagem e botões de opção, dentre outros, possuem as propriedades: Caption, Enabled, FontBold, FontItalic, FontName, FontSize, FontUnderline, Height, Left, Top, Visible e Width. Adicionalmente, você poderá achar útil as seguintes propriedades:

Cancel Esta propriedade é suportada apenas por botões de comando. Quando a propriedade Cancel de um botão de comando é definida para True, o pressionamento da tecla Esc passa a ter o mesmo efeito de dar um clique no botão (como o botão Cancel em uma caixa de diálogo). Apenas um botão de comando em um form pode ter sua propriedade Cancel definida para True.

Default Esta propriedade é suportada apenas por botões de comando. Quando esta propriedade é definida para True, o pressionamento da tecla Enter passa a ter o mesmo efeito de dar um clique no botão OK (como o botão OK em uma caixa de diálogo). Apenas um dos botões de comando de um form pode ter a sua propriedade Default definida para True.

Value Esta propriedade indica o estado de uma caixa de checagem ou botão de opção. A propriedade Value de um botão de opção pode ser True ou False. Quando definida para True, o botão está acionado, isto é, o centro do botão se encontra em destaque. A propriedade Value de uma caixa de checagem pode ser assinalada para 0, 1 ou 2. O valor 0 indica que a caixa de checagem não está assinalada; 1 indica que a caixa está assinalada e 2, que a caixa está "desabilitada".

Eventos

Ainda que haja uma forte tendência em usar o procedimento de evento Click apenas para botões de comando, todos os três tipos de objetos recebem o evento Click. Os botões de opção e as caixas de checagem automaticamente exibem o seu estado quando é dado um clique sobre eles; geralmente, não é necessária nenhuma codificação.

Procedimentos e Métodos

Você não pode imprimir ou desenhar sobre botões de comando, caixas de verificação ou botões de opção. Nenhum dos métodos apresentados até agora são aplicáveis a esses três tipos de objetos.

O Aplicativo Jogo

Este projeto contém a aparência de um videogame. Inicie criando um projeto novo. Crie três botões de comando, quatro botões de opção e duas caixas de verificação, dispondo-os da seguinte forma:

Figura 5.24

Configure as propriedades desses objetos como mostrado na Figura 5.25. Após isso, o seu form deverá parecer-se com o mostrado na Figura 5.26.

Figura 5.25 Configuração de propriedades para o aplicativo Jogo.

Figura 5.26 A interface do Jogo.

Finalmente, edite o procedimento Click para os botões Command2 e Command3, incluindo este código:

Private Sub Command2_Click ( )

MsgBox "Fim de Jogo"

End Sub

Private Sub Command3_Click ( )

End

End Sub

Processe o programa algumas vezes para ver como ele se comporta. Tente pressionar as teclas Enter e Esc para ver que comandos eles executam.

Se quiser exibir o estado dos botões de opção e das caixas de checagem na janela Immediate, você pode alterar o procedimento Click do Command2 como mostrado aqui:

Private Sub Command2_Click ( )

Debug.Print Option1.Value

Debug.Print Option2.Value

Debug.Print Option3.Value

Debug.Print Option4.Value

Debug.Print Check1.Value

Debug.Print Check2.Value

End Sub

Molduras

Molduras existem para permitir a criação de agrupamentos de objetos. No caso de botões de opção, as molduras também afetam o seu comportamento, como o projeto de exemplo demonstrará. Para outros objetos, as molduras podem ser usadas como uma separação visual ou como uma característica genérica de habilitação/desabilitação. Para colocar uma moldura em um form, use a ferramenta Moldura da caixa de ferramentas do Visual Basic, mostrada na Figura 5.27.

Figura 5.27 A ferramenta Moldura.

Propriedades

A propriedade Name de uma moldura é usada para identificá-la nas instruções de seu programa, e a propriedade Caption define o texto que é visível, como parte da moldura. Molduras têm ainda as propriedades Enabled, FontBold, Fontltalic, FontName, FontSize, FontUnderline, Height, Left, Top, Visible e Width.

A propriedade Enabled, já abordada anteriormente, comporta-se de forma um pouco diferente para as molduras. Essa propriedade normalmente é assinalada para True; quando é assinalada para False, o texto de titulo da moldura fica acinzentado e todos os objetos dentro da moldura são desabilitados, incluindo caixas de texto, controles de botões e outros objetos.

Eventos

As molduras não respondem a eventos de mouse ou de entrada de dados feitos pelo usuário.

Procedimentos e Métodos

Você não pode imprimir ou desenhar sobre molduras, nem pode associá-las a gráficos.

Modificando o Aplicativo Jogo

Como as molduras não são intrinsecamente interessantes, em vez de criar um exemplo específico, vamos adaptar o projeto Jogo usado anteriormente.

Na janela de form do aplicativo, remova os botões de opção chamados 3 Jogadores e 4 Jogadores. Em seu lugar, desenhe uma moldura.:

Coloque dois novos botões de opção dentro da moldura. Observe que você deve traçá-los dentro da moldura; assim sendo, não pode dar um clique duplo na ferramenta Botão de Opção para criar os botões e depois arrastá-los para dentro da moldura.

Configure a propriedade Caption da moldura para Modo.

Configure a propriedade Value do botão Option3 para True.

Configure a propriedade Caption do botão Option3 para Iniciantes, e a propriedade Caption do botão Option4 para Experientes.

O resultado deverá parecer-se com o mostrado na Figura 5.28. Quando você processar o aplicativo, note que os botões de opção dentro da moldura operam independentemente dos que estão fora dela.

Figura 5.28 A interface remodelada do Jogo.

Caixas de Lista

As caixas de lista permitem que você dê ao usuário uma escolha de opções. A caixa de lista exibe as opções disponíveis, e o usuário seleciona um item ou entrada da lista, dando um clique nele. O Visual Basic adicionará a barra de deslocamento à caixa de lista, se a quantidade de entradas que serão exibidas não couber na caixa de lista. Para que uma caixa de lista possa trabalhar corretamente, é preciso que contenha pelo menos três linhas. Para adicionar uma caixa de lista a um form deve-se usar a ferramenta Caixa de Lista da caixa de ferramentas, mostrada na Figura 5.29. (Caixas de lista drop-down, como a que aparece na caixa de objetos da janela de propriedades quando se pressiona o botão de seta para baixo, são variações de caixas combinadas e serão discutidas na próxima seção.)

Figura 5.29 A ferramenta Caixa de Lista.

O conteúdo de uma caixa de lista pode ser definido em tempo de desenvolvimento usando-se a propriedade List. Em tempo de execução é preciso usar o método AddItem para introduzir os itens na lista. Normalmente, é mais prático inicializar uma caixa de lista no procedimento de evento Load do form que a contém.

Propriedades

As propriedades usuais suportadas pelas caixas de lista são: Enabled, FontBold, FontItalic, FontName, FontSize, FontUnderline, Height, Left, Top, Visible e Width. Algumas propriedades especiais das caixas de lista são as seguintes:

Columns Quando esta propriedade é configurada para 0 (default), todos os itens são exibidos em uma única coluna. Caso esta propriedade seja configurada para um valor maior ou igual a 1, os itens da lista serão dispostos em múltiplas colunas; o valor desta propriedade indica quantas colunas serão visíveis ao mesmo tempo. A barra de deslocamento horizontal será adicionada à lista, quando necessário.

List Esta propriedade contém uma matriz com todos os itens armazenados na lista. (Matrizes serão discutidas no Capítulo 6.) Pode-se acessar os itens individuais de uma caixa de lista com a sintaxe:

objeto.List(índice)

ListCount A propriedade ListCount, que não pode ser modificada diretamente, contém a quantidade de itens da caixa de lista.

ListIndex A configuração desta propriedade indica o índice do último item selecionado. O valor de índice para o primeiro item da caixa de lista é 0, o valor de índice para o próximo item é 1, e assim por diante. Caso não haja nenhum item selecionado, Listlndex contém o valor -1. Caso o valor desta propriedade seja modificado por uma instrução do programa, o mecanismo de destaque da lista mudará para refletir a nova seleção. Para ter acesso ao texto do item selecionado, deve-se usar a propriedade Text.

MultiSelect Esta propriedade controla quantos itens podem ser selecionados na caixa de lista. Caso esta propriedade seja configura da para 0 -None, o usuário poderá selecionar apenas um item de cada vez. (Em outras palavras, não é permitida seleção múltipla.) Se for carregado o valor 1 - Simple, o usuário poderá selecionar mais de um item. Quando MultiSelect for configurada para 2 - Extended, o usuário poderá selecionar uma faixa de itens, dando um clique no primeiro item e, com a tecla Shift pressionada, selecionando o último item da faixa. O usuário também pode manter a tecla CtrI pressionada e dar um clique para selecionar ou anular a seleção de cada item individualmente. Observe que, ainda que haja múltiplos itens selecionados, as propriedades ListIndex e Text referem-se apenas à seleção mais recente. Você deve examinar cada elemento da propriedade Selected para determinar quais itens foram selecionados.

Selected A propriedade Selected é uma matriz que contém um elemento para cada item da caixa de lista. O elemento correspondente a um item é configurado para True, para indicar que o item está selecionado. Para verificar o estado de um determinado item, é preciso usar a seguinte sintaxe:

objeto.Selected(índice)

Sorted Se você deseja que o Visual Basic mantenha os itens classificados em ordem alfabética, deve configurar esta propriedade para True. Quando esta propriedade for False, os itens serão exibidos na ordem em que foram adicionados à lista.

Text Esta propriedade, que não pode ser modificada diretamente, contém o texto do último item selecionado.

Eventos

As caixas de lista recebem os eventos Click e DblClick. Normalmente, você deve evitar a codificação do procedimento Click, pois o usuário pode selecionar um item e então desistir de sua seleção. Em vez disso, seu programa deve ler a propriedade Text quando o usuário der um clique em um botão de comando ou quando ocorrer o evento DblClick.

Procedimentos e Métodos

Os métodos usados com maior freqüência para as caixas de lista incluem: AddItem, Clear e RemoveItem. Esses três métodos permitem que você modifique o conteúdo de uma caixa de lista em tempo de execução.

AddItem Este método permite-lhe inserir uma linha de texto (um item) em uma caixa de lista. Você especifica o texto a ser incluído e, opcionalmente, o índice do item a inserir. Se você não especificar um índice, o Visual Basic incluirá o item após todos os itens já existentes. Caso a propriedade Sorted esteja configurada para True, não especifique um valor para índice; o Visual Basic incluirá o item em ordem alfabética. Aqui está a sintaxe para o método AddItem:

objeto.AddItem text[, índice]

Clear Este método remove todos os itens de uma caixa de lista. A sua sintaxe é bem simples:

objeto.Clear

RemoveItem O método RemoveItem permite que você remova um item de uma caixa de lista. Você deve especificar o índice do item a ser removido, usando a seguinte sintaxe:

objeto. RemoveItem índice

O Aplicativo Queijo

O objetivo deste aplicativo simples é transferir itens entre duas caixas de lista. Os itens de uma caixa de lista estarão classificados em ordem alfabética; enquanto os itens da outra aparecerão na ordem em que forem selecionados.

Inicie criando um novo projeto. Desenhe no form duas caixas de lista, como mostrado na Figura 5.30, e configure a propriedade Sorted da lista à direita (List2) para True. O restante da codificação necessária para o aplicativo é mostrado na Figura 5.31. O procedimento Form_Load inicializa a caixa de lista. Os procedimentos List1_DblClick e List2_DblClick são basicamente idênticos, exceto pelo fato de fazerem a transferência de itens de lista em direções opostas.

Figura 5.30 O projeto do form do aplicativo Queijo.

Figura 5.31 A codificação para o aplicativo, Queijo.

Quando for dado um clique duplo em um item de uma das caixas de lista, ele será incluído na outra caixa, sendo removido da caixa onde estava. A caixa de lista (List2) continua a classificar os seus itens alfabeticamente.

Caixas Combinadas

Caixas combinadas são criadas com a ferramenta Caixa Combinada contida na caixa de ferramentas, mostrada na Figura 5.32. A caixa combinada recebe esse nome porque ela combina uma caixa de texto com uma caixa de lista, formando um único controle. Entretanto, ao contrário de uma caixa de lista, ela não suporta múltiplas colunas. Você pode optar por um dos três tipos de comportamento para uma caixa combinada por meio de sua propriedade Style.

Figura 5.32 A ferramenta Caixa Combinada.

Propriedades

Adicionalmente às propriedades usuais, as caixas combinadas têm duas propriedades interessantes: Style e Text.

Style Esta propriedade determina o tipo de caixa combinada e como ela se comporta, podendo assumir os valores 0, 1 e 2.

Quando a propriedade é 2, a caixa combinada transforma-se em uma caixa de lista drop-down. Inicialmente, é visível apenas um item; porém, quando o usuário dá um clique no botão seta para baixo que aparece ao lado da caixa, é exibida a caixa de lista contendo os itens, permitindo ao usuário selecionar um deles. A caixa Object na janela de propriedades do Visual Basic é um exemplo familiar. (Nesse caso, não é permitido ao usuário a digitação de qualquer texto na caixa de texto.)

O valor 1 dá origem ao que chamamos de caixa combinada simples; uma área de edição na qual o usuário pode introduzir texto com uma caixa de lista padrão abaixo de si. A lista não é retirada, permanecendo sempre em exibição. O usuário pode selecionar um item da caixa de lista ou então digitar um texto na área de edição.

Para dimensionar o tamanho da área da caixa de lista associada, selecione a caixa combinada, clique com o mouse sobre uma alça de redimensionamento inferior e arraste-a para baixo até atingir o tamanho desejado.

A configuração dessa propriedade para 0 cria uma caixa combinada drop-down exibida quando o botão seta para baixo é pressionado, permitindo a seleção de um item. Porém é possível ao usuário introduzir texto na caixa de texto.

Text Esta propriedade pode conter o texto de um item selecionado a partir da lista, ou o próprio texto digitado pelo usuário.

Eventos

A forma como uma caixa combinada responde aos eventos depende de seu estilo de operação - isto é, de como a propriedade Style está configurada. Por exemplo, o evento DblClick é recebido apenas quando a propriedade está configurada para 1 (caixa combinada simples). Nos outros dois estilos, apenas o evento Click é recebido. Os dois estilos que permitem a introdução de texto recebem o evento Change à medida que o usuário está digitando o texto na área de edição da caixa combinada. Via de regra, você desejará que o seu programa leia a propriedade Text da caixa combinada após o usuário completar a seleção.

Procedimentos e Métodos

Os métodos AddItem, Clear e RemoveItem, descritos para caixas de lista, também estão implementados para caixas combinadas e são usados da mesma forma.

O Aplicativo Vôo

Este projeto de exemplo inclui os três estilos de caixas combinadas lado a lado; assim você pode fazer algumas experiências com eles. O aplicativo simula uma caixa de diálogo que pergunta ao usuário sobre suas preferências quanto ao próximo vôo.

Crie um novo projeto. Coloque três rótulos e dois botões de comando no form e configure a propriedade Caption de cada objeto como mostrado abaixo:

 Figura 5.33

Configure para True a propriedade Default do botão OK e a propriedade Cancel do botão Cancel.

Abaixo do rótulo Destino, desenhe uma caixa combinada, configure a sua propriedade Style para 1 e sua propriedade Name para cboDestino. Torne-a grande o suficiente para permitir a exibição de quatro ou cinco linhas de texto na parte da caixa de lista.

Nota: a sigla "cbo", que usamos aqui como prefixo nos nomes das caixas combinadas, vem de ComboBox – caixa combinada, em inglês.

Crie outra caixa combinada abaixo do rótulo Assento configurando as propriedades Style para 2 e Name para cboAssento.

Crie mais uma caixa combinada, agora abaixo do rótulo Refeição. Configure as propriedades da caixa Name para cboRefeição e Style para 0.

Configure as propriedades Text de cboDestino e cboRefeição para "". O seu Form deverá estar parecido com:

Figura 5.34

Figura 5.35 A codificação para o aplicativo Vôo.

Agora, será preciso escrever dois procedimentos, um para relatar os resultados da escolha das ações do usuário quando for dado um clique no botão OK e outro para inicializar as caixas combinadas. Esses procedimentos são apresentados na Figura 5.35.

Quando você executar o aplicativo, observe quais caixas combinadas lhe permitem digitar um texto. Repare também que o aspecto de cada tipo de caixa combinada, conforme mostrado na Figura 5.36, indica como proceder.

Figura 5.36 Processando o aplicativo Vôo.

Barras de Deslocamento Horizontal e Vertical

As barras de deslocamento horizontal e vertical (mostradas na Figura 5.37.) comportam-se da mesma forma, mudando apenas a direção. Esses objetos simples mostram a posição do elevador na barra de deslocamento; você tem controle sobre os limites da barra de deslocamento e sobre os incrementos pelos quais o elevador pode ser avançado. Por exemplo, se você estiver usando uma barra de deslocamento para representar o acelerador de um automóvel, ela poderia variar de 0 a 100, com incrementos de 5. Um controle de volume poderia variar de 0 a 10, com incrementos de 1.

Figura 5.37 Barras de deslocamento horizontal e vertical.

Para criar esses objetos, use a ferramenta Barra de Deslocamento Horizontal ou a ferramenta Barra de Deslocamento da caixa de ferramentas do Visual Basic.

Propriedades

As propriedades padrões suportadas por barras de deslocamento incluem Enabled, Height, Left, Name, Top, Visible e Width. As propriedades especiais tanto para barras de deslocamento vertical quanto horizontal incluem LargeChange, Max, Min, SmalIChange e Value.

LargeChange A configuração desta propriedade representa o incremento adicionado ou subtraído do número contido na propriedade Value quando o usuário dá cliques na área da barra de deslocamento, entre o elevador e as setas de deslocamento.

Max Esta propriedade pode ser configurada para um número entre -32.767 e +32.767. Quando o elevador está na extrema direita (barra horizontal) ou na posição inferior (barra vertical), a propriedade Value é configurada para o valor armazenado na propriedade Max.

Min Esta propriedade pode ser configurada para um número entre -32.767 e +32.767. Quando o elevador está na extrema esquerda ou na posição superior, a propriedade Value é configurada para o valor armazenado na propriedade Min.

SmallChange A configuração desta propriedade representa o incremento adicionado ou subtraído do número contido na propriedade Value quando o usuário dá um clique em uma das setas de direção localizadas nos extremos da barra de deslocamento.

Value Esta propriedade contém o número representando a posição atual do elevador dentro da barra de deslocamento. Se alguma instrução de um programa vier a alterar esta propriedade, o Visual Basic moverá o elevador para a posição correspondente. Definir para esta propriedade valores que estejam fora dos limites estabelecidos pelas propriedades Max e Min produz uma mensagem de erro.

Eventos

Os eventos primários associados a barras de deslocamento são Scroll e Change. O evento Scroll é repetidamente disparado enquanto o elevador estiver sendo arrastado dentro da caixa de deslocamento. O evento Change é sinalizado após a posição do elevador ter sido modificada. Use o evento Scroll para rastrear as modificações dinâmicas na barra de deslocamento e o evento Change para obter o valor final da barra de deslocamento.

Procedimentos e Métodos

Nenhum dos procedimentos e métodos discutidos anteriormente são aplicáveis às barras de deslocamento.

O Aplicativo Barra de Deslocamento

O objetivo deste aplicativo é fornecer-lhe apenas uma visão de como as barras de deslocamento trabalham.

Crie um novo projeto. No form vazio, coloque um rótulo e uma barra de deslocamento horizontal, como mostrado aqui:

Figura 5.38

Configure a propriedade BorderStyle do rótulo para 1 - Fixed Single, e a propriedade Caption para uma string vazia. Configure as propriedades da barra de deslocamento horizontal como segue:

 

Propriedade Configuração

LargeChange 10

Max 100

Min 0

SmallChange 2

Dê um clique duplo na barra de deslocamento, fazendo com que a janela de código seja apresentada. Introduza este procedimento para tratamento do evento Change:

Private Sub_Hscroll1_Change ( )

Label1.Caption = Str$(HScroll1.Value)

End Sub

Como a propriedade Caption aceita apenas textos para sua configuração, você deve converter o valor HScroll.Value para uma string usando Str$.

Introduza o seguinte procedimento para tratar o evento Scroll:

 

Private Sub Hscroll1_Scroll ( )

Label1.Caption = "Movendo para " & Str$(HScroll1.Value)

End Sub

Inicie agora o processamento do aplicativo. Quando você dá um clique na área cinza da barra de deslocamento, o valor exibido no rótulo se modifica de 10 em 10. Quando você dá um clique sobre as setas de deslocamento, nas extremidades da barra, o valor se modifica de 2 em 2.

Arrastando o elevador com seu mouse, é possível ajustar o valor em incrementos diferentes de 2 ou 10. Por exemplo, o valor exibido na Figura 5.25, poderia ser alcançado dando-se cliques sobre as setas de deslocamento ou arrastando-se o elevador. Observe que o procedimento para o evento Scroll atualiza a propriedade Caption do rótulo à medida que o elevador é arrastado. Selecione a opção Break do menu Run ou dê um clique no botão Interromper da barra de ferramentas e introduza a instrução Hscroll1.Value = 17 na janela Immediate. Observe que a posição do elevador da caixa de deslocamento se modifica quando o valor é alterado. Agora, submeta a instrução Hscroll1.Max = 500. A posição do elevador se modifica novamente, de forma a manter a posição relativa às configurações das propriedades Min e Max.

Figura 5.39 Processando o aplicativo Barra de Deslocamento.

 

Temporizadores

Temporizadores, criados com a ferramenta Temporizador mostrada na Figura 5.40, são objetos que podem disparar eventos em intervalos regulares de tempo. Você programa um temporizador configurando sua propriedade Interval para a quantidade de milissegundos que deve decorrer entre os eventos a serem disparados.

Figura 5.40 A ferramenta Temporizador.

Um temporizador está limitado pela configuração do hardware de seu sistema. A maioria dos computadores pessoais é capaz de gerar até 18 eventos por segundo, isto é, com um intervalo de tempo entre os eventos de aproximadamente 56/1000 segundos. Em termos práticos, esse limite significa que valores menores do que 56 não terão utilidade - em outras palavras, valores de intervalos intermediários, entre os múltiplos de 56, provavelmente produzirão o mesmo resultado. Essa limitação, no entanto, não significa que você possa se descuidar dos seus cálculos afinal de contas, os futuros hardwares provavelmente terão um melhor suporte para os temporizadores. Em suma, deve-se entender essa limitação como um aviso para não se buscar extrema precisão quando se tratar de temporizadores.

Adicionalmente, alguns dos eventos disparados por temporizadores podem simplesmente perder-se no meio da confusão. Suponha, por exemplo, que o seu programa esteja preparado para receber eventos de um temporizador a cada segundo. Porém, uma parte de seu programa que envolve cálculos complexos pode demandar até 10 segundos. Quando esses cálculos acabam, você poderia esperar que os 10 eventos disparados pelo temporizador fossem empilhados, como ocorre em uma lenta fila de supermercado. No entanto, isso não acontece. Apenas um evento será sinalizado. Sempre que ocorre um evento de temporização, o sistema verifica se o evento de temporização anterior ainda se encontra pendente. Em caso positivo, nenhuma evento será gerado.

Sem dúvida, devido a essas restrições, você deve estar se questionando sobre a real utilidade dos temporizadores. Na realidade, ainda que não tenham extrema precisão, eles podem ser muito úteis. Você pode imaginar os temporizadores como "pontapés no traseiro" de seu aplicativo. Com efeito, um temporizador pode, em intervalos de tempo regulares, "cutucar" o seu programa dizendo "Ei, está na hora de verificar algumas coisas".

Propriedades

As propriedades Name e Enabled são padrões para temporizadores. A propriedade mais importante dos objetos temporizadores é a Interval. Essa propriedade contém o número de milissegundos entre os eventos de temporização, variando em uma faixa de 0 a 65.535, gerando eventos numa velocidade que varia teoricamente de 1000 eventos por segundo a quase 1 evento por minuto. O valor 0 equivale a desativar o temporizador. Caso seja necessário gerar n eventos por segundo, use a fórmula 1000 / n para achar o valor a ser armazenado nessa propriedade. Por exemplo, para gerar eventos a cada meio segundo (dois eventos por segundo), o cálculo 1000 / 2 indica o valor 500 para a propriedade Interval.

Eventos

O evento Timer é gerado em intervalos regulares quando o temporizador está ativado.

Procedimentos e Métodos

Não há procedimentos ou métodos que operem com objetos temporizadores.

O Aplicativo Metrônomo

Este projeto - que cria um metrônomo usando um temporizador e uma barra de deslocamento - demonstra o que acontece quando você tenta usar um objeto temporizador como um controle de tempo extremamente preciso. Os metrônomos operam tipicamente numa faixa que vai de 40 batimentos por minuto (para músicas muito lentas) a 200 batimentos por minuto (para músicas muito rápidas). A configuração de 40 batimentos por minuto corresponde a 2/3 de batimento por segundo, ou seja, 1 batimento a cada 1500 milissegundos. Na outra extremidade, 200 batimentos por minuto significam 3 1/3 batimentos por segundo, ou 1 batimento a cada 300 milissegundos. Assim, os valores 300 e 1500 podem ser usados em seu aplicativo como limites máximo e mínimo para uma barra de deslocamento. (Note que, quanto maior o valor, menor a quantidade de batimentos; portanto, 1500 é o valor mínimo e não o máximo.)

Crie um novo projeto e inclua uma barra de deslocamento horizontal no form. Depois, crie um objeto temporizador, dando um clique duplo na ferramenta Temporizador contida na caixa de ferramentas. Não é preciso desenhar ou redimensionar um objeto temporizador, ele aparece no form. em tempo de desenvolvimento; em tempo de execução, porém, será invisível.

Coloque um rótulo abaixo da extremidade esquerda da barra de deslocamento e configure a sua propriedade Caption para Lento. Abaixo da extremidade direita, crie outro rótulo, configurando a sua propriedade Caption para Rápido. Veja a seguir como deverá ficar o seu aplicativo.

 Figura 5.41

Configure a propriedade Interval do temporizador para 1000.

Configure as propriedades da barra de deslocamento horizontal como se segue:

 Propriedade Configuração

LargeChange 10

Max 300

Min 1500

SmallChange 25

Value 1000

Será preciso incluir duas linhas de código para esse aplicativo, uma no procedimento Change da barra de deslocamento e outra no procedimento Timer do objeto temporizador. O procedimento Change mantém o objeto temporizador em sincronia com a barra de deslocamento, enquanto o procedimento Timer gerará o tique do metrônomo. (Ou, neste caso, um beep):

Private Sub HScroll1_Change ( )

Timer1.Interval = HScroll1.Value

End Sub

Sub Timer1_Timer ( )

Beep

End Sub

Quando você iniciar o aplicativo, o metrônomo baterá 1 vez por segundo. O deslocamento do elevador modificará a velocidade de batimento. Tente deslocar a janela do aplicativo ao longo da tela ou processe outro aplicativo em segundo plano. Enquanto nada estiver acontecendo, o temporizador será bastante preciso, porém você pode ver como alguns eventos de temporização são perdidos quando o sistema desvia sua atenção para outra tarefa.

Linhas e Formas

Para melhorar a aparência dos forms de seus aplicativos, você pode incluir linhas simples e gráficos de formas sólidas, usando as ferramentas Linha e Forma da caixa de ferramentas, mostradas nas Figuras 5.42 e 5.43. Os objetos criados com essas ferramentas aparecem na mesma camada que os objetos de imagem.

Figura 5.42 A ferramenta Linha.

Figura 5.43 A ferramenta Forma.

Os controles de linhas e formas (tanto quanto os controles de imagem) são úteis principalmente para implementar visões de segundo plano para os seus forms A ferramenta Linha cria segmentos de linha reta simples. Você pode modificar tamanho, cor e padrões de linhas, alterando suas propriedades. A ferramenta Forma cria sempre um retângulo na tela, porém, modificando a configuração das propriedades dos objetos forma, você pode criar círculos, ovais e retângulos arredondados. Além disso, você pode configurar cores e o padrão de preenchimento das formas.

Propriedades

Ambos os objetos têm as propriedades Name e Visible usuais. Objetos do tipo Forma possuem ainda as propriedades padrões Height, Left, Top e Width. Objetos Linha têm as propriedades posicionais X1, Y1 e X2, Y2, que são as coordenadas das duas extremidades da linha. Outras propriedades determinam como esses objetos aparecem na tela.

BorderColor Esta propriedade determina a cor de contorno (ou no caso de objetos Linha, a cor da linha). Você configura a propriedade BorderColor escolhendo uma cor de uma palheta, da mesma forma que é usada para configurar as propriedades BackColor e ForeColor de um form.

BorderStyle A propriedade BorderStyle controla como a linha ou o contorno da forma é traçada. Você pode aplicar uma das sete configurações:

0 - Transparent (Transparente)

1 - Solid (Sólida)

2 - Dash (Traço)

3 - Dot (Ponto)

4 - Dash-Dot (Traço-Ponto)

5 - Dash-Dot-Dot (Traço-Ponto-Ponto)

6 - Inside Solid (Sólido Interno)

BorderWidth Esta propriedade permite-lhe especificar a largura de uma linha ou do contorno da forma. Se você configurar BorderWidth para um valor diferente de 1, não poderá usar configurações pontilhadas ou tracejadas de BorderStyle.

Objetos forma têm ainda as propriedades FillColor e FilIStyle:

FilIColor Análoga à propriedade BorderColor, FilIColor permite-lhe definir a cor interior de uma forma. Você configura esta propriedade do mesmo jeito que a propriedade BorderColor, com o auxílio de uma palheta.

FillStyle A configuração da propriedade FilIStyle determina o padrão interno de um objeto Forma.

0 - Solid (Sólido)

1 - Transparent (Transparente)

2 - Horizontal Line (Linha Horizontal)

3 - Vertical Line (Linha Vertical)

4 - Upward Diagonal (Diagonal Ascendente)

5 - Downward Diagonal (Diagonal Descendente)

6 - Cross (Cruz)

7 - Diagonal Cross (Diagonal em Cruz)

Eventos

Objetos Linha e Forma não recebem evento algum.

Procedimentos e Métodos

Nenhum dos métodos apresentados neste capítulo se aplicam a linhas e formas.

O Projeto Camada

Este projeto de exemplo não é um aplicativo completo; ele simplesmente leva você a fazer algumas experiências com objetos de exibição, para familiarizá-lo com as ferramentas.

Crie um novo projeto. Coloque no form uma caixa de imagem, um botão de comando, uma forma, uma linha e um controle de imagem, nesta ordem. Distribua-os no form como mostrado aqui:

Figura 5.44

Selecione a propriedade Picture do objeto Picture1 na janela de propriedades. Dê um clique no botão de reticências, à direita do valor da propriedade, para exibir a caixa de diálogo Load Picture. Na caixa de diálogo, configure o tipo de arquivo para exibir os arquivos com sufixo ICO. No diretório \PacoteVB\Icones\Misc\ no primeiro cd deste produto, você encontrará o arquivo de ícones HEART.ICO. Escolha esse arquivo para carregar o ícone na caixa de imagem. De forma semelhante, configure a propriedade Picture de Image1 para carregar o ícone DIAMOND.ICO no controle de imagem.

Configure a propriedade FilIStyle de Shape1 para 0 - Solid e a propriedade FilIColor para azul. (Dê um clique no botão de seta para baixo à direita da propriedade e selecione a cor azul na palheta.) Configure a propriedade BorderWidth de Line1 para 4. O form deverá parecer-se com:

Figura 5.45

Movimente o objeto forma para o centro do form e depois mova os outros objetos sobre a forma de modo que se sobreponham, como mostrado aqui:

 Figura 5.46

Observe que, em cada camada da exibição, o objeto criado mais recentemente aparece sobre os objetos criados anteriormente. (A caixa de imagem e o botão de comando se encontram na camada superior; a forma, a linha e a imagem encontram-se na camada intermediária.)

A ordem segundo a qual certos objetos se sobrepõem a outros é chamada de Z-Order, e pode ser alterada. Dê um clique sobre o objeto Line1 para selecioná-lo e escolha a opção Bring to Front (trazer para frente) do menu Format\Order do Visual Basic. A linha, que já apareceu sobre a forma, agora se sobrepõe também à imagem. No entanto, note que, quando você move a linha ao longo da tela, ela não se sobreporá à caixa de imagem ou ao botão de comando. As opções Bring to Front e Send to Back (Mandar para trás) trabalham apenas dentro de uma camada; objetos da camada intermediária sempre serão sobrepostos por objetos da camada superior. Você pode aplicar essas duas opções a todos os controles (objetos), e com isso controlar a Z-Order. Experimente usar essas opções após selecionar o botão de comando.

Caixas de Lista de Unidades, Caixas de Lista de Diretórios e Caixas de Lista de Arquivos.

As três ferramentas da caixa de ferramentas do Visual Basic mostradas nas Figuras 5.47, 5.48 e 5.49 lhe permitem construir caixas de diálogo personalizadas para fazer a interação com o sistema de arquivos. Cada controle do sistema de arquivos gerencia um componente isolado do sistema: a caixa de lista de unidades aparece como uma caixa de lista drop-down, contendo os nomes de todas as unidades de disco do sistema; a caixa de lista de diretórios exibe todos os subdiretórios do diretório atual; e a caixa de lista de arquivos exibe alguns ou todos os arquivos gravados no diretório atual.

Na maioria das vezes, você não usará a caixa de lista de unidades ou a caixa de lista de diretórios individualmente. Ao contrário, quando o usuário está selecionando um arquivo a ser aberto ou salvo, você terá de oferecer acesso a todos os componentes do sistema de arquivos simultaneamente. Nesses casos, você poderá usar o controle diálogos comuns, que acondiciona as funções File Open e File Save As.

Porém, ocasionalmente, você poderá precisar de uma caixa de diálogo com mais componentes do que os fornecidos pelas caixas de diálogo padrões para File Open e File Save As. Por exemplo, o Word for Windows da Microsoft tem botões adicionais para Salvar Versão e Opções na caixa de diálogo Salvar Como.

Nesses casos, você poderá usar as ferramentas Caixa de Lista de Unidades, Caixa de Lista de Diretórios e Caixa de Lista de Arquivos. (Veja um exemplo no Capítulo 10.)

Figura 5.47 A ferramenta Caixa de Lista de Unidades.

Figura 5.48 A ferramenta Caixa de Lista de Diretórios.

Figura 5.49 A ferramenta Caixa de Lista de Arquivos.

Propriedades

Os três controles do sistema de arquivos têm muitas das propriedades usuais: Enabled, FontBold, Fontltalic, FontName, FontSize, Height, Left, Name, Top, Visible e Width. Adicionalmente, as seguintes propriedades são importantes:

Drive Esta propriedade, que se aplica apenas a caixas de lista de unidades, contém o nome da unidade atualmente selecionada.

FileName Apenas as caixas de lista de arquivos têm esta propriedade, que contém o nome do arquivo atualmente selecionado na caixa de lista de arquivos.

List, ListIndex Estas propriedades são suportadas somente pelas caixas de lista de arquivos e são idênticas às propriedades List e ListIndex das caixas de listas.

Path Nas caixas de lista de arquivos e de diretórios, esta propriedade contém o caminho hierárquico atual. Esta propriedade não se aplica a caixas de lista de unidades.

Pattern Esta propriedade das caixas de lista de arquivos contém uma string que determina quais arquivos serão exibidos. Ela suporta o uso dos caracteres * e ? para especificação dos nomes de arquivos. Por exemplo, configurar esta propriedade para *.DAT faria com que fossem exibidos todos os arquivos que tivessem a extensão DAT.

Eventos

Apenas as caixas de lista de arquivos e de diretórios respondem ao evento Click. O evento DbIClick é recebido apenas pelas caixas de lista de arquivos. Além disso, mais dois eventos são importantes para os controles do sistema de arquivos:

Change Este evento é reconhecido somente pelas caixas de lista de unidades e de diretórios. Ele é disparado quando o usuário ou o programa modifica a seleção na caixa de lista.

PaIthChange Este evento aplica-se apenas às caixas de lista de arquivos. Ele ocorre quando o caminho hierárquico é modificado, devido a um clique duplo em uma pasta de diretório ou porque o programa alterou alguma das propriedades Path ou FileName. Este evento permite ao seu programa atualizar o conteúdo da caixa de lista de diretórios de forma a exibir os subdiretórios do novo caminho hierárquico.

Procedimentos e Métodos

Nenhum dos procedimentos ou métodos discutidos até agora é aplicável aos controles do sistema de arquivos.

Outras Ferramentas do Visual Basic

A caixa de ferramentas do Visual Basic também inclui algumas outras ferramentas, que serão descritas brevemente aqui. Essas ferramentas e os objetos criados com elas, por exigirem um esforço considerável de programação e algumas técnicas avançadas, serão abordados posteriormente.

Grades

A ferramenta Grade representada na Figura 5.32 permite-lhe criar um controle de grade. Uma grade é um bloco de células bidimensional, muito parecido com as linhas e colunas de uma planilha. Você pode usar um controle de grade para implementar funções semelhantes a planilhas em Visual Basic. O Visual Basic é distribuído com os controles de grade DbGrid e MSFlexGrid. O segundo é mais moderno e rico em possibilidades de uso. O ícone da figura 5.50 refere-se ao controle MSFlexGrid. Para que um projeto use uma dessas duas grades, deve-se selecionar no menu Project o comando Components e selecionar ,entre os componentes listados , o item Microsoft Data Bound Grid Control 5.0, para o controle DBGrid ou Microsoft FlexGrid Control 5.0, para o controle MSFlexGrid.

Após o OK e sair da janela o controle escolhido aparecerá na caixa de ferramentas do projeto.

Figura 5.50 A ferramenta Grade.

O controle MSFlexGrid exibe e opera em dados na forma de tabelas. Ele lhe permite flexibilidade total para classificar, mergear e formatar tabelas contendo strings e imagens. Quando ligada ao controle Dados, exibe dados apenas para leitura.

Você pode adicionar texto, uma imagem ou ambos em uma célula da grade. As propriedades Row (linha) e Col (coluna) são usadas para indicar a célula atual da grade. Você pode especificar a célula atual em código, ou o usuário pode modificá-la em tempo de execução usando o mouse ou as teclas de seta. A propriedade Text refere-se ao conteúdo da célula atual.

Se o texto da célula é muito longo para ser exibido na célula, e a propriedade WordWrap está configurada como True, o texto é quebrado para a próxima linha dentro da mesma célula. Para ver o texto quebrado dentro da célula, você pode precisar aumentar a largura da coluna da célula (propriedade ColWidth) ou a altura da linha (propriedade RowHeight).

Use as propriedades Cols e Rows para determinar o número de colunas e linhas da grade.

Para adicionar uma linha na grade use o método AddItem e, para removê-la, use o método RemoveItem. A sintaxe do método AddItem é:

objeto.AddItem (item As String, índice)

Onde:

Objeto é um controle MSFlexGrid.

Item (requerido) é uma string exibida na nova linha. Para adicionar múltiplas strings (numa grade de múltiplas colunas), separe o texto de cada célula com caracteres de tabulação (vbTab).

Índice (opcional) é um inteiro longo representando a posição dentro da grade onde será inserida a nova linha. Se o índice for omitido, a linha será posta no final de todas. A primeira linha possui o índice 0.

Para remover linhas use o método RemoveItem. Sua sintaxe é:

objeto.RemoveItem índice

Onde:

Objeto é um controle MSFlexGrid.

Índice é a posição da linha dentro da grade.

Dados

A ferramenta Dados, mostrada na Figura 5.51, permite-lhe criar um controle de dados por meio do qual você implementa um acesso a dados específicos em um banco de dados. Um controle de dados tem algumas propriedades especiais que definem a conexão entre o aplicativo Visual Basic e o banco de dados que você planeja acessar. Entretanto, antes de usar a ferramenta Dados em Visual Basic, será necessário habilitar o compartilhamento de arquivos. Veja como usar esta ferramenta no final do Capítulo 14.

Figura 5.51 A ferramenta Dados.

OLE

A tecnologia OLE (Object Linking and Embedding - Aninhamento e Ligação de Objetos) da Microsoft permite-lhe criar um objeto num aplicativo que contenha dados de outro aplicativo não-relacionado. Por exemplo, o diagrama de um programa gráfico ou um desenho detalhado de um programa CAD (Computer-Aided Design -Projeto Auxiliado por Computador) poderia vir a ser colocado em seu programa Visual Basic. Entretanto, em vez de inserir uma cópia do gráfico ou do desenho no seu programa Visual Basic, o OLE manterá uma conexão com o aplicativo original, de forma que qualquer modificação feita sobre o desenho ou gráfico seja refletida imediatamente em seu programa Visual Basic.

A ferramenta OLE da caixa de ferramentas do Visual Basic, mostrada na Figura 5.52, permite-lhe implementar em seu programa Visual Basic habilidades para estabelecer ligação e aninhamento entre objetos.

 Figura 5.52 A ferramenta OLE.

Caixas de Dialogo Comuns

Para padronizar a interface com os usuários, para as operações comuns a todos os aplicativos baseados em Windows, a Microsoft criou um conjunto de caixas de diálogo. O Visual Basic oferece acesso a essas funções por meio da ferramenta Diálogos Comuns. O uso dessa ferramenta assegurará que seus aplicativos estejam dentro do padrão estabelecido para as operações suportadas.

A exemplo da ferramenta Temporizador, a ferramenta Diálogos Comuns, mostrada na Figura 5.53, estará invisível em tempo de execução. Entretanto, quando você colocar o seu ícone em um de seus forms será possível chamar qualquer uma das cinco funções padrões suportadas pela ferramenta. Cada função padrão está associada a uma caixa de diálogo. As caixas de diálogo comuns padrões do Windows são: Open, Save As, Color, Font: e Printer (Abrir, Salvar Como, Cor, Fonte e Impressora). Além disso, a ferramenta Diálogos Comuns pode invocar o sistema de ajuda on-line do Windows. É preciso que seja feita uma inclusão desta ferramenta em seu projeto selecionando-a na caixa de diálogo Components. Clique em Components no menu Project e selecione Microsoft Common Dialog Control. A ferramenta então aparecerá na sua caixa de ferramentas após o OK.

Figura 5.53 A ferramenta Diálogos Comuns.

A execução de uma certa função é iniciada quando você se utiliza de um dos métodos do controle de diálogos comuns que exibem caixas de diálogo. As instruções de seu programa Visual Basic ficarão suspensas até que o usuário não precise mais da caixa de diálogo. Você pode então examinar as propriedades do controle para determinar o que aconteceu. Não há eventos associados a controles de diálogos comuns. Você especifica sua operação, configurando os valores das propriedades e então chamando um dos métodos abaixo:

 

Método

Caixa de Diálogo Exibida

ShowOpen

Abrir

ShowSave

Salvar Como

ShowColor

Cores

ShowFont

Fontes

ShowPrinter

Imprimir

ShowHelp

Invoca o Help

 

Além dos métodos acima, a propriedade CancelError é usada por todas as funções de diálogos comuns. O estado default de CancelError é False. Quando configurada para True, o Visual Basic sinalizará um erro se o usuário escolher o botão Cancel na caixa de diálogo. Se você tem intenção de configurar essa propriedade como True, precisa usar os recursos para tratamento de erros do Visual Basic, descritos no Capítulo 9.

Os parágrafos a seguir descrevem os métodos da ferramenta Diálogos Comuns. Devido ao seu grande número, não foi fornecido um programa de exemplo completo, apenas fragmentos de programas que ilustram o uso típico do controle.

Método ShowOpen (Abrir)

A caixa de diálogo Abrir, mostrada na Figura 5.54, é chamada quando o método ShowOpen é usado. Você pode configurar as seguintes propriedades para controlar a aparência da caixa de diálogo. Observe que a caixa de diálogo na realidade não abre o arquivo, apenas permite ao usuário selecionar o nome do arquivo.

Figura 5.54 A caixa de diálogo Abrir

Propriedades relacionadas a ShowOpen

DialogTitle Esta propriedade pode ser configurada para qualquer string. A string será exibida na barra de título da caixa de diálogo. O título default é "Abrir".

FileName Esta propriedade é usada para configurar o nome inicialmente mostrado na caixa de texto FileName da caixa de diálogo. Após a caixa de diálogo ser fechada, pode-se ler esta propriedade para determinar o nome selecionado para o arquivo.

Filter A propriedade Filter pode ser configurada para restringir os nomes de arquivos que aparecem na caixa de lista de arquivos. A propriedade Filter deve conter uma string com um ou mais pares de componentes. Cada par de componentes é composto por uma descrição, seguida pelo símbolo ( | ) e por caracteres de especificação globais para nomes de arquivos. Os múltiplos pares de componentes também são separados pelo símbolo ( | ). Por exemplo, a string a seguir especifica três pares de componentes:

"Documentos (*. DOC)|*.doc|Arquivos Texto (*.TXT)|*.txt|Todos Arquivos (*.*)|*.*"

O primeiro filtro restringe a lista de arquivos a arquivos com a extensão DOC; o segundo, a arquivos com a extensão TXT e o último permite a seleção de qualquer extensão. Note que não há nenhum espaço antes ou depois do símbolo ( | ).

FilterIndex Esta propriedade é configurada para um inteiro indicando qual é o par de componentes que será usado como default. No exemplo acima, poderia ser 1, 2 ou 3.

Flags A propriedade Flags pode ser configurada para uma combinação de um ou mais valores que controlam as características especiais da caixa de diálogo. Os valores válidos para esta propriedade estão descritos no sistema de ajuda on-line do Visual Basic. Um exemplo é cdlOFNFileMustExist, que forçará o usuário a selecionar um arquivo existente.

Exemplo

Este fragmento de programa exibe a caixa de diálogo Abrir. Ela força o usuário a escolher um arquivo que exista e aplica um filtro padrão para arquivos de dados (*.DAT). Assume-se que o objeto diálogos comuns chama-se Dlog.

 

Figura 5.55 Exemplo de uso do método ShowOpen

 

Save As (Salvar Como)

A caixa de diálogo Save As, mostrada na Figura 5.56, é aberta com o uso do método ShowSave. As propriedades para ShowSave são idênticas às descritas anteriormente para ShowOpen, só que o valor default para a propriedade DialogTitle é Save As.

 

Figura 5.56 A caixa de diálogo Save As.

 

Propriedades relacionadas a ShowSave

DefaultExt Esta propriedade pode ser configurada para uma string de 1 a 3 caracteres, que será usada como extensão default caso o usuário especifique um nome de arquivo sem extensão.

Exemplo

O fragmento de programa a seguir exibe a caixa de diálogo Salvar Como. Assume-se que o objeto diálogos comuns chama-se Dlog. Neste exemplo, a propriedade CancelError é configurada para True; do contrário, seria impossível determinar se foi ou não selecionado um nome de arquivo. Note que as instruções não provocam o salvamento de qualquer arquivo; simplesmente permitem ao usuário selecionar o nome para o arquivo.

Figura 5.57 Exemplo de uso do método ShowSave

 

Color (Cor)

A caixa de diálogo Color, mostrada na Figura 5.58, é exibida quando o método ShowColor é chamado. Você pode configurar as seguintes propriedades para controlar a aparência desta caixa de diálogo.

Figura 5.58 A caixa de diálogo Color.

Propriedades relacionadas a ShowColor

Color Esta propriedade é usada para configurar a cor inicial. Após o usuário dispensar a caixa de diálogo, a cor selecionada poderá ser determinada com esta propriedade.

Flags Esta propriedade deve ser configurada para cdlCCRGBInit para ler ou configurar a propriedade Color.

Exemplo

Este fragmento de programa exibe uma caixa de diálogo para a seleção de cores. Assume-se que o objeto diálogos comuns tenha o nome Dlog. A cor selecionada é usada para configurar o fundo do form atual.

Figura 5.59 Exemplo de uso do método ShowColor

Font (Fonte)

A caixa de diálogo Fonte, mostrada na Figura 5.60, é chamada quando se usa o método ShowFont. Você pode configurar as seguintes propriedades para controlar a aparência da caixa de diálogo.

Figura 5.60 A caixa de diálogo Font.

Propriedades relacionadas a ShowFont

Color Esta propriedade permite configurar ou ler a cor da fonte. (Ela está ativa apenas quando a propriedade Flags inclui cdlCFEffects.)

Flags Esta propriedade pode ser configurada para modificar o comportamento da caixa de diálogo. Entretanto, ela deve incluir um dos seguintes valores: cdlCFPrinterFonts, cdlCFScreenFonts ou cdlCFBoth. Eles determinam quais fontes devem ser listadas na caixa de diálogo (apenas fontes para impressora, apenas para vídeo ou ambas).

FontBold, FontItalic, FontStrikethru, FontUnderline Estas são propriedades booleanas que podem ser configuradas ou lidas para determinar o estilo de informação para a fonte. A configuração da propriedade Flags deve incluir cdlCCEffects para permitir a configuração de estilos.

FontName Esta propriedade pode ser configurada para inicializar a fonte default e pode ser lida para determinar a fonte selecionada pelo usuário.

FontSize Esta propriedade pode ser configurada ou lida e determina o tamanho da fonte em pontos.

Esta sub-rotina permite que os atributos do controle caixa de texto sejam modificados. O controle é passado como um parâmetro. Assume-se que o objeto diálogos comuns chama-se Dlog.

Figura 5.61 Exemplo de uso de ShowFont

Print (Imprimir)

A caixa de diálogo Imprimir, mostrada na Figura 5.62, é exibida quando se chama o método ShowPrinter. Você pode configurar as seguintes propriedades para controlar a aparência desta caixa de diálogo.

 

Figura 5.62 A caixa de diálogo Imprimir.

 

Propriedades relacionadas a ShowPrinter

Copies Esta propriedade especifica a quantidade de cópias que será impressa.

Flags Esta propriedade trata das características especiais da caixa de diálogo. Valores de constantes são combinados usando o operador lógico Or para definir características da caixa de diálogo a ser exibida. Veja o arquivo de ajuda para a descrição detalhada do efeito do uso de cada constante na configuração da propriedade Flags.

Exemplo

Este fragmento de programa exibe a caixa de diálogo para impressão. Como antes, assume-se que o objeto de diálogo chama-se Dlog. É importante notar que a chamada da caixa de diálogo não provocará o início do processo de impressão. Você deve escrever para o objeto Printer. A caixa de diálogo apenas permite ao usuário selecionar certas opções de impressão.

 

Figura 5.63 Exemplo de uso de ShowPrinter

 

ShowHelp (Ajuda)

O aplicativo Help do Windows, mostrado na Figura 5.64, é chamado quando se usa o método ShowHelp do controle de diálogos comuns. Você pode configurar as seguintes propriedades para controlar a aparência desta caixa de diálogo.

 

Figura 5.64 O aplicativo Help.

 

Propriedades relacionadas a ShowHelp

HelpCommand Esta propriedade especifica o tipo de ajuda que você deseja obter. Normalmente, você usará a constante cdlHelpKey, indicando ajuda para uma certa palavra-chave.

HelpFile Esta propriedade indica o nome do arquivo de texto de ajuda.

HelpKey Esta propriedade indica a palavra-chave inicial a ser usada na tela de ajuda.

 

Exemplo

Este fragmento de programa invoca o sistema de ajuda do Windows para a função MsgBox

Dlog.HelpCommand = cdlHelpKey

Dlog.HelpFile = "vb5.hlp"

Dlog.HelpKey = "MsgBox"

Dlog.ShowHelp 'Invoca a ajuda

Menus

Ainda que tenha criado diversos aplicativos até agora, você pode estar com a impressão de que nenhum deles se parece com "aplicativos reais". Por que não? Para começar, nenhum deles tem barra de menus. Entretanto, isso é contornável, pois o Visual Basic torna muito simples a criação de menus. Os menus operam de uma forma orientada a eventos, muito semelhante à maioria dos objetos que foram discutidos.

Para criar o menu para um aplicativo, você deve usar a janela do editor de menus do Visual Basic, mostrada na Figura 5.65. Crie um novo projeto e abra essa janela, escolhendo a opção Menu Editor do menu Tools ou dando um clique no botão Menu Editor contido na barra de ferramentas do Visual Basic.

Figura 5.65 A janela do editor de menu (Menu Editor) do Visual Basic.

Você constrói a barra de menus de seu aplicativo, criando uma hierarquia de itens na janela do editor de menu. Para cada item de menu, você deve definir a propriedade Caption e a propriedade Name. Na propriedade Caption, coloque o título que deverá aparecer na barra de menus ou no menu drop-down (submenu). O nome (name) do item de menu identifica-o na codificação de seu programa. É obrigatório um nome, pois cada item de menu terá um procedimento Click associado a ele.

Suponha que seu computador contenha os dispositivos de hardware necessários para mostrar imagens de TV dentro de uma janela. Os menus para o aplicativo, que controla esses dispositivos poderiam ser semelhantes a um controle remoto. Veja a seguir um layout: possível para a estrutura de menus, com três níveis de hierarquia.

Arquivo

On

Off

Exit

Canal

Selecionar ...

Up

Down

Som

Mute

Preset

Soft

Moderate

Loud

Louder

Softer

Observe o sinal de reticências (...) que aparece após o item de menu Selecionar. Ele serve para indicar ao usuário que a sua seleção provocará o aparecimento de uma caixa de diálogo.

Vamos agora implementar os menus desse aplicativo. Entretanto, antes de ir para a janela do editor de menus, é preciso dar uma refinada na sua lista de menus.

Na maioria dos aplicativos Windows, você pode usar o teclado para escolher itens de menus, sem usar o mouse. Essas alternativas via teclado são chamadas de teclas de acesso e normalmente se baseiam no pressionamento da tecla Alt, seguido pelos caracteres que estiverem sublinhados nos menus. Por exemplo, em Visual Basic, você pode digitar Alt, F, S para selecionar a opção Save do menu File. Na janela de projeto de menus, você pode especificar a tecla de acesso para um item de menu, colocando o sinal & antes do caractere a ser sublinhado no menu do aplicativo. (Esse sinal não será exibido no menu.)

A menos que haja algum conflito, use sempre como caractere a primeira letra do título da opção. Por exemplo, em nosso aplicativo, os itens On e Off começam com a mesma letra. Dois itens de menu de mesmo nível não podem ter teclas de acesso iguais. Assim, será preciso escolher alguma outra letra para um dos itens. (Uma outra exceção é o uso da letra X, em vez de E, para a opção Exit. Já se tornou padrão usar a seqüência Alt, F, X para sair dos aplicativos.)

Veja, a seguir, como ficam os itens de menus para o aplicativo de exemplo, com os caracteres para teclas de acesso especificados:

&Arquivo

On

Of&f

E&xit

&Canal

&Selecionar ...

&Up

&Down

&Som

&Mute

&Preset

&Soft

&Moderate

&Loud

&Louder

&Softer

Além de um título e de uma tecla de acesso, cada item de menu precisa de um nome. Ainda que possa parecer lógico usar a mesma palavra tanto para o título quanto para o nome, acontece que muitas vezes isso é impossível. Por exemplo, Exit é uma palavra reservada em Visual Basic que pode ser usada como título, mas não como nome de objetos.

É melhor estabelecer um esquema padrão para designação, a fim de reconhecer imediatamente cada item. Nomes significativos e claros são importantes, pois cada item de menu tem um procedimento Click; quando você está codificando, é muito fácil esquecer qual item de menu está sendo tratado. Por exemplo, vamos usar o prefixo mnu para os nomes de objetos; isso identificará os objetos como itens de menus, diferenciando-os de botões de comandos ou barras de deslocamento.

Para os itens de menu no primeiro nível de hierarquia, coloque após a sigla mnu o próprio título do item: mnuArquivo, por exemplo. Para itens no segundo nível, use mnu seguido por três letras que identifiquem o item de primeiro nível, ao qual está subordinado esse segundo nível, e, finalmente, o próprio título do item de menu: mnuArqOn, por exemplo, ou mnuCanSelecionar. Da mesma forma, para itens de menu do terceiro nível, inclua duas abreviaturas para identificar os níveis superiores. Veja, a seguir, os nomes sugeridos para este aplicativo:

mnuArquivo

mnuArqOn

mnuArqOff

mnuArqExit

mnuCanal

mnuCanSelecionar

mnuCanUp

mnuCanDown

mnuSom

mnuSomMute

mnuSomPreset

mnuSomPreSoft

mnuSomPreModerate

mnuSomPreLoud

mnuSomLouder

mnuSomSofter

Agora, você está pronto para passar para a janela do editor de menus e criar os menus deste aplicativo.

Dê um clique na caixa de texto Caption da janela Menu Editor e digite &Arquivo. Depois, pressione a tecla TAB para mover-se para a caixa de texto Name. Digite mnuArquivo nessa caixa e pressione Enter. O título (mas não o nome) aparecerá na caixa de lista na parte inferior da janela.

Dê um clique no botão seta para a direita acima da caixa de lista. Quatro pontos aparecerão na linha abaixo de &Arquivo, indicando que os próximos itens que serão incluídos fazem parte do segundo nível da hierarquia.

Retorne à caixa de texto Caption e digite &On. Mova-se para a caixa de texto Name, digite mnuArqOn e pressione Enter. Volte para a caixa de texto Caption, digite Of&f, mova-se para a caixa de texto Name, digite mnuArqOff e pressione Enter. Use o mesmo procedimento com o título E&xit e o nome mnuArqExit. A sua janela de editor de menus deverá estar parecida com:

 

Figura 5.66

4. Dê um clique no botão seta para a esquerda para retornar ao primeiro nível da hierarquia. Agora, digite os títulos e nomes restantes de nossa lista. Para incluir os itens do terceiro nível de hierarquia, dê dois cliques no botão seta para a direita. Caso seja cometido algum engano ao colocar um item na hierarquia, você pode selecionar o nome do item na caixa de lista e então dar um clique nos botões setas para a direita e para a esquerda, para ajustar seu nível. Os botões setas para cima e para baixo movimentam um item de menu para um local diferente na lista.

5. Quando você completar a introdução dos itens de menu, dê um clique no botão OK.

A barra de menu agora aparece no form principal do aplicativo. Você pode ver os itens de menu dando um clique nos seus títulos que aparecem na barra. Um menu drop-down será exibido, mostrando as entradas que contém, como pode ser visto na Figura 5.67.

Se você der um clique sobre uma entrada de menu que não conduza a outros níveis hierárquicos, o Visual Basic abrirá a janela de código para o evento Click. Nessa janela, você escreve as instruções a serem processadas quando o usuário selecionar aquele item de menu. Por exemplo, dê um clique no item de menu Exit do menu Arquivo para abrir a janela de código com o procedimento de evento mnuArqExit_Click. A instrução Visual Basic para encerrar um aplicativo é End, assim o procedimento para o item Exit deverá ser:

Sub mnuArqExit_Click ( )

End

End Sub

Figura 5.67 Um form com barra de menu e menus drop-down.

Faça experiências com seu aplicativo, colocando instruções Debug.Print em vários procedimentos de menu e então processando novamente o aplicativo. À medida que selecionar diferentes itens de menu, fique de olho na janela Immediate, para verificar quais procedimentos de menu estão sendo executados.

Opções Adicionais para o Editor de Menus

A janela de edição de menus oferece ainda algumas opções interessantes. Por exemplo, se você colocar um hífen (-) como título, o Visual Basic coloca uma barra separadora naquele item de menu, permitindo um agrupamento visual de itens de menu relacionados. (Ainda que esse nome não seja usado no programa, é preciso assinalar um nome à entrada "hífen".)

Você também pode assinalar teclas de atalho para itens de menu. Abra a janela do editor de menus novamente e selecione E&xit. Depois, dê um clique no botão seta para baixo, ao lado da caixa ShortCut. Você pode assinalar qualquer uma das teclas contidas na lista para o item de menu Exit.

As caixas de verificação Checked, Enabled e Visible na janela de edição de menus correspondem a propriedades do item de menu selecionado na lista de itens de menu. Cada propriedade pode ser configurada para True (indicado por um X na caixa de checagem) ou False (caixa de checagem vazia). A configuração da propriedade Checked para True coloca uma marca de verificação no menu, ao lado do item de menu, indicando que ele está ativo. A propriedade Enabled é configurada para True por default; se você configurá-la para False, o item de menu fica cinza, não podendo ser selecionado a partir do menu. Caso a propriedade Visible seja configurada para False, o item de menu não aparecerá no menu.

As configurações Checked, Enabled e Visible na janela de edição de menus indicam a configuração inicial dessas propriedades. Você pode alterar essas configurações por meio de instruções com a seguinte sintaxe:

objeto.propriedade = [True I False]

A opção Window List é usada com menus de janelas MDI (Multiple Document Interface - Interface de Múltiplos Documentos). No modelo MDI, uma janela mãe do tipo MDI contém janelas filhas (propriedade MDIChild = True). Quando um menu da janela MDI possui a propriedade WindowList assinalada, haverá dentro dele uma lista de todas as janelas filhas abertas no momento. Somente um menu pode possuir esta propriedade ativa.

A opção Index tem nos menus o mesmo significado que para outros objetos: um número que o identifica em uma matriz de objetos com o mesmo nome. No próximo capítulo falaremos sobre matrizes.

HelpContextID é um número que serve para ligar o menu a um tópico no arquivo de help da aplicação quando se quer criar ajuda sensível ao contexto para o menu: o usuário pressiona F1 e um tópico de ajuda aparece explicando o objeto clicado.

Menus Popup

Ainda que, via de regra, os menus sejam invocados a partir da barra de menus, algumas vezes você pode querer exibir um menu a partir de um controle. Esse tipo de menu é chamado de menu popup, pois normalmente não é visível, mas aparece quando é dado um clique em algum controle. Você pode configurar qualquer menu para ser invocado como um menu popup usando o método PopupMenu.

Por exemplo, você poderia associar o menu Som mostrado na Figura 5.69 à imagem de um botão de controle de volume. Use a ferramenta Imagem para criar uma caixa de imagem na tela e depois use a ferramenta Forma para traçar um botão de controle circular dentro da caixa de imagem. (A forma será inicialmente um retângulo. Para criar um círculo, configure a propriedade Shape para 3 - Circle.) Introduza o seguinte código para o evento MouseDown da caixa de imagem.

Figura 5.68

Quando o usuário pressionar o botão do mouse dentro da área da caixa de imagem, o menu Som será invocado, como mostra a Figura 5.69.

Figura 5.69 Um menu popup.

Note que, nesse exemplo, o menu Som poderá ser acessado tanto a partir da barra de menus quanto a partir de um clique na caixa de imagem. Se você quiser que o menu seja visível apenas como popup, deverá configurar a sua propriedade Visible para False na janela de projeto de menus. A propriedade Visible de um item de menu de níveis superiores aplica-se apenas à barra de menus, sendo ignorada pelo método PopupMenu.

 

Ganhe dez áreas de tranferência a mais com RabJump