Depois que os alunos do Visual Basic aprendem tudo sobre loops e instruções condicionais e sub-rotinas, uma das próximas o que eles costumam perguntar é: "Como adiciono um bitmap, um arquivo wav, um cursor personalizado ou algum outro efeito especial?" 1 a resposta é arquivos de recursos. Quando você adiciona um arquivo usando os arquivos de recurso do Visual Studio, eles são integrados diretamente ao seu projeto do Visual Basic para obter velocidade máxima de execução e problemas mínimos empacotamento e implantação seu inscrição.
Os arquivos de recursos estão disponíveis no VB 6 e no VB.NET, mas o modo como são usados, como todo o resto, é um pouco diferente entre os dois sistemas. Lembre-se de que essa não é a única maneira de usar arquivos em um projeto VB, mas tem vantagens reais. Por exemplo, você pode incluir um bitmap em um Caixa de fotos controlar ou usar o mciSendString API do Win32. "MCI" é um prefixo que geralmente indica uma seqüência de comandos de multimídia.
Criando um arquivo de recurso no VB 6
Você pode ver os recursos em um projeto no VB 6 e no VB.NET no diretório Explorador de Projetos janela (Solution Explorer no VB.NET - eles precisavam torná-lo um pouco diferente). Um novo projeto não terá nenhum, pois os recursos não são uma ferramenta padrão no VB 6. Então, vamos adicionar um recurso simples a um projeto e ver como isso é feito.
O primeiro passo é iniciar o VB 6 selecionando um EXE padrão projeto no Novo guia na caixa de diálogo de inicialização. Agora selecione o Suplementos opção na barra de menus e, em seguida, o Gerenciador de suplementos ... Isso abrirá a janela de diálogo Gerenciador de suplementos.
Role a lista e encontre Editor de recursos do VB 6. Você pode apenas clicar duas vezes ou colocar uma marca de seleção no Carregado / descarregado para adicionar essa ferramenta ao seu ambiente VB 6. Se você acha que vai usar muito o Editor de recursos, também pode marcar a caixa Carregar na inicialização e você não terá que passar por essa etapa novamente no futuro. Clique em "OK" e o Editor de recursos será aberto. Você está pronto para começar a adicionar recursos ao seu projeto!
Vá para a barra de menus e selecione Projeto então Adicionar novo arquivo de recurso ou clique com o botão direito do mouse no Editor de recursos e selecione "Abrir" no menu de contexto exibido. Uma janela será aberta, solicitando o nome e o local de um arquivo de recurso. O local padrão provavelmente não será o desejado, então navegue até a pasta do projeto e digite o nome do seu novo arquivo de recurso no diretório Nome do arquivo caixa. Neste artigo, usarei o nome "AboutVB.RES" para este arquivo. Você precisará confirmar a criação do arquivo em uma janela de verificação e o arquivo "AboutVB.RES" será criado e preenchido no Editor de Recursos.
Suporta VB6
O VB6 suporta o seguinte:
- Um editor de tabela de cadeias
("Editar tabelas de strings ...") - Cursores personalizados - arquivos "CUR"
("Adicionar cursor ...") - Ícones personalizados - arquivos "ICO"
("Adicionar ícone ...") - Bitmaps personalizados - arquivos "BMP"
("Adicionar bitmap ...") - Recursos definidos pelo programador
("Adicionar recurso personalizado ...")
O VB 6 fornece um editor simples para seqüências de caracteres, mas você precisa criar um arquivo em outra ferramenta para todas as outras opções. Por exemplo, você pode criar um arquivo BMP usando o simples programa Windows Paint.
Cada recurso no arquivo de recurso é identificado no VB 6 por um Eu iria e um nome no Editor de recursos. Para disponibilizar um recurso para o seu programa, adicione-o no Editor de Recursos e use o ID e o recurso "Tipo" para apontá-lo ao seu programa. Vamos adicionar quatro ícones ao arquivo de recurso e usá-los no programa.
Quando você adiciona um recurso, o próprio arquivo real é copiado para o seu projeto. O Visual Studio 6 fornece uma coleção inteira de ícones na pasta ...
C: \ Arquivos de programas \ Microsoft Visual Studio \ Common \ Graphics \ Icons
Para seguir a tradição, selecionaremos os quatro "elementos" do filósofo grego Aristóteles - Terra, Água, Ar e Fogo - no subdiretório Elements. Quando você os adiciona, o ID é atribuído pelo Visual Studio (101, 102, 103 e 104) automaticamente.
Para usar os ícones em um programa, usamos uma função "Load Resource" do VB 6. Existem várias destas funções para escolher:
- LoadResPicture (índice, formato) para bitmaps, ícones e cursores
Use as constantes predefinidas do VB vbResBitmap para bitmaps, vbResIcon para ícones e vbResCursor para cursores para o parâmetro "format". Esta função retorna uma imagem que você pode usar diretamente. LoadResData (explicado abaixo) retorna uma sequência que contém os bits reais no arquivo. Vamos ver como usar isso depois de demonstrarmos ícones.
- LoadResString (índice) para cordas
- LoadResData (índice, formato) para qualquer coisa até 64K
Como observado anteriormente, essa função retorna uma sequência com os bits reais no recurso. Estes são os valores que podem ser usados para o parâmetro format aqui:
1 Recurso do cursor
2 Recurso de bitmap
3 Recurso de ícone
4 Recurso do menu
5 Caixa de diálogo
Recurso de 6 cordas
7 Recurso de diretório de fontes
8 Recurso de fonte
9 mesa aceleradora
10 Recurso Definido pelo Usuário
12 Cursor do grupo
14 ícone do grupo
Como temos quatro ícones em nosso arquivo de recursos AboutVB.RES, vamos usar LoadResPicture (índice, formato) para atribuí-los à propriedade Picture de um CommandButton no VB 6.
Eu criei um aplicativo com quatro OptionButton componentes rotulados Terra, Água, Ar e Fogo e quatro eventos Click - um para cada opção. Então eu adicionei um Botão de comando e alterou a propriedade Style para "1 - Graphical". Isso é necessário para poder adicionar um ícone personalizado ao CommandButton. O código para cada OptionButton (e o evento Load do formulário - para inicializá-lo) é semelhante a este (com o Id e Caption alterados de acordo com os outros eventos OptionButton Click):
Recursos Personalizados
O "grande problema" dos recursos personalizados é que você normalmente precisa fornecer uma maneira de processá-los no código do programa. Como Microsoft afirma: "isso geralmente requer o uso de chamadas da API do Windows". É isso que vamos fazer.
O exemplo que usaremos é uma maneira rápida de carregar uma matriz com uma série de valores constantes. Lembre-se de que o arquivo de recurso está incluído no seu projeto; portanto, se os valores que você precisa carregar mudar, você precisará usar uma abordagem mais tradicional, como um arquivo seqüencial aberto e ler. A API do Windows que usaremos é a CopyMemory API. CopyMemory copia bloco de memória para um bloco diferente, independentemente do tipo de dados armazenado nele. Essa técnica é bem conhecida pelos VB 6'ers como uma maneira ultra rápida de copiar dados dentro de um programa.
Este programa é um pouco mais envolvido, porque primeiro precisamos criar um arquivo de recurso que contém uma série de valores longos. Eu simplesmente atribuí valores a uma matriz:
Dim longs (10) As Long
longs (1) = 123456
longs (2) = 654321
... e assim por diante.
Em seguida, os valores podem ser gravados em um arquivo chamado MyLongs.longs usando a instrução "Put" do VB 6.
É uma boa ideia lembrar que o arquivo de recurso não muda, a menos que você exclua o antigo e adicione um novo. Portanto, usando essa técnica, você precisaria atualizar o programa para alterar os valores. Para incluir o arquivo MyLongs.longs no seu programa como um recurso, adicione-o a um arquivo de recurso usando as mesmas etapas descritas acima, mas clique no botão Adicionar recurso personalizado ... em vez de Adicionar ícone... Em seguida, selecione o arquivo MyLongs.longs como o arquivo a ser adicionado. Você também precisa alterar o "Tipo" do recurso clicando com o botão direito do mouse nesse recurso, selecionando "Propriedades" e alterando o Tipo para "longs". Observe que esse é o tipo de arquivo do seu arquivo MyLongs.longs.
Para usar o arquivo de recurso que você criou para criar uma nova matriz, primeiro declare a chamada da API Win32 CopyMemory:
Então leia o arquivo de recurso:
Em seguida, mova os dados da matriz de bytes para uma matriz de valores longos. Aloque uma matriz para os valores longos usando o valor inteiro do comprimento da cadeia de bytes dividido por 4 (ou seja, 4 bytes por comprimento):
Agora, isso pode parecer um monte de problemas quando você pode inicializar a matriz no evento Carregamento de Formulário, mas demonstra como usar um recurso personalizado. Se você tivesse um grande conjunto de constantes com as quais precisava inicializar a matriz, ela seria executada mais rapidamente do que qualquer outra outro método que eu possa pensar e você não precisaria ter um arquivo separado incluído no seu aplicativo para fazer isto.