Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivo do módulo
Estes controles foram considerados avançados por serem controles de manipulação mais
complexa que os apresentados no curso básico. Não é objetivo deste módulo abordar
todos os controles do Visual Basic, suas propriedades e eventos.
à Command Dialog
à File Browsers
à Graph
Group Push Buttons trabalham como se fossem uma combinação de command buttons e
de option buttons. Trabalham como Command Buttons porque, quando
pressionados, ações são executadas. Também trabalham como Option Buttons
porque se você ajustar suas propriedades corretamente, eles funcionam como grupos
de opções.
Propriedade Descrição
GroupAllowAllU Determina se todos os botões de um grupo lógico podem
p estar não pressionados ao mesmo tempo.
GroupNumber Determina grupos lógicos dentro de um toolbar.
Outline Cria uma borda ao redor do botão.
PictureDisabled Determina a figura que o botão deverá conter quando
estiver desabilitado.
PictureDn Determina a figura que o botão deverá conter quando
estiver pressionado.
PictureDnChange Determina de que modo a figura que o botão contém
quando não está pressionado deverá ser alterada
quando ele for pressionado.
PictureUp Determina a figura que o botão deverá conter quando não
estiver pressionado.
OBS.1: Para a criação de botões exclusivos entre si, deve-se obedecer a ordem de
criação dos botões, ou seja, um grupo de botões somente será exclusivo em relação
aos outros do grupo se eles tiverem sido criados um após o outro.
Esta ferramenta do Visual Basic permite que você utilize as caixas de diálogo padrão do
Windows. O tipo da caixa utilizada será definida pelo valor da propriedade action
do controle.
Exemplo :
Sub Command1_Click
CMDialog1.action = 2
End Sub
1.3 Drive List Box, Directory List Box e File List Box
Estes três controles são uma forma especial de List Boxes. Com eles, você pode criar
telas de seleção de arquivos personalizadas. É importante visualisar a importância
destes controles juntos, pois uma mudança de conteúdo de um controle refletirá no
conteúdo dos outros.
O File List Box é uma lista que contém o nome de todos os arquivos pertencentes ao
diretório atual. Além das propriedades normais de uma lista, ele apresenta uma
série de propriedades inerentes à sua função.
Propriedade Descrição
Archive Mostra todos os arquivos do tipo ARCHIVE.
FileName Retorna o nome do arquivo selecionado.
Hidden Mostra todos os arquivos do tipo HIDDEN.
Normal Mostra todos os arquivos do tipo NORMAL.
Path Indica o caminho de procura dos arquivos. Acessível apenas em
runtime.
Pattern Indica o tipo de arquivos procurados. Acessível apenas em runtime.
ReadOnly Mostra todos os arquivos do tipo READONLY.
System Mostra todos os arquivos do tipo SYSTEM
O Directory List Box é um tipo combo box que mostra os diretórios na unidade de
disco selecionada.
Propriedade Descrição
Name Nome interno do controle.
Path Indica o diretório selecionado. ( Acessível apenas em runtime
).
EVENTO CHANGE
Sempre que o valor do Directory List Box é alterado, um evento change acontece. Neste
evento, você deve codificar a sincronização deste controle com o File List Box.
Exemplo :
Sub Dir1_Change ()
File1.Path = Dir1.path
End Sub
O Drive List Box é um tipo combo box que mostra os drives disponíveis no sistema.
Propriedade Descrição
Name Nome interno do controle.
Drive Retorna o valor do Drive selecionado. ( Acessível apenas
em runtime ).
EVENTO CHANGE
Sempre que o valor do Drive List Box é alterado, um evento change acontece. Neste
evento, você deve codificar a sincronização deste controle com o Directory List
Box.
Exemplo :
Sub Drive1_Change ()
Dir1.Path = Drive1.drive
End Sub
Exemplo - Drive List Box, Directory List Box e File List Box
Para exemplificar estes três controles, criaremos uma tela de abertura de arquivos.
Executando a Aplicação
17. Pressione F5 ou selecione Start do menu Run.
1.4 Graph
O controle graph permite que você desenhe gráficos em sua aplicação, defina suas
características e dados em design time ou em run time. Comandos para a impressão
de gráficos ou criação de copias para a área de transferência do Windows podem ser
executados em run time.
O controle Graph gera randomicamente dados para que você visualize, em design time,
o gráfico que está sendo criado.
O controle Graph permite que sejam feitos gráficos dos seguintes tipos:
à Pie
à Bar
à Gantt
à Line, Log/Lin e Polar
à Area
à Scatter
à HLC (High-Low-Close)
Propriedades:
Propriedade Descrição
GraphType Defino o tipo do gráfico.
GraphStyle Define as características do gráfico. Conforme o tipo do
gráfico os valores a serem atribuidos têm significados
diferentes.
GraphTitle Define o título do gráfico.
BottonTitle Define o texto que aparecerá abaixo do eixo X do gráfico.
DrawStyle Define se o gráfico é colorido (default) ou
monocromático.
ColorData Define a cor de cada conjunto de dados apresentado no
gráfico.
GraphData Define os dados com que o gráfico será feito.
RandomData Define se o gráfico será gerado randomicamente em
design time.
DataReset Reinicializa as propriedades já definidas para o gráfico
(as propriedades que possuem valor default são
inicializadas com este valor).
DrawMode Comanda a geração de um novo desenho do gráfico em
run time, sua impressão ou cópia.
ExtraData Define se algum segmento do gráfico tipo Pie deve ser
separado ou define a cor dos lados das barras do
gráfico de barras tri-dimensional.
NumSets Define o número de conjuntos de dados que aparecerão
no gráfico.
ThisSet Permite identificar um conjunto de dados para que suas
características possam ser alteradas.
ThisPoint Permite identificar um ponto do gráfico para que suas
características sejam alteradas.
Labels Define se haverá texto para os valores dos eixos.
LabelText Define o texto referente aos valores dos eixos.
LabelEvery Define a frequência com que valores devem aparecer no
eixo X.
LegendText Define a legenda.
YAxisMax/Min Determina os valores máximo e mínimo para o eixo Y.
Neste exemplo você irá determinar o tipo do gráfico a partir de option buttons e seus
valores conforme uma seleção feita pelo usuário em um grid.
O gráfico será desenhado a partir de uma linha do grid e a atualização de seus valores
será comandada pelo click do botão ATUALIZA.
Criando os controles
2. Crie um frame com três Option Buttons com os seguintes textos na propriedade
Caption: "Pie", "Bar", "Area" e na propriedade Name: OPTPie, OPTBar, OPTArea.
3. Crie um painel3D e neste painel crie um Grid com 2 linhas e 3 colunas, nenhuma
delas deve ser fixa (propriedades FixedCols = 0 e FixedRows = 0). Ainda no painel
3D, crie um botão com o texto "Atualiza" na propriedade Caption e na propriedade
Name CMBAtualiza.
4. Crie um gráfico.
Codificando o formulário
5. Preencher o grid com valores aleatórios no evento formLoad:
Escreva as seguintes linhas de código:
grid1.Row = 0
grid1.Col = 0
grid1.Row = 1
grid1.Col = 0
grid1.Text = "valor4"
grid1.Col = 1
grid1.Text = "valor5"
grid1.Col = 2
grid1.Text = "valor6"
Sub OPTPie_Click ()
graph1.GraphType = 2
graph1.DrawMode = 2
End Sub
Sub OPTBar_Click ()
graph1.GraphType = 4
graph1.DrawMode = 2
End Sub
Sub OPTArea_Click ()
graph1.GraphType = 8
graph1.DrawMode = 2
End Sub
Col_I% = grid1.SelStartCol
Col_F% = grid1.SelEndCol
graph1.ThisSet = 1
graph1.ThisPoint = 1
graph1.AutoInc = 1
For i = Col_I% To Col_F%
grid1.Col = i%
graph1.GraphData = Val(grid1.Text)
Next
graph1.DrawMode = 2
Objetivo
O evento KeyPress ocorre sempre que o o usuário pressionar uma tecla que faça parte
do padrão ASCII. Portanto podemos utilizar este evento para restringir e
transformar as teclas digitadas pelo usuário.
Por exemplo, podemos impedir que o usuário digite qualquer coisa que não seja
números em uma caixa de texto. Verifique o código a seguir :
Sub Text1_KeyPress (KeyAscII As Integer)
If KeyAscii <48 or KeyAscII > 57 then
KeyAscii = 0
End If
End Sub
1. KeyDown
2. KeyUp
3. KeyPress
2.3 KeyPreview
Função Descrição
InStr Retorna a posição onde um conjunto de caracteres começa dentro de
uma string. Ex.: Pos = InStr ( "flor", "reflorestamento"). O
exemplo retorna valor 3.
String Repete um caracter especificado por n vezes.
Ex.: texto = string(5,"*"). O exemplo retorna "*****".
Objetivo
Apresentar controles e menus dinâmicos, que são controles/menus que são criados em
tempo de execução. Eles são, basicamente, utilizados quando necessita-se ter vários
controles de um mesmo tipo ou menus que compartilhem os mesmos
procedimentos.
Uma vez criado o Control Array, você pode dinamicamente adicionar controles ao seu
formulário através do comando Load. O comando Load cria uma nova instância do
controle, copiando todas as propriedades do último controle criado, exceto Index,
Visible e TabIndex.
O controle criado, tem inicialmente a propriedade Visible com valor False. Para torná-
lo visível, atribuir o valor True à sua propriedade Visible.
Menus dinâmicos seguem a mesma filosofia de controles dinâmicos. Você cria o Menu
Array e, em tempo de execução, os ítens do menu são criados, à medida que vão se
tornando necessários.
2. Criar duas TextBoxes, uma ao lado da outra, na parte superior do formulário ( mas
não colado à borda superior). Atribua as seguintes propriedades, respectivamente :
TXBBuffer(indice).Visible = True
MNUCopiar(indice).Visible = True
MNUCortar(indice).Visible = True
MNUColar(indice).Visible = True
MNUEditar.Enabled = True
indice = indice + 1
End If
End Sub
Unload MNUCopiar(indice - 1)
Unload MNUCortar(indice - 1)
Unload MNUColar(indice - 1)
indice = indice - 1
Else
If indice = 1 then
TXBBuffer(indice - 1).text = ""
TXBBuffer(indice - 1).visible = False
indice = indice - 1
Endif
End If
End Sub
TXBBuffer(index).SelText = TXBOrigem.SelText
TXBOrigem.SelLength = 0
End Sub
8. Adicionar as seguintes linhas de código ao click de MNUCortar :
Sub MNUCortar_Click (index As Integer)
TXBBuffer(index).SelText = TXBOrigem.SelText
TXBOrigem.SelText = ""
End Sub
9. Adicionar as seguintes linhas de código ao click de MNUColar :
Sub MnuColar_Click (index As Integer)
TXBOrigem.SelText = TXBBuffer(index).Text
TXBBuffer(index).Text = ""
End Sub
Executando a Aplicação
10. Digite texto na primeira Text Box. Crie Text Boxes dinamicamente e corte e cole
textos entre elas. Quando estiver familiarizado com a aplicação, tente fazer com que
a caixa de origem seja também um Control Array.
Objetivo
Apresentar esta interface, tão comum em ambiente Windows. MDI permite que um
formulário contenha vários outros formulários dentro dele.
O MDI ( Multiple Document Interface) permite que uma aplicação possua várias janelas
dentro de um único formulário.
Em uma aplicação MDI, existe um formulário, que pode ser denominado de pai ou
container, que possui vários "filhos". Os controles e respectivos procedimentos, são
compartilhados entre os filhos.
Uma aplicação pode conter, no máximo, um formulário-pai, porém vários tipos de filhos
( Formulários MDI-filho diferentes ). Formulários MDI e outros formulários podem
coexistir dentro de uma mesma aplicação.
A maioria dos aplicativos do Windows têm interface MDI. Ex.: Microsoft Word,
Microsoft Excel, etc. O Visual Basic é um exemplo de aplicação não MDI.
Para criar uma nova instância de um formulário-filho, usa-se palavra reservada New,
no momento de da declaração da variável. Depois, basta mostrar o formulário.
Sub MNUNovoFilho_Click ( )
Dim novo_filho as New nome_do_formulário
novo_filho.show
End Sub
4.3 Palavra-Chave ME
Para ter acesso a uma instância de um formulário, usa-se a palavra reservada Me.
Veja o exemplo abaixo, que utiliza a palavra reservada Me para alterar o caption de
cada formulário-filho (considera-se que existe uma variável global que é
incrementada sempre que um novo formulário é carregado ) :
Sub Formulário_filho_Load ()
contador = contador + 1
Me.Caption = "Formulário Filho"+ str( contador )
End Sub
Obs.: Verifique no Microsoft Word como o menu se altera quando todos os documentos
são fechados.
Na maioria das aplicações MDI existe um item de menu chamado Janela. Este item de
menu, além de oferecer opções de arrumação de tela, exibe uma lista de todos os
formulários abertos.
O Método Arrange
Arrumação Parâmetro
Em cascata 0
Em blocos horizontais 1
Em blocos verticais 2
Como vimos antes, para se criar uma barra de ferramentas, utiliza-se o Panel3D e
Group Push Buttons.
A solução é :
• Fazer com que todos os procedimentos que necessitem ser chamados, tanto do
formulário-pai como dos filhos, estejam codificados em um módulo (.BAS).
• Criar um vetor , em que cada item contenha o conjunto de váriaveis necessárias por
instância de formulário ( Fazer um vetor de tipos, onde o tipo será o conjunto de
todas as variáveis de uma instância de formulário-filho ). A associação de cada item
deste vetor com cada instância de formulário filho deverá ser feita através da
propriedade tag de cada formulário-filho, que deverá ter sido "setada" quando a
instância do formulário foi criada.
5.0 Impressão
Objetivo
Apresentar o meio que o Visual Basic utiliza para fazer impressão em telas ou em
impressoras. A impressão no Visual Basic não será muito detalhada, pois dentre os
seu utilitários, o Visual Basic possui um gerador de relatórios, o Crystal Report.
PrintForm
Sintaxe : nome-formulário.PrintForm
Cls
Sintaxe : Objeto.Cls
Spc
Tab
Objetivo
Neste módulo será mostrada a ferramenta Crystal Report, que é o gerador de relatórios
do Visual Basic. O produto que acompanha o Visual Basic é uma versão standard
do Crystal Report, há uma versão professional disponível no mercado, que é
comercializada pelos desenvolvedores do produto.
O Crystal Report lê qualquer base de dados que seja compatível com o padrão ODBC
Uma caixa de diálogo aparecerá para seleção da base de dados que contém as
tabelas com dados a serem utilizados nesse relatório.
Fórmula
Inserindo Campos
4. Caso essa janela não esteja visível, no menu Inserir selecionar Data Base Field.
6. Selecione da Barra de Ferramentas a opção Imprimir para Janela e veja como está o
relatório.
Criando Links
8. Selecionar New...
Existem duas colunas: a da tabela a ser ligada e a da outra tabela base para o link. A
tabela independente deve ficar à direita enquanto a depentente à esquerda. A
primeira combo das duas colunas indicam a tabela a ser linkada. A segunda combo à
esquerda possui todos os campos da tabela da combo de cima, e a segunda combo à
direita possui os índices da tabela da combo de cima. Os campos de link já são
automaticamente selecionados entre as chaves das tabelas. Os campos a serem
ligados devem possuir o mesmo nome, tipo e tamanho.
12. Selecione da barra de ferramentas a opção Imprimir para Janela e veja com está o
relatório.
A primeira combo indica o tipo de sumarização a ser feita e a segunda o grupo a ser
sumarizado. Nesse caso, selecione count para saber quantos funcionários existem
por cargo. Depois de confirmar, automaticamente é posicionado o campo de
totalização no rodapé da quebra de grupo.
15. Selecione da Barra de Ferramentas Imprimir para Janela e veja como ficou.
16. Selecione nm_funcionário da linha de detalhe e depois menu Inserir Grand Total...
18. Após confirmar, observe que uma nova divisão de Grand Total foi inserida e o
campo de totalização posicionado nela.
19. Selecione da barra de ferrramentas Inserir Texto e digite: "Total Geral:". Posicione a
divisão de Grand Total à esquerda do novo campo de totalização.
21. Selecione da Barra de Ferramentas Inserir Linha. Insira linhas onde achar necessário
para dividir visualmente o relatório. Ex.:Dividir entre cabeçalho de cargo e detalhes
com nome dos funcionários.
22. Veja como ficou o relatório. Agora você pode criar em cima dele alterando cores e
formatos de letras (opção de menu Format Fonts).
23. No menu Insert selecione Print Date Field e posicione à esquerda do cabeçalho do
relatório. À esquerda da data escreva: "Data:"
24. No menu Insert selecione Page Number Field e posicione abaixo da data. À
esquerda da página escreva:"Página:"
Salvando o arquivo
28. Dar nome ao objeto com prefixo CRR - na propriedade Name - e na propriedade
ReportFileName selecionar o relatório - nesse caso FUNCARGO.RPT.
29. Para chamar o relatório, o código de um evento como Click de um botão deve conter
o seguinte comando para exibir o relatório na tela:
CRR.Action = 1
Objetivo
Neste módulo serão mostradas as ferramentas que o Visual Basic oferece para auxílio
na identificação de erros de execução.
Permite a criação e a alteração de variáveis de watch. Estas variáveis exibem seu valor
sempre que o programa entrar em break mode.
Sempre que um programa estiver em Break Mode, para voltar a execução do programa,
basta escolher a opção Start do menu Run ou então apertar F5.
As opções Single Step /Procedure Step estão no menu Debug, mas também podem ser
encontradas no barra de ferramentas.
O Set Next Statement funciona como um GoTo dinâmico. Ele desvia o fluxo do
programa para a linha selecionada, e continua a partir dali. O comando Set Next
Statement também fica no menu Debug.
Objetivo
Para criar um sistema de tratamento de erros para uma aplicação Visual Basic, o
operador deve seguir basicamente três passos :
A cláusula On Error deve ser especificada no início de uma rotina qualquer e o label
que indica o início da rotina de tratamento de erro deverá estar dentro da mesma
rotina.
Sintaxe :
Quando ocorre um erro, o Visual Basic gera um número referente ao erro ocorrido. Este
número pode ser obtido através da função ERR. A mensagem de texto relativa ao
erro ocorrido pode ser fornecido através da função ERROR.
Exemplo :
Quando um erro ocorre, o programador pode, além de apenas mostrar o erro ocorrido e
finalizar a aplicação, pode também mostrar uma mensagem para usuário pedindo
que este tome uma ação corretiva, dependendo do erro. Isso pode ser implementado
se dentro da rotina de tratamento de erros, o programador testar o tipo do erro
ocorrido ( através da função ERR ), e para cada tipo de erro tomar uma atitude
diferente.
Exemplo :
Sub Command3D1_Click ()
On Error GoTo T_Erro
FileCopy "a:arq1.txt", "b:arq2.txt"
Exit Sub
T_Erro:
Select Case Err
Case 71
MsgBox "Não existe disquete no drive. Coloque um e tente
novamente!"
Case 55
MsgBox "Não se pode copiar um arquivo aberto. Feche-o e
tente novamente"
Case Else
MsgBox "Um erro aconteceu. Chame o suporte Técnico!"
End Select
Resume Next
End Sub
Resume O comando resume faz com que a aplicação tente continuar seu
fluxo a partir de comando onde ocorreu o erro. Se o erro não tiver sido corrigido,
novo erro ocorre. Se ele continuar não sendo corrigido, a aplicação entra em "loop".
Resume Next O comando Resume Next faz com que a aplicação tente continuar
seu fluxo a partir do comando seguinte ao comando onde ocorreu o erro. Se a partir
deste ponto existam comandos cujo funcionamento dependiam do sucesso da
operação onde o erro havia acontecido, novos erros acontecerão.
Resume < Label > Este comando faz com que a aplicação tente continuar seu fluxo
de execução a partir de um label definido pelo operador dentro da mesma rotina.
Funciona como um "goto".
O usuário pode especificar uma cláusula On Error em cada módulo da aplicação (sub-
rotina, função ou evento do sistema) e codificar rotinas de tratamento de erro para
cada uma delas. No entanto, isto não é necessário.
Sempre que ocorre um erro dentro de uma rotina, o sistema verifica se foi especificado
tratamento de erro para aquela rotina. Em caso positivo, o erro é tratado dentro
daquela rotina e a execução do sistema prossegue dali, dependendo do que foi
especificado pelo usuário. Em caso negativo, o sistema verifica se foi especificado
tratamento de erro na rotina chamadora daquela função ou rotina. Caso exista, o
tratamento é efetuado, caso contrário a procura por tratamento de erro prossegue na
árvore de rotinas chamadoras, até que esta acabe. Se nenhum tratamento de erro
tiver sido especificado para aquela árvore de chamadas, um erro de execução ocorre.
Quando um erro é passado para rotinas chamadoras para que seja tratado, a execução da
aplicação prossegue a partir da rotina onde o erro foi tratado, não necessariamente a
rotina onde o erro ocorreu.
Objetivo
Neste módulo será mostrado a forma que o Visual Basic implementa o DDE (Dynamic
Data Exchange), que é a maneira pela qual o Windows permite que aplicações
diferentes comuniquem entre si.
DDE é um mecanismo do Windows que permite que duas aplicações comuniquem entre
si, continuamente e automaticamente trocando dados.
Uma Ligação DDE envolve duas partes : uma que envia dados, denominada aplicação
fonte, e outra que recebe os dados, chamada de aplicação destino.
Em Visual Basic, apenas alguns controles podem servir de destino de ligações DDE.
São eles : TextBoxes, PictureBoxes, e Labels.
Existem três tipos de ligação DDE no Visual Basic : Automática, Manual e Notificada.
Na ligação Notificada, cada vez que a aplicação fonte sofre uma alteração, um evento
ocorre na aplicação destino, notificando-a que houveram mudanças na aplicação
fonte.
Uma ligação pode ser criada tanto em Design-time quanto em Run-time. Em Design-
Time, você utiliza as facilidades de Corte e Colagem (Cut e Paste) do Windows. Ao
fazer a colagem, O VB automaticamente determina todas as propriedades
necessárias para fazer uma ligação. Ao mesmo tempo que a criação de uma DDE em
design-time é bastante fácil, este tipo de criação lhe tira a flexibilidade de trabalho.
Por exemplo, uma ligação deste tipo será sempre do tipo automática. e isto somente
poderá ser alterado, se você escrever código para isto.
Para fazer uma ligação em Run-Time, você próprio determina as mesmas propriedades,
que o VB determina quando a ligação é feita em design-time, só que via
programação.
Para exemplificar a criação de uma ligação DDE em design-time usaremos o Word for
Windows como aplicação fonte e o VB com aplicação destino.
Executando a Aplicação
7. Pressione F5 ou selecione Start do Menu Run.
8. Pare a aplicação e verifique quais as propriedades da textbox são novas para você.
Verifique e procure compreender o conteúdo destas variáveis.
Já foi visto acima como criar ligações DDE em design-time. Vimos também que um
TextBox possui uma série de propriedades que quando "setadas", permitem a uma
aplicação VB fazer uma ligação dinâmica a um outro aplicativo qualquer do
Windows. Neste tópico veremos cada uma destas propriedades e qual é o seu papel
dentro deste importante mecanismo.
Aplicação Destino
Quando uma aplicação VB atua como destino de uma ligação DDE, as seguintes
propriedades do controle que será destino da ligação DDE devem ter seus valores
determinados : LinkMode, LinkTopic e LinkItem. A propriedade LinkTimeout
também pode ter seu valor determinado, não sendo porém imprescindível para o
estabelecimento da DDE.
Exemplos:
1. LinkMode = 0
2. "Setar" o conteúdo de LinkTopic
3. "Setar" o conteúdo de LinkItem
4. "Setar" o conteúdo de LinkTimeout
5. "Setar" o conteúdo de LinkMode
Aplicação Fonte
Quando uma aplicação VB atua como fonte de uma ligação DDE, as seguintes
propriedades do formulário que contém o controle que será fonte da ligação DDE
devem ter seus valores determinados : LinkMode, LinkTopic.
Valor Definição
0 Não é fonte de ligação DDE.
1 Pode ser fonte de ligação DDE.
Sintaxe :
<nome-do-controle>.LinkRequest
Sintaxe:
<Nome_controle>.LinkPoke
Sintaxe:
<nome-controle>.LinkExecute
Quando o uma aplicação VB está no papel de fonte em uma ligação DDE, se a ligação é
do tipo automática, o VB atualiza a aplicação destino quando há qualquer alteração
no controle que é fonte da ligação. Isto ocorre quando a fonte da ligação é diferente
de desenho.
Isto ocorre para gráficos porque o envio de um desenho de uma aplicação para outra
pode ser dispendioso demais em relação a recursos de máquina e tempo. Este é o
porquê da opção da Microsoft por "não manter ligação automática para figuras".
LinkClose → Ocorre tanto na aplicação fonte como na destino, quando uma das
duas finaliza a ligação.
Para exemplificar este tipo de ligação DDE, criaremos uma aplicação que mostrará o
conteúdo de uma coluna de uma planilha Excel, e além disso, um gráfico dos
números apresentados. Esta ligação DDE poderá se dar de modo automático ou
manual.
Pic.LinkItem = ""
Pic.LinkTimeOut = 50
Txt.LinkMode = 0
Txt.LinkTopic = "Excel|source.xls"
Txt.LinkTimeout = 50
Frame.enabled = true
CMDConecta.enabled = false
Txt.LinkMode = 0
Txt.LinkMode = 2
Executando a Aplicação
17. Experimente fazer alterações na planilha, e veja os resultados tanto quando a ligação
DDE for de tipo automático, quanto quando a ligação for manual.
Para exemplificar este tipo de ligação DDE, criaremos uma aplicação que mostrará o
conteúdo de um documento Word. Esta ligação DDE poderá se dar de modo
automático ou manual. Você vai observar também, o que acontece quando tentamos
criar uma ligação do tipo "Notificada", quando a aplicação fonte é o Word.
Executando a Aplicação
19. Experimente fazer alterações no texto, e veja os resultados tanto quando a ligação
DDE for de tipo automático, quanto quando a ligação for manual ou Notificada.
Já vimos nos exemplos anteriores como o Visual Basic funciona como aplicação destino
de uma ligação DDE, onde a fonte é ou o Excel ou o Word for Windows. Agora,
veremos como funciona uma ligação DDE onde uma aplicação VB é fonte, e outra
destino.
Executando a Aplicação
23. Experimente fazer alterações no texto na aplicação Fonte, e ver os resultados tanto
quando a ligação DDE for de tipo automático, quanto quando a ligação for manual
ou Notificada.
Objetivo
Dentro do objeto OLE, você pode, por exemplo, colocar uma planilha Excel. O usuário
irá visualizar esta planilha, da mesma forma que ele a vê no Excel. Ao dar duplo-
clique com o mouse sobre aquele objeto, o usuário poderá editar a planilha dentro
do próprio Excel.
O controle do Visual Basic OLE, uma vez colocado no formulário permite que você
associe aquela posição de tela a um aplicativo qualquer do Windows. O item ao qual
o OLE é associado, é denominado objeto. Um objeto pode ser uma planilha em
Excel, um documento em Word, uma figura do PaintBrush, etc..
O controle OLE é utilizado para associar um objeto a uma aplicação Visual Basic. Esta
associação pode ser feita de duas maneiras : Ligando o objeto ao controle OLE da
aplicação Visual Basic ou incorporando o objeto na aplicação.
Ligação
Na ligação, o objeto não fica guardado dentro da aplicação VB. Nela, há apenas um
ponteiro direcionando-a para o objeto externo. Este objeto, além de ser acessado
pela sua aplicação, também pode ser acessado por qualquer outro aplicativo
Windows. Por exemplo, se você tiver uma planilha Excel ligada à sua aplicação VB,
esta mesma planilha também poderá estar ligada a um documento Word. Isto
acontece porque o VB não guarda dentro de si a planilha, mas apenas um ponteiro
para ela.
Incorporação
Na Incorporação, o dado fica guardado dentro da aplicação VB. Este dado somente
pode ser acessado pela ferramenta que o gerou, e assim mesmo, quando chamado de
dentro da aplicação VB que possui o dado.
Executando a Aplicação
11. Crie um objeto "ligado" ( não incorporado ). Faça alterações nele e veja como ele
reage.
• Insert Object - Mostra a Caixa de Diálogo para associação do controle OLE com
um aplicativo Windows.
Dados associados a uma objeto OLE não são permanentes, isto é, quando um formulário
contendo um controle OLE é fechado, todos os dados associados àquele controle são
perdidos. É possível salvar dados de um objeto OLE para um arquivo através da
propriedade Action. Uma vez salvos os dados, eles podem ser lidos de volta para o
controle OLE a qualquer momento.
Objetos OLE podem ser salvos apenas para arquivos binários abertos.
Veja o exemplo abaixo, este código poderia ser associado ao click de um botão :
Veja o exemplo abaixo, este código poderia ser associado ao click de um botão :
ole1.Class = "PBrush"
ole1.Action = 0
numarquivo = FreeFile
Open "c:\curso\FOO.ole" For Binary As #numarquivo
ole1.FileNumber = numarquivo
ole1.Action = 11
Close #numarquivo
Executando a Aplicação
Objetivo
Dynamic Link Libraries (DLLs), como o próprio nome sugere, são bibliotecas de
funções que podem ser dinamicamente "ligadas" a aplicações em run-time, ao invés
de associadas estaticamente em design-time.
Uma aplicação VB pode não só chamar DLLs do Windows (GDI, Kernel, User), como
também bibliotecas como o VBRun300.DLL, bibliotecas de outros aplicativos, e
bibliotecas próprias, escritas em C.
Existe Help on-line para as bibliotecas do Windows ( podem ser encontrados como
ícones no grupo de programas do Visual Basic 3.0) :
Win 3.1 API Help ⇒ Contém a lista de todas as funçoes existentes nas
bibliotecas do Windows. Neste Help, há também a declaração para cada uma destas
funções.
Para utilizar uma biblioteca DLL, o programador deve seguir os seguintes passos :
Exemplo :
Declare Sub InvertRect Lib "User" (ByVal hDC as
integer, aRect as Rectangle)
Uma vez declarada a função ou rotina, você pode chamá-la de seu código como se fosse
uma outra subrotina qualquer.
Tenha cuidado, pois se algum parâmetro incorreto for passado, a sua aplicação pode
abortar. Salve seu trabalho com freqüencia !!!
Exemplo :
Sub Form_Load ()
Const SM_MOUSEPRESENT = 19
show
If GetSystemMetrics(SM_MOUSEPRESENT) Then Print "Mouse Installed"
End Sub
O Visual Basic não contém um tipo de dados Char. Quando uma função de uma DLL
exigir como parâmetro este tipo de dado, o código ASCII do caracter deverá ser
passado numa variável inteiro.
A linguagem C não suporta o tipo currency. Quando um valor deste tipo tiver que ser
passado, converta-o antes (dentro do VB), para o tipo de dado Double.
Qualquer função de DLL's pode ser chamada de dentro do Visual Basic, exceto aquelas
que recebem como parâmetros ponteiros.
Para exemplificar o uso de funções de bibliotecas DLL, criaremos uma aplicação que
usará três funções : Uma que faz o título da janela piscar, outra que permite a
contagem do número de linhas dentro de um TextBox,e outra que estica um bitmap.
Criando os controles
Programando os eventos
Declare Function StretchBlt% Lib "GDI" (ByVal hDC%, ByVal X%, ByVal
Y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%,
ByVal YSrc%, ByVal nSrcWidth%, ByVal nSrcHeight%, ByVal dwRop&)
X = flashwindow(form1.hWnd, 1)
pic1.ScaleMode = 3
pic2.ScaleMode = 3
rc = StretchBlt(picture2.hDC, 0, 0, pic2.ScaleWidth,
pic2.ScaleHeight, pic1.hDC, 0, 0, pic1.ScaleWidth,
pic1.ScaleHeight, srccopy)
Executando a Aplicação
Objetivo
Usuário Experiência
Novato em relação a computadores Nenhuma. Completamente inexperiente
com computadores.
Novato em relação a aplicação Familiarizado com computadores e
possivelmente até com outras
aplicações, mas sem experiência em
aplicações como a sua.
Ex: usuário de processador de textos
quando sua aplicação é uma planilha.
Intermediário em relação a aplicação Já possui algum conhecimento em
aplicações como a sua.
Avançado em relação a aplicação Já possui muita experiência em
aplicações como a sua.
Classificação Necessidades
Novato em relação a computadores Explicações sobre como executar tarefas,
Novato em relação a aplicação como compreender a interface e a
terminologia.
O help deve responder a perguntas
operacionais.
Intermediário em relação a aplicação Focalizar em funcionalidade e nas
Avançado em relação a aplicação possibilidades de comandos da
aplicação.
O help deve responder a perguntas
conceituais.
O help deve contemplar todos os assuntos tratados pela aplicação, entretanto deve
permanecer concizo, com textos curtos e de fácil entendimento. Devemos lembrar
que a leitura em tela não é confortável para os usuários.
Todos os help systems possuem um menu. Qualquer menu deveria possuir os seguintes
tópicos:
Conteúdo
Localizar
Sobre <nome da aplicação>
A "Content Screen"
Todo help deve ter uma Content Screen, essa janela mostra todo o conteúdo abrangido
pelo help e permite que os principais assuntos abordados sejam acessados. O
conteúdo deve ser apresentado na Content Screen de forma lógica. A Content
Screen funciona como um índice em um livro.
Os Tópicos
OBS: Sempre tente evitar que o caminho que o usuário terá que percorrer para chegar a
uma informação seja muito longo (ex: passar por mais de três tópicos para chegar a
uma resposta ou definição).
Os "jumps"
As palavras que ligam os tópicos são chamadas jumps. Através delas o usuário navega
pelo help.
As janelas pop-up
JUMP JUMP
TÓPICO (assunto a) TÓPICO (assunto a1) EXEMPLO a1
TÓPICO (assunto a2) POP-UP conceito c1
Além de organizar os tópicos hierarquicamente, você pode definir para eles uma
sequência lógica. Se o usuário desejar, ele pode ler todo o help obedecendo a essa
sequência através dos botões >> e <<.
Uma outra forma de permitir o acesso do usuário ao help é através do help sensitivo.
Neste caso, os pontos sensíveis da aplicação devem ser determinados e o conteúdo
do help em cada ponto deve ser definido. O acesso ao help sensitivo é feito através
da tecla F1 quando a aplicação está sendo executada.
OBS: Nada impede que tópicos que já aparecem na Content Screen e que são acessados
por outros meios também sejam acessados pela tecla F1.
A necessidade de pesquisa de assuntos por palavra chave (key word) também deve ser
estudada. No caso dela ser necessária, as palavras ou expressões consideradas chave
de cada tópico devem ser determinadas.
Um tópico pode ter mais de uma palavra chave e uma palavra chave pode estar
relacionada a mais de um tópico.
Essas considerações sobre o texto visam a facilidade e conforto do usuário para acessar
e ler o help.
Se o tópico ficar muito grande ele deve ser quebrado em dois ou parte dele
deve ficar em um tópico subordinado.
Use uma linguagem apropriada aos seus usuários. Cuidado com a utilização
de elementos visuais pois eles podem comunicar coisas diferentes conforme
a cultura de seus usuários. É mais seguro não confiar em elementos visuais
para comunicar.
Use espaços em branco para isolar informações. Eles tornam o texto mais
fácil de ler.
As macros podem ser usadas para adicionar ou remover botões da barra de ferramentas,
alterar o menu ou modificar as funções de seus ítens, executar aplicações de dentro
do help ou chamar DLLs externas.
arquivo .HPJ: contém a lista de arquivos .RTF, .BMP, .WMF, .SHG e .MRB
que compoem o help além de informações que o compilador usa para
controlar o processo de compilação. O texto do arquivo .HPJ deve estar no
formato ASCII e cada help só pode ter um arquivo .HPJ.
topic project
help compiler help
file file
(HC31.EXE) (.HLP)
.RTF .HPJ
topic
file
.RTF
roda em DOS
passos opcionais
Teste a aplicação
Codificação
O texto dos tópicos devem receber uma codificação especial para que apareçam para o
usuário com a aparência conhecida e para que os jumps e chamadas de janelas pop-
up funcionem.
O hipertexto trabalha
com “links”
fornecidos pelos
context strings,
tópicos sem context
string só serão
mostrados através
de palavras chave
ou em sequências
de browse.
Esses códigos devem ser escritos na Foot Note da página do tópico que está sendo
codificado ou logo após a(s) palavra(s) que definem um jump ou uma janela pop-up.
Fluxo de Caixa
Manutenção
Seleção
Consulta
Imprime
Gráfico
Lançamentos
Consulta
Tabelas
Plano Orçamentário
Critério de distribuição de Contas a Receber
Diversos
Parâmetros
♦♦♦
# SIS_FCX
#$K Unidade
A unidade representa o fator de divisão que o Fluxo de Caixa utiliza. Este fator é utilizado
independentemente da moeda escolhida para visualização dos valores.
• Alteração:
A unidade utilizada pode ser alterada na opção Parâmetros. Seu valor máximo é
9.999.999.
A unidade utilizada pode ser alterada temporariamente na tela de seleção, quando for
solicitada uma consulta ou impressão de relatório.
♦♦♦
#$ Período
# UNIDADE
$ Unidade
K Seleção;Consulta;Imprime;Parâmetros
# PERIODO
$ Período
[OPTIONS]
hierarquia do sistema
as mensagens de erro
da compilaçao do help
ROOT = G:\IND\FIS\HLP\DOC
janela do help
de erro (3 = todas)
HLP1.RTF
HLP11.RTF
HLP131.RTF
HLP132.RTF
POP_UP1.RTF
POP_UP2.RTF
string X context id
IND 2
DE_SBL_MOE 33
específico
IND_PERIODO_CON 55
[WINDOWS]
main = ,,,,(192,192,192)
Compilação
A compilação deve ser feita em uma janela DOS no ambiente Windows. O seguinte
comando deve ser dado para que o help compiler seja executado:
Exemplo1:
c:\windows\hc\hc31 callhelp.hpj
Exemplo2:
c:\windows\hc\hc31 c:\aplicacao\callhelp.hpj
Caso a compilação seja bem sucedida, o help deve ser testado. No teste do help
aconselhamos que sejam verificados os seguintes pontos:
Quando o help for chamado a partir do menu, ele será sempre apresentado ao usuário a
partir da content screen . Se ele for chamado de algum outro ponto da aplicação, o
tópico referente a este objeto será mostrado (context sensitive help). Para que isso
aconteça, a propriedade HelpContextId do objeto deve estar programada para
chamá-lo.
A propriedade HelpContextId deve ser preenchida com um valor numérico, este valor
numérico deve ser associado, no arquivo .HPJ do help, ao context string do tópico a
ser chamado.
Para definir o help de uma aplicação, basta informar o path e o nome do executável do
help na opção do menu Options / Project / Helpfile.