Este documento apresenta um tutorial passo a passo para usar o controle VSFlexGrid para editar dados, formatar células, adicionar caixas de seleção, listas suspensas, máscaras de entrada e validar dados. Ele também demonstra como adicionar suporte à área de transferência e usar o controle como um delineador de dados hierárquicos.
1. Tutorial Controle VSFlexgrid
Demonstração Editar
Este exemplo começa com uma grade de entrada de dados básicos, em
seguida, adiciona as seguintes características:
formatação de dados
As caixas de seleção
As listas suspensas
As máscaras de entrada
validação de dados complexos
Suporte a área de transferência
Aqui está o que a aplicação final será semelhante a:
Passo 1: Criar a Controle
Iniciar um novo projeto Visual Basic, incluindo VSFlexGrid 8.0 (Se você
não sabe como adicionar arquivos OCX para um projeto, consulte a documentação
do Visual Basic). O ícone VSFlexGrid será adicionado à caixa de ferramentas
Visual Basic.
Criar um VSFlexGrid objeto no formulário, clicando no ícone VSFlexGrid na
caixa de ferramentas, em seguida, clicando no formulário e arrastando até que o
objeto é o tamanho adequado.
Em seguida, use a janela de propriedades do Visual Basic para definir as
propriedades de controle a seguir:
(Name) = fg
Editável = True
Cols = 5
FixedCols = 0
FormatString = "Product = | Região | Pessoa Sales |" & _ ">
Valor Vendido | Bonus"
É isso aí. Pressione F5 para executar o projeto, e você pode começar a
digitar os dados no controle. Pressione F2 ou a barra de espaço para editar
entradas existentes, ou simplesmente digitar novas entradas de empresas
existentes.
Passo 2: Formatação de dados
Ao exibir valores numéricos ou de data, você normalmente irá querer adotar
um formato consistente para os valores. O VSFlexGrid permite que você faça isso
usando a propriedade ColFormat . Esta propriedade permite atribuir um formato a
Página - 33
2. Tutorial Controle VSFlexgrid
cada coluna. Os formatos são similares aos reconhecidos pela função Format do
Visual Basic.
A propriedade ColFormat deve ser atribuído durante a execução. Um bom
lugar para fazer isso é no evento Form_Load, como mostra abaixo:
Private Sub Form_Load ()
'Column formato 3 (quantidade vendida) para exibir moeda
fg.ColFormat (3) = "$#,###. 00 "
End Sub
Este código atribui um formato de coluna 3 (quantidade vendida). O
formato especifica que os valores devem ser exibidos com um sinal de moeda,
separadores de milhar e duas casas decimais.
A propriedade ColFormat não afeta o conteúdo da célula, apenas a maneira
que é exibida. Você pode alterar o formato livremente sem modificar os dados
subjacentes.
Passo 3: caixas de seleção
Ao exibir valores booleanos (True / False), você tem a opção de usar
caixas de seleção em vez de True / False cordas ou 1 / 0 valores. Isto tem a
vantagem de impedir que os usuários insiram valores ruins.
Coluna 4 (Bonus) contém valores boolean (ou alguém recebe um bônus ou
não). Para exibir os valores como caixas de seleção, definir A propriedade
ColDataType para flexdtBoolean. O controle irá automaticamente exibir e
gerenciar as caixas de seleção.
A propriedade ColDataType deve ser atribuído durante a execução. Mudar
a rotina Form_Load conforme demonstrado abaixo:
Private Sub Form_Load ()
'Column formato 3 (quantidade vendida) para exibir moeda
fg.ColFormat (3) = "$#,###. 00 "
'Make coluna 4 (Bonus) uma coluna de boolean
fg.ColDataType (4) = flexdtBoolean
End Sub
Os usuários podem alternar as caixas de seleção clicando neles ou
selecionando-os com o teclado e digite bater ou espaço. Pressione F5 para
executar o projeto novamente, digite umas quantias poucas de vendas e dar bônus
para algumas pessoas.
Passo 4: Suspensa Listas
Inserção de dados é um tedioso e propenso a erros processo. Listas drop-
down são grandes porque minimizar a quantidade de digitar você deve fazer,
reduzir a chance de erros e aumentar a consistência dos dados.
Vamos supor que o nosso projeto de exemplo envolve apenas as vendas de
três produtos (Applets, Widgets e Gadgets), em quatro regiões (Norte, Sul, Leste e
Oeste), e que há três pessoas a tempo completo de vendas (Mary, Sarah, e Paula).
Digitando dados repetitivos seria ineficiente e propenso a erros. Uma
abordagem muito melhor seria usar listas suspensas para permitir aos usuários
escolher a entrada apropriada a partir de listas. O VSFlexGrid permite atribuir
uma lista de opções para cada coluna usando a propriedade ColComboList. A lista
consiste em uma string com escolhas, separados por caracteres de pipe ("|").
A propriedade ColComboList deve ser atribuído durante a execução. Mudar
a rotina Form_Load conforme demonstrado abaixo:
Private Sub Form_Load ()
'Column formato 3 (quantidade vendida) para exibir moeda
fg.ColFormat (3) = "$#,###. 00 "
'Make coluna 4 (Bonus) uma coluna de boolean
Página - 33
3. Tutorial Controle VSFlexgrid
fg.ColDataType (4) = flexdtBoolean
'Atribuir listas de combinação para cada coluna
fg.ColComboList (0) = "Applets | wahoos | Gadgets"
fg.ColComboList (1) = "Norte | Sul | Leste | Oeste"
fg.ColComboList (2) = "| Mary | Paula | Sarah"
End Sub
Observe como a última ColComboList string começa com uma tubulação.
Isso permitirá que os usuários digitem nomes adicionais que não estão na lista. Em
outras palavras, esses valores serão editados usando uma combinação drop-down,
em oposição a uma lista drop-down como os outros. Há opções de sintaxe para
criar multi-colunas listas e listas traduzidas também. Consulte a referência de
controle para obter mais detalhes.
Pressione F5 para executar o projeto novamente, em seguida, mover o
cursor. Quando você move o cursor para uma das colunas que têm listas de
combinação, um botão drop-down torna-se visível. Você pode clicar sobre ele para
mostrar a lista, ou simplesmente digitar a primeira letra de uma entrada para
destacá-lo na lista.
Passo 5: máscaras de entrada
Ao escolher os dados a partir de uma lista, geralmente há pouca
necessidade de validação de dados. Quando os valores de entrada são digitados,
no entanto, muitas vezes você vai querer ter certeza de que é válido.
No nosso exemplo, nós gostaríamos de evitar que os usuários digitem texto
ou valores negativos na coluna 3 (quantidade vendida). Você pode fazer isso
usando A propriedade ColEditMask, que atribui uma máscara de entrada para uma
coluna que governa o que o usuário pode digitar nesse campo.
A propriedade ColEditMask deve ser atribuído durante a execução. Mudar
a rotina Form_Load conforme demonstrado abaixo:
Private Sub Form_Load ()
'Column formato 3 (quantidade vendida) para exibir moeda
fg.ColFormat (3) = "$#,###. 00 "
'Atribuir editar máscara para coluna 3 (quantidade
vendida)
fg.ColEditMask (3) = "######.##"
'Make coluna 4 (Bonus) uma coluna de boolean
fg.ColDataType (4) = flexdtBoolean
'Atribuir listas de combinação para cada coluna
fg.ColComboList (0) = "Applets | wahoos | Gadgets"
fg.ColComboList (1) = "Norte | Sul | Leste | Oeste"
fg.ColComboList (2) = "| Mary | Paula | Sarah"
End Sub
A máscara de editar garante que o usuário não digitar nada na coluna 3,
com excepção números. A sintaxe para A propriedade ColEditMask permite
especificar vários tipos de entrada. Consulte a referência de controle para obter
mais detalhes.
Passo 6: Validação de dados complexos
Máscaras de entrada são convenientes para ajudar a entrada de dados de
usuários formatados corretamente. Eles também ajudam com tarefas simples de
validação de dados. Em muitas situações, no entanto, você pode precisar executar
mais complexa validação de dados. Nestes casos, você deve usar o ValidateEdit
evento.
Por exemplo, digamos que alguns regulamentos anti-trust nos impedem de
ser capaz de vender Applets na região Norte. Para evitar erros de entrada de
Página - 33
4. Tutorial Controle VSFlexgrid
dados e processos caros, queremos evitar que os usuários insiram esta combinação
para o controle. Podemos fazê-lo com a seguinte rotina:
Private Sub fa_ValidateEdit Row (ByVal As Long, _
ByVal Col As Long, _
Cancel As Boolean)
RGN Dim String, prd As String
"Coletar os dados que precisamos
Selecione Col Caso
Case 0
prd = fg.EditText
RGN = fg.TextMatrix (Linha, 1)
Caso 1
prd = fg.TextMatrix (Linha, 0)
RGN = fg.EditText
End Select
"Nós não podemos vender Applets na Região Norte ...
Se prd = "Applets" E RGN = "Norte" Então
MsgBox "Regulamento 12333AS/SDA-23 #" & _
"Impede-nos de vender" & prd & _
"Na" & RGN e "Região." & _
"Por favor, verificar a entrada."
Cancel = True
End If
End Sub
A função começa por recolher a entrada que precisa ser validado. Note-se
que os valores sendo verificados são recuperados usando a propriedade EditText .
Isto é necessário porque eles ainda não foram aplicados ao controle.
Se o teste falhar, a função exibe um aviso e, em seguida, define o
parâmetro Cancel para True, que cancela as edições e coloca o celular de volta no
modo de edição para que o usuário possa tentar novamente.
Pressione F5 para executar o projeto novamente, em seguida, tentar
introduzir alguns valores ruins. Você verá que o controle será rejeitá-los.
Passo 7: Suporte Área de Transferência
A área de transferência do Windows é um dispositivo muito útil para
transferir informações entre aplicativos. Adição de suporte a projetos da área de
transferência VSFlexGrid é muito fácil. Só é preciso o seguinte código:
Fg_KeyDown Sub privado (KeyCode%,% Shift)
As Boolean Dim Cpy, Pst As Boolean
"Cópia: ctrl-C, ctrl-X, ctrl-ins
Se KeyCode = vbKeyC E Shift = 2 Então Cpy = True
Se KeyCode = vbKeyX E Shift = 2 Então Cpy = True
Se KeyCode = vbKeyInsert E Shift = 2 Então Cpy = True
'Colar: ctrl-V, shift-ins
Se KeyCode = vbKeyV E Shift = 2 Então Pst = True
Se KeyCode = vbKeyInsert E Shift = 1 Então Pst = True
"Fazê-lo
Se Cpy seguida
Clipboard.Clear
Clipboard.SetText fa.Clip
Então ElseIf Pst
fg.Clip = Clipboard.GetText
End If
End Sub
A rotina lida com todos os comandos de teclado padrão relacionadas com a
área de transferência: CTRL-X, CTRL-C, ou CTRL-INS para copiar, e CTRL-V ou
Página - 33
5. Tutorial Controle VSFlexgrid
SHIFT-INS para colar. O verdadeiro trabalho é feito pelo clipe de propriedade, que
se encarrega de copiar e colar o texto da área de transferência na faixa atual.
Outro recurso do Windows grande que está intimamente relacionado com
operações de área de transferência é OLE Drag and Drop. VSFlexGrid tem duas
propriedades, OLEDragMode e OLEDropMode, que ajudam a implementar este
recurso. Basta definir as propriedades para as configurações automáticas e você
será capaz de arrastar as seleções pelas bordas e soltá-los em outros aplicativos
como o Microsoft Excel, ou faixas de arrastar de uma planilha do Excel e soltá-los
no VSFlexGrid controle.
Pressione F5 para executar o projeto novamente, tente copiar e colar alguns
dados. Você vai notar que é possível para colar dados inválidos, porque o nosso
código colar não faz qualquer validação de dados. Este é deixado como um
exercício para o leitor.
Demonstração esquema
Este exemplo mostra como você pode usar o VSFlexGrid como um
delineador para mostrar estruturado (ou hierárquica) de dados.
Quando usado como um delineador, o VSFlexGrid controle se comporta
como um controle Tree, exibindo nós que podem ser recolhidas ou expandidas
para mostrar ramos contendo dados subordinado.
A amostra lê arquivos INI várias. E apresenta cada um como um nó.
Cada nó do arquivo tem uma coleção de sub-nós que contém seções dentro do
arquivo correspondente. INI. Cada nó seção contém ramos que mostram os
sinais e as configurações armazenadas na seção correspondente. Aqui está
como o projeto final será:
Passo 1: Criar a Controle
Passo 2: Ler os dados e construir o Contorno
Passo 3: Use o Esboço
Passo 4: Mouse personalizado e manipulação de teclado
Passo 1: Criar a Controle
Iniciar um novo projeto Visual Basic, incluindo VSFlexGrid 8,0 (Se você
não sabe como adicionar arquivos OCX para um projeto, consulte a documentação
Página - 33
6. Tutorial Controle VSFlexgrid
do Visual Basic). O ícone VSFlexGrid será adicionado à caixa de ferramentas
Visual Basic.
Criar um objeto VSFlexGrid no formulário, clicando no ícone VSFlexGrid na
caixa de ferramentas, em seguida, clicando no formulário e arrastando até que o
objeto é o tamanho adequado.
Em seguida, use a janela de propriedades do Visual Basic para definir as
propriedades de controle a seguir:
(Name) = fg
Cols = 3
ExtendLastCol = True
FixedCols = 0
Linhas = 1
FormatString = "Node | Símbolo | Setting"
OutlineBar = flexOutlineBarComplete
GridLines = flexGridNone
MergeCells = flexMergeSpill
AllowUserResising = flexResizeColumns
Vamos definir a propriedade OutlineBar será capaz de ver a árvore de
esboço. Você pode criar contornos, sem árvores, mas o usuário não será capaz de
recolher e expandir os nós (a menos que você escrever código para fazê-lo).
Nós também definir a propriedade MergeCells para flexMergeSpill, assim
entradas tempo pode se estender para as células vazias adjacentes. Isso é muitas
vezes uma boa configuração para usar na construção de contornos.
Agora o controle está pronto. Podemos começar a adicionar alguns códigos
para ele.
Passo 2: Ler os dados e construir o Contorno
Dê um duplo clique no formulário e adicione o seguinte código ao evento
Form_Load:
Private Sub Form_Load ()
'Suspender pintura para aumentar a velocidade
fg.Redraw = False
"Preencher o controle
AddNode "Win.ini"
AddNode "System.ini"
AddNode "VB.INI"
'Expandir esboço, redimensionar para caber, colapso esquema
fg.Outline -1
fg.AutoSize 1, 2
fg.Outline 1
"Pintura está de volta nos
fg.Redraw = True
End Sub
A rotina começa definindo o Redraw propriedade para False. Esta pintura
suspende enquanto nós preencher o controle, e aumenta a velocidade
significativamente.
Em seguida, o AddNode rotina é chamado para preencher o controle com o
conteúdo dos três arquivos INI que é provável que você tem no seu sistema:. Win,
Sistema e Vb. O AddNode rotina é mostrada abaixo.
Finalmente, o esboço é totalmente expandido, o método AutoSize é
chamado para ajustar a largura das colunas ao seu conteúdo, eo esboço é recolhido
de volta para o nível 1 para o arquivo e nós seção será exibida.
A rotina AddNode faz a maior parte do trabalho. Ele lê um arquivo. INI e
preenche o controle, a criação de nós e ramos de acordo com o conteúdo do
arquivo. Aqui está a rotina AddNode :
Página - 33
7. Tutorial Controle VSFlexgrid
Sub AddNode(inifile As String)
Dim ln As String, p As Integer
With fg
' create file node
.AddItem inifile
.IsSubtotal(Rows - 1) = True
.Cell(flexcpFontBold, Rows - 1, 0) = True
' read ini file
Open "c:windows" & inifile For Input As #1
While Not EOF(1)
Line Input #1, ln
' if this is a section, add node
If Left(ln, 1) = "[" Then
.AddItem Mid(ln, 2, Len(ln) - 2)
.IsSubtotal(Rows - 1) = True
.RowOutlineLevel(Rows - 1) = 1
.Cell(flexcpFontBold, Rows - 1, 0) = True
' if this is regular data, add branch
ElseIf InStr(ln, "=") > 0 Then
p = InStr(ln, "=")
.AddItem vbTab & Left(ln, p - 1) & vbTab &
Mid(ln, p + 1)
End If
Wend
Close #1
End With
End Sub
A rotina AddNode é um pouco longa, mas é bastante simples. Começa por
adicionar uma linha contendo o nome do arquivo. INI que está sendo lido. Ela
marca a linha como um subtotal usando a propriedade IsSubtotal para o controle
irá reconhecê-lo como um nó de contorno.
Em seguida, a rotina lê o arquivo linha por linha INI. Nomes de seção são
colocados entre colchetes. Adicionar os códigos ao controle e em seguida, marca-
los como subtotais da mesma forma que marcou o nome do arquivo. A diferença é
que aqui ele também define a propriedade RowOutlineLevel 1, indicando que este
nó é um filho do anterior nível-0 nó (o que contém o nome do arquivo).
Finalmente, as linhas que contêm dados são analisadas em tokens e
configurações e, em seguida, adicionado ao controle. Eles não são marcados como
subtotais.
Passo 3: Use o Esboço
Pressione F5 para executar o projeto, e você vai ver o contorno em ação.
Se você clicar em um dos nós, ele irá expandir ou recolher para mostrar ou ocultar
os dados sob ele.
Você também pode shift-clique em um nó para expandir todo o contorno
para o nível do nó, ou shift-ctrl-clique em um nó a entrar em colapso todo o
contorno a esse nível. Por exemplo, se você shift-clique em um nome de arquivo,
você verá todos os nomes de arquivos e todas as seções, mas não há dados token.
Se você shift-ctrl-clique sobre um nome de arquivo, você verá todos os nomes de
arquivo, e nada mais.
Página - 33
8. Tutorial Controle VSFlexgrid
Passo 4: Mouse personalizado e manipulação de teclado
O Controle VSFlexGrid fornece a expandir e recolher para você, mas você
pode estender e personalizar o seu comportamento. Cada vez que um ramo é
expandido ou recolhido, o controle dispara os eventos BeforeCollapse e
AfterCollapse assim que você pode tomar medidas em resposta a isso. Além
disso, você pode usar a propriedade IsCollapsed para obter e definir o estado de
colapso de cada ramo no código.
Por exemplo, o seguinte código permite que os usuários para expandir e
recolher galhos esboço clicando duas vezes em uma linha própria, em vez de na
barra de contorno. Aqui está o código para fazer isso:
Private Sub fg_DblClick ()
Dim r As Long
Com fg
r = Row.
If. IsCollapsed (r) = flexOutlineCollapsed Then
. IsCollapsed (r) = flexOutlineExpanded
Else
. IsCollapsed (r) = flexOutlineCollapsed
End If
End With
End Sub
O código verifica a linha atual. Se estiver recolhida, então ele expande.
Caso contrário, ele desmorona-lo. Desmoronar uma linha de detalhes desmorona
seu nó pai inteiro.
Podemos usar o mesmo código para programar a interface do teclado. Nós
acabamos de chamar o evento DblClick a partir do evento KeyPress:
Private Sub fg_KeyPress (KeyAscii As Integer)
if KeyAscii = vbKeyReturn then fa_DblClick
End Sub
Isso fecha o demo de destaques. Pressione F5 para executar o projeto, uma
última vez e teste o mouse adicional e manuseio do teclado.
Análise de dados de demonstração
Esta amostra começa com uma grade que contém dados de vendas de
diferentes produtos, regiões e vendedores, em seguida, adiciona as seguintes
características:
Layout dinâmico (a ordem das colunas)
Classificação automática
Celular fusão
Subtotais automáticos
Esboçando
Aqui está como a aplicação final será:
Página - 33
9. Tutorial Controle VSFlexgrid
Passo 1: Criar a Controle
Passo 2: Inicializar e preencher a grade
Passo 3: Classificação automática
Passo 4: Célula Mesclando
Passo 5: Subtotais automáticos
Passo 6: Estrutura de Tópicos
Passo 1: Criar a Controle
Iniciar um novo projeto Visual Basic, incluindo VSFlexGrid 8,0 (Se você
não sabe como adicionar arquivos OCX para um projeto, consulte a documentação
do Visual Basic). O ícone VSFlexGrid será adicionado à caixa de ferramentas
Visual Basic.
Criar um VSFlexGrid objeto no formulário, clicando no ícone VSFlexGrid na
caixa de ferramentas, em seguida, clicando no formulário e arrastando até que o
objeto é o tamanho adequado.
Em seguida, use a janela de propriedades do Visual Basic para definir o
nome do controle para fg.
Passo 2: Inicializar e preencher a grade
Existem muitos métodos disponíveis para preencher um VSFlexGrid
controle. Muitas vezes, você simplesmente conectá-lo a um banco de dados
usando o DataSource propriedade. Ou você pode carregar os dados de um
arquivo usando o LoadGrid método. Finalmente, você pode usar o AddItem
método para adicionar linhas ou o celular de propriedade para atribuir dados às
células.
Nesta demonstração, iremos gerar alguns dados aleatórios e atribuí-lo ao
controle usando a propriedade cell. Isto é feito no evento Form_Load:
Private Sub Form_Load ()
'Inicializar o controle
fg.Cols = 4
fg.FixedCols = 0
fg.GridLinesFixed = flexGridExplorer
fg.AllowUserResizing = flexResizeBoth
fg.ExplorerBar = flexExMove
'Define alguns dados da amostra
Const slProduct = "Produto | Flautas | Saxofones | Baterias |"
& _
"Guitarras | Trombones | Teclados | Microfones"
Página - 33
10. Tutorial Controle VSFlexgrid
Const slAssociate = "Associado | John | Paul | Mike | Paula |
Sylvia | Donna"
Const slRegion = "Região | Norte | Sul | Oriente | West"
Const slSales = "Vendas | 14323 | 2532 | 45342 | 43432 | 75877
| 4232 | 4543"
"Preencher o controle com os dados
FillColumn fg, 0, slProduct
FillColumn fg, 1, slAssociate
FillColumn fg, 2, slRegion
FillColumn fg, 3, slSales
fg.ColFormat (3) = "#,###"
End Sub
Esta rotina utiliza uma função auxiliar chamada FillColumn que preenche
uma coluna inteira com dados retirados aleatoriamente de uma lista. Esta é uma
função útil para demos, e aqui está o código:
Sub FillColumn (fg Como VSFlexGrid, ByVal c As Long, ByVal s As
String)
Dim r As Long, i As Long, cnt As Long
ReDim lst (0) As String
'Construir lista de valores de dados
cnt = 0
i = InStr (s, "|")
Enquanto i> 0
lst (cnt) = Left (s, i - 1)
s = Mid (s, i + 1)
cnt = cnt + 1
ReDim Preserve lst (cnt) As String
i = InStr (s, "|")
Dirigir-se
lst (cnt) = s
"Definir os valores a escolher aleatoriamente a partir da lista
fg.Cell (flexcpText, 0, c) = lst (0)
Para fg.FixedRows r = Para fa.Rows - 1
i = (Rnd () * 1000) Mod cnt + 1
fg.Cell (flexcpText, r, c) = lst (i)
Próximo
"Fazer uma autosize na coluna que acabou de preencher
fg.AutoSize c,,, 300
End Sub
Isto conclui a primeira etapa. Pressione F5 para executar o projeto, e você
verá uma grade carregada com dados. Porque a propriedade ExplorerBar é
definida como flexExMove, você pode arrastar os cabeçalhos de coluna em torno de
reordenar as colunas.
Os dados apresentados são quase inúteis, no entanto, porque não é
apresentado de forma organizada. Vamos corrigir isso a seguir.
Passo 3: Classificação automática
O primeiro passo para organizar os dados é a classificação dele. Além disso,
gostaríamos que os dados fossem classificados automaticamente sempre que o
usuário reordena as colunas.
Depois que o usuário reordena as colunas, o Controle VSFlexGrid de utiliza
o evento AfterMoveColumn. Nós vamos adicionar um manipulador de eventos
para classificar os dados usando o Sort propriedade. (Note que se a grade fosse
vinculado a um banco de dados, você precisará definir a Propriedade DataMode
para flexDMFree ser capaz de resolver usando a propriedade Sort.)
Aqui está o código:
Página - 33
11. Tutorial Controle VSFlexgrid
Private Sub fg_AfterMoveColumn (Col ByVal posição, Long As
Long)
"Classificar os dados da primeira para a última coluna
fg.Select 1, 0, 1, fa.Cols - 1
fg.Sort = flexSortGenericAscending
fg.Select 1, 0
End Sub
O AfterMoveColumn rotina começa selecionando a linha não fixa primeiro
no controle usando o método Select. Em seguida, ele classifica todo o controle em
ordem crescente usando a propriedade Sort.
Para começar com uma grade de classificados, que também irá adicionar
uma chamada para o AfterMoveColumn rotina para o final do manipulador
Form_Load.
Private Sub Form_Load ()
'Inicializar o controle
'...
'Define alguns dados da amostra
'...
"Preencher o controle com os dados
'...
'Organizar os dados
fg_AfterMoveColumn 0, 0
End Sub
Pressione F5 para executar o projeto novamente, e tente reordenar as
colunas arrastando os seus títulos ao redor. Sempre que você mover uma coluna,
os dados são classificados automaticamente, o que torna muito mais fácil de
interpretar. Mas estamos apenas começando.
Passo 4: Célula Mesclando
A capacidade de mesclar células dinamicamente é uma das características que
define o VSFlexGrid além de outros controles de grade. Fusão grupos de células
visualmente, tornando os dados mais fáceis de interpretar.
Para programar fusão celular, basta adicionar duas linhas de código para o
manipulador de eventos Form_Load:
Private Sub Form_Load ()
'Inicializar o controle
'...
'Define alguns dados da amostra
'...
"Preencher o controle com os dados
'...
'Set up célula fusão (todas as colunas)
fg.MergeCells = flexMergeRestrictAll
fg.MergeCol (-1) = True
'Organizar os dados
'...
End Sub
O novo código define a propriedade MergeCells , que funciona através de todo
o controle, em seguida, define a propriedade MergeCol como True para todas as
colunas (o índice -1 pode ser usado como um curinga para todas as propriedades que se
aplicam a linhas e colunas).
Página - 33
12. Tutorial Controle VSFlexgrid
Pressione F5 novamente para executar o projeto. Desta vez, parece muito
diferente de uma grade típica. A célula de fusão faz com que grupos de dados
destacam-se visualmente e ajudar a interpretar a informação.
Passo 5: Subtotais automáticos
Agora que os dados são classificados e agrupados, vamos adicionar o código
para calcular subtotais. Com os subtotais, o usuário será capaz de ver quais os produtos
que estão vendendo mais, em que regiões, e que os vendedores estão fazendo um bom
trabalho.
Adicionando subtotais para um controle VSFlexGrid é fácil. O método
Subtotal lida com a maioria dos detalhes.
Os subtotais precisam ser recalculados após cada espécie, por isso vamos
adicionar o código necessário para o evento AfterMoveColumn. Aqui está o código
revisto:
Private Sub fg_AfterMoveColumn (Col ByVal posição, Long As
Long)
'Desativar Redraw para obter mais velocidade
fg.Redraw = False
"Classificar os dados da primeira para a última coluna
fg.Select 1, 0, 1, fa.Cols - 1
fg.Sort = flexSortGenericAscending
fg.Select 1, 0
"Calcular subtotais
flexSTClear fg.Subtotal
flexSTSum fg.Subtotal, -1, 3,, 1, vbWhite, True
flexSTSum fg.Subtotal, 0, 3,, vbRed, vbWhite, True
flexSTSum fg.Subtotal, 1, 3,, vbBlue, vbWhite, True
"Autosize
fg.AutoSize 0, fa.Cols - 1, 300
'Ativar Redraw de volta
fg.Redraw = True
End Sub
Este código começa por definir a propriedade Redraw para False. Esta
suspende todas as repintura enquanto trabalhamos no grid, o que evita a tremulação e
aumenta a velocidade.
Em seguida, os subtotais são calculados usando o método Subtotal . A primeira
chamada remove todas as linhas existentes subtotal, limpeza do grid. Os próximos três
chamados adicionar linhas de subtotal. Começamos pela adição de um total geral, em
seguida, subtotais de vendas agrupados por colunas 0 e 1. (Por enquanto, estamos
supondo que os números de vendas será na coluna 3.)
Depois de adicionar os subtotais, usamos o método AutoSize para certificar-se
de todas as colunas são largas o suficiente para mostrar os novos dados.
Finalmente, a propriedade Redraw é definida como True volta, altura em que as
mudanças se tornam visíveis.
Se você executar o projeto agora, você vai ver que ele quase funciona. O
problema é que estamos assumindo que os números de vendas serão na coluna 3, e se o
usuário move os números para a esquerda, os subtotais só irão somar zero.
Para evitar que isso aconteça, nós podemos interceptar o evento
BeforeMoveColumn e evitar que o usuário mover a coluna valor de vendas.
Aqui está o código:
Private Sub fg_BeforeMoveColumn (Col ByVal posição, Long As
Long)
Página - 33
13. Tutorial Controle VSFlexgrid
'Não se movem números de vendas
Se Col = fg.Cols - 1 posição, então = -1
End Sub
Devemos também evitar a coluna de vendas de ter células mescladas. A fusão
destes valores pode ser confusa porque as quantidades idênticas seriam fundidas e
parece ser uma única entrada. Para fazer isso, precisamos voltar para o evento
Form_Load e adicionar uma linha de código:
Private Sub Form_Load ()
'Inicializar o controle
'...
'Define alguns dados da amostra
'...
"Preencher o controle com os dados
'...
'Set up célula fusão (todas as colunas)
fa.MergeCells = flexMergeRestrictAll
fa.MergeCol (-1) = True
fa.MergeCol (fa.Cols - 1) = False
'Organizar os dados
'...
End Sub
Estamos a gerar os subtotais. Se você executar o projeto agora, você verá como
é fácil de entender a imagem por trás dos números de vendas. Você pode organizar os
dados por produto, por região ou por vendedor e ver rapidamente quem está vendendo o
quê e onde.
Agora estamos quase terminando com este demo. O último passo é adicionar
delineando para o controle, assim os usuários podem ocultar ou exibir detalhes e ter
uma visão ainda mais clara.
Passo 6: Estrutura de Tópicos
As capacidades de estruturação do controle VSFlexgrid dependem subtotais. Ao
delinear, cada linha de subtotal é tratado como um nó que pode ser recolhido ou
expandido. Subtotais aninhados são tratados como nós aninhados. Quaisquer linhas
que não são linhas de subtotal são tratadas como filiais, que contêm dados detalhados.
Porque nós já programamos subtotais, acrescentando as capacidades esboço é
apenas uma questão de adicionar uma linha a mais de código para o manipulador de
eventos Form_Load. O novo código define a propriedade OutlineBar , que exibe uma
estrutura de árvore com botões que o usuário pode clicar para recolher ou expandir o
esquema. Aqui está o que a rotina Form_Load deve ser semelhante a de agora:
Private Sub Form_Load ()
'Inicializar o controle
'...
'Define alguns dados da amostra
'...
"Preencher o controle com os dados
'...
'Set up célula fusão (todas as colunas)
'...
'Set up delineando
fg.OutlineBar = flexOutlineBarComplete
'Organizar os dados
'...
End Sub
Página - 33
14. Tutorial Controle VSFlexgrid
Que conclui este demo. Executar o projeto mais uma vez e tentar clicar nos
botões de contorno. Ao clicar irá alternar o estado do nó entre em colapso e
expandida. Shift + clique ou Ctrl-Shift-clicar irá definir o nível de destaque de todo
o controle.
Demonstração Preenchimento de células
Este exemplo demonstra como usar o da propriedade cell para formatar
células individuais. O demo usa Preenchimento para criar um display combinando
números e bares.
Aqui está como a aplicação final será:
Este projeto é muito simples. É constituído por uma única rotina, no
evento Form_Load. Aqui está o código, seguido de alguns comentários:
Private Sub Form_Load()
Dim i As Long
Dim max As Double
' initialize array with random data
Dim count(1, 7) As Single
For i = 0 To 7
count(0, i) = Rnd * 100
count(1, i) = Rnd * 100
Next
' initialize control
fg.Cols = 3
fg.Rows = 9
fg.FloodColor = RGB(100, 255, 100)
fg.ColAlignment(0) = flexAlignCenterCenter
fg.ColAlignment(1) = flexAlignRightCenter
fg.ColAlignment(2) = flexAlignLeftCenter
fg.Cell(flexcpText, 0, 0) = "Age Range"
fg.Cell(flexcpText, 0, 1) = "Females"
fg.Cell(flexcpText, 0, 2) = "Males"
fg.ColFormat(-1) = "#.##"
' make data bold
fg.Cell(flexcpFontBold, 1, 1, _
fg.Rows - 1, fa.Cols - 1) = True
' place text in cells, keep track of maximum
For i = 0 To 7
fg.Cell(flexcpText, i + 1, 0) = _
10 * i & " - " & (10 * (i + 1) - 1)
fg.Cell(flexcpText, i + 1, 1) = count(0, i)
fg.Cell(flexcpText, i + 1, 2) = count(1, i)
If count(0, i) > max Then max = count(0, i)
If count(1, i) > max Then max = count(1, i)
Página - 33
15. Tutorial Controle VSFlexgrid
Next
' set each cell's flood percentage,
' using max to scale from 0 to -100 for column 1
' and from 0 to 100 for column 2:
For i = 0 To 7
fg.Cell(flexcpFloodPercent, i + 1, 1) = _
-100 * count(0, i) / max
fg.Cell(flexcpFloodPercent, i + 1, 2) = _
100 * count(1, i) / max
Next
End Sub
O código começa por declarar e preencher uma matriz com dados
aleatórios. Os dados serão usados posteriormente para preencher o controle.
Então o controle é inicializado. O código define o número de linhas e colunas,
alinhamentos de coluna, os títulos das colunas, e o formato que deve ser usado na
apresentação de dados. Note que ao definir a Propriedade ColFormat, o índice -1
é usado como um curinga para a configuração é aplicada a todas as colunas.
A propriedade cell de propriedade é então utilizado para definir a fonte da
área de rolagem para negrito. Leva apenas uma única instrução, porque usando a
propriedade cell aceita uma série como parâmetro.
Em seguida, a matriz que contém os dados é copiada para o controle
(novamente usando a propriedade cell). O código se mantém informado do valor
máximo atribuído a qualquer célula, a fim de dimensionar a inundação
percentagens mais tarde.
Finalmente, a propriedade cell é usada uma última vez para definir os
percentuais de Preenchimento. As percentagens na primeira coluna estão
definidas para valores negativos, o que faz com que as barras a ser desenhado da
direita para a esquerda. Os percentuais sobre a segunda coluna estão definidos
para valores positivos, o que faz com que as barras a ser desenhado da esquerda
para a direita.
O exemplo abaixo mostra como você pode usar as propriedades MouseRow
e MouseCol para implementar tooltips com texto que muda conforme o mouse
se move sobre o controle.
Sub fg_MouseMove (Button As Integer, Shift As Integer, _
X as single, Y As Single)
Static R As Long, c As Long
Nr Dim As Long, nc As Long
'Obter coordenadas
nr = fg.MouseRow
nc = fg.MouseCol
'Update tooltip texto
if c <> nc or r <n> then,
r = nr
c = nc
fg.ToolTipText = "Linha:" & r & "Col:" & c
End If
"Processamento de outros ...
'...
End Sub
O código nos mantém informados da última célula para a qual foram
exibidos tooltips, e atualiza a ToolTipText somente quando necessário. Isto é
feito para evitar a cintilação.
Página - 33
16. Tutorial Controle VSFlexgrid
Demonstração de impressão
O método PrintGrid faz parte do Controle VSFlexGrid , e você pode usá-
lo para imprimir o conteúdo da rede diretamente para a impressora.
Se você precisa imprimir dados mais sofisticados, com visualização de
impressão e à capacidade de combinar várias grelhas e outros elementos, tais
como tabelas e texto em um único documento, então você deve usar o controle
VSPrinter, um produto ComponentOne separada que faz parte do Produto
VSVIEW .
Este exemplo mostra como você pode imprimir uma grade usando o
método. Ambos os métodos permitem controlar quebras de página e para
designar certas linhas como "header" linhas, que aparecem no topo de cada
página.
O exemplo presume que você tenha um Controle VSFlexGrid chamado fg
e um VSPrinter controle chamado vp no seu formulário.
Sub PrintFlexGridBuiltIn ()
fg.PrintGrid "Grid Meu"
End Sub
Sub PrintFlexGridOnVSPrinter ()
vp.StartDoc
vp.RenderControl = fg.hWnd
vp.EndDoc
End Sub
As rotinas acima são tudo que você precisa, a fim de imprimir relatórios
simples. O primeiro usa o built-in método PrintGrid, e o segundo utiliza o
Controle VSPrinter . O segundo método permite-lhe mostrar o relatório em uma
janela de visualização, gerá-lo na impressora, ou salvá-lo em um arquivo.
Para impressão de relatórios complexos, o Controle VSFlexGrid possui
eventos que permitem controlar quebras de página e fornecer linhas de cabeçalho
que são impressos no topo de cada página nova. O código abaixo ilustra o uso
desses eventos:
"BeforePageBreak: quebra controles de página
"Vamos assumir que temos subtotais acima detalhes,
E evitar linhas de subtotal
'Sendo a última em uma página
Private Sub Fg_BeforePageBreak (ByVal As Long Row, BreakOK As
Boolean)
'Se essa linha é um título subtotal, não podemos quebrar aqui
if fg.IsSubtotal (Row) then BreakOK = False
End Sub
"GetHeaderRow: linhas de cabeçalho suprimentos para novas
páginas
"Vamos assumir que temos linhas título com rowdata definido
como -1" que queremos mostrar
'Acima dos dados
Private Sub fg_GetHeaderRow (Row ByVal HeaderRow, Long As Long)
Dim r As Long
"Ignorar se a linha superior é um cabeçalho já
if fg.RowData (Row) = -1 Then Exit Sub
"Precisamos de um cabeçalho, assim que encontrar um
for r = fg.FixedRows to fa.Rows - 1
if fg.RowData (r) = -1 then
HeaderRow = r
Sub Exit
Página - 33
17. Tutorial Controle VSFlexgrid
End If
Next
End Sub
OLE Drag and Drop Demonstração
Este exemplo mostra como implementar automático e manual OLE arrastar
e soltar usando VSFlexGrid 8.0.
OLE arrastar e soltar pode ser um pouco confuso no início, por causa de
todas as propriedades, métodos, objetos e eventos que podem estar envolvidos
no processo. No entanto, você só precisa lidar com alguns desses eventos, a fim
de fazer OLE arrastar e largar o trabalho para você. Esta demonstração mostra os
conceitos básicos e procedimentos que você irá precisar.
Aqui está como a aplicação final será:
Os três controles mostrados são fontes de arrastar OLE queda e metas. Isto
significa que você pode arrastar os dados de um controle para os outros, ou entre
qualquer um dos controles e aplicações externas.
Passo 1: Criar os controles
Passo 2: Inicializar os controles
Passo 3: Arraste OLE manual
Passo 4: Drop OLE manual
Passo 2: Inicializar os controles
Poderíamos ter definido as propriedades iniciais dos controles fgDDManual
e fgDDAuto usando a janela de propriedades do Visual Basic, mas optou por fazê-
lo usando o evento Form_Load . Aqui a rotina que inicializa os controles:
Private Sub Form_Load ()
'Inicializar o controle manual
withDManual
. Cell(flexcpText, 0, 0) = "Manual"
. FixedCols = 0
. Editable = True
. OLEDragMode = flexOLEDragManual
. OLEDropMode = flexOLEDropManual
End With
Página - 33
18. Tutorial Controle VSFlexgrid
'Inicializar o controle automático
Com fgDDAuto
. Cell(flexcpText, 0, 0) = "Auto"
. FixedCols = 0
. Editable = True
. OLEDragMode = flexOLEDragAutomatic
. OLEDropMode = flexOLEDropAutomatic
End With
End Sub
O código faz dois grids editáveis, para que você possa digitar a eles, e define
as propriedades OLEDragMode e OLEDropMode para fazer cada controle uma
fonte de arrastar e soltar OLE e um alvo.
Não há necessidade de inicializar o Editbox Rich, desde que as suas propriedades
OLEDragMode e OLEDropMode são definidas como automática por padrão.
Isso é tudo o que é preciso para implementar arrastar e soltar OLE
automática. Se você executar o projeto agora, você será capaz de arrastar o texto
da richtextbox na fgDDAuto grade. Você também pode arrastar arquivos do
Windows Explorer, varia de Microsoft Excel, ou o texto do Microsoft Word.
Você também pode arrastar as seleções da grade fgDDAuto em qualquer
destino de soltar OLE (incluindo outras áreas do mesmo controle). Para fazer isso,
selecione um intervalo e mover o cursor do mouse para uma borda em torno da
seleção. O cursor vai se transformar em um cursor arrastar padrão OLE, como a
imagem abaixo mostra. Clique no botão esquerdo do mouse e começar a arrastar.
O cursor vai lhe dar feedback visual quando você movê-lo sobre um destino de
soltar OLE.
Como você pode ver, a implementação de arrastar e soltar OLE automática é
fácil. Basta definir as propriedades OLEDragMode e OLEDropMode para
automático e está feito.
Às vezes você pode desejar personalizar a maneira pela qual OLE arrastar e
soltar funciona. Este exemplo mostra como você pode fazer isso, personalizando
tanto arrastar o (fonte OLE) comportamento e da queda (destino OLE)
comportamento do controle fgDDManual .
Passo 3: Arraste OLE manual
Vamos personalizar o comportamento do fgDDManual controle como uma
fonte de arrastar OLE de duas maneiras:
1. Vamos iniciar arrastando sempre que o usuário clica na célula atual, e
2. Nós vamos adicionar um aviso de copyright ao conteúdo que está
sendo arrastado do controle.
Porque a propriedade OLEDragMode do fgDDManual controle é definido
para flexOLEDragManual, você precisa iniciar a operação OLE arrastar com o
código, usando o método OLEDrag. Para fazer isso, vamos adicionar código para
manipular o evento BeforeMouseDown. Quando o usuário clica na célula ativa,
que chamamos de método OLEDrag. Aqui está o código:
private sub FgDDManual_BeforeMouseDown(byval Button as
Integer, _
ByVal shift As Integer, _
ByVal X As Single, Y As Single ByVal, _
Página - 33
19. Tutorial Controle VSFlexgrid
Cancel As Boolean)
with fgDDManual
'Se o clique foi na célula ativa
"Começar a arrastar
If. MouseRow = Row. E. MouseCol =. Col then
"Utilizar o método OLEDrag de arranque manual
"Operação de arrastar OLE
"Isso vai acionar o evento OLEStartDrag,
", Que usaremos
'Para preencher o DataObject com os dados que
"Deseja arrastar.
. OLEDrag
'Dizer controle de grade para ignorar rato
"Movimentos até que a
'Botão do mouse sobe novamente
Cancel = True
End If
End With
End Sub
O código acima verifica se o usuário clicou na célula ativa. Se assim for, ele
chama o método OLEDrag e define o parâmetro Cancel para True.
Note que você não especificou o que os dados são. No modo automático, o
controle assumiu que você queria arrastar a seleção atual. No modo manual, você
é responsável pelo fornecimento dos dados.
Quando o método OLEDrag , o controle dispara o evento OLEStartDrag ,
que dá acesso a um objeto DataObject. Você deve armazenar os dados que serão
arrastados para o DataObject para que o objeto alvo pode chegar a ela. Aqui está
o código:
private sub FgDDManual_OLEStartDrag(data As
VSFlex8Ctl.vsDataObject, AllowedEffects As Long)
'Set conteúdo do objeto de dados para arrastar manual de
Dim s $
s = fgDDManual.Clip & vbCrLf & "Copyright 2000 ComponentOne"
Data.SetData s, vbCFText
End Sub
O código leva a seleção atual (contidos na propriedade clip), acrescenta um
aviso de direitos autorais a ele, e depois atribui-lo para o parâmetro de dados.
Estes são os dados que serão expostos aos destinos de soltar OLE.
Se você executar o projeto agora, e digite alguns dados na fgDDManual
controle, você será capaz de arrastá-lo para um dos outros controles no formulário.
Observe como o aviso de direitos autorais fica anexado à seleção quando você faz
a queda.
Passo 4: Drop OLE manual
Vamos personalizar o comportamento do fgDDManual controle como um
destino de soltar OLE para que, quando uma lista de arquivos é descartado, ele abre o
primeiro arquivo da lista e exibe o conteúdo das primeiras 10 linhas nesse arquivo. (O
comportamento padrão é para o tratamento de listas de arquivos como texto e cole os
nomes dos arquivos.)
Quando o usuário solta um objeto de dados OLE em um VSFlexGrid controle
com o OLEDropMode propriedade definida como flexOLEDropManual, o controle
dispara o OLEDragDrop evento. O objeto de dados sendo descartado é passado
como um parâmetro (dados) que você pode consultar o tipo de dados que você
deseja.
Página - 33
20. Tutorial Controle VSFlexgrid
A rotina abaixo faz uma verificação para ver se os dados contidos em uma
lista de arquivos. Se assim for, ele abre o primeiro arquivo na lista e lê o conteúdo
de suas primeiras 10 linhas. Se o parâmetro de dados não contém todos os
arquivos, então a rotina tenta fazer com que o seu conteúdo de texto. De qualquer
forma, a rotina transfere os dados para a rede usando a propriedade Clip .
Aqui está a rotina:
Private sub FgDDManual_OLEDragDrop(data as
VSFlex8Ctl.vsDataObject, _
Effect As Long, _
ByVal Button As Integer, _
ByVal shift As Integer, _
ByVal X as single, Y As Single)
Dim r As Long, c As Long, i As Integer, s As String
with fgDDManual
"Obter a localização queda
r =. MouseRow
c =. MouseCol
"Se nós estamos soltando arquivos, abra o arquivo
'E colar o conteúdo
if Data.FileCount> 0 Then
On Error Resume Next
open Data.Files(0) for Input As # 1
for i = 0 To 10
Line Input # 1, s
. Cell(flexcpText, r + i, c) = s
next
Close # 1
'Texto soltar usando a propriedade Clip
ElseIf Data.GetFormat (vbCFText) Then
s = Data.GetData (vbCFText)
. Select r, c, .rows - 1., .Cols - 1.
. Clip = s
. Select r, c
"Nós não aceitamos outra coisa
else
MsgBox "Desculpe, é só aceitamos arquivos de texto e ..."
End If
End With
End Sub
Que conclui este demo. Executar o projeto novamente e tente
arrastar e soltar entre os controles e outras aplicações.
VSFlexGrid de Controle > Propriedades VSFlexGrid, Eventos e Métodos
Propriedades VSFlexGrid, Eventos e Métodos
Todas as propriedades, eventos e métodos para a Controle VSFlexGrid
estão listados nas tabelas a seguir. Propriedades, eventos e métodos que se
aplicam apenas a este controle, ou que requerem uma consideração especial
quando usado com ele, são marcados com um asterisco (*). Estes são
documentadas nas seções posteriores. Para documentação sobre as demais
propriedades, consulte a documentação do Visual Basic.
Propriedades
* AccessibleDescription Obtém ou define a descrição do controle usado por aplicativos
cliente de acessibilidade.
* AccessibleName Obtém ou define o nome do controle usado por aplicativos
cliente de acessibilidade.
Página - 33
21. Tutorial Controle VSFlexgrid
* AccessibleRole Obtém ou define o papel do controle usado por aplicativos
cliente de acessibilidade.
* AccessibleValue Obtém ou define o valor do controle usado por aplicativos
cliente de acessibilidade.
* Aggregate Retorna uma função agregada (soma, média, etc) para um
determinado intervalo.
* AllowBigSelection Retorna ou define se clicar na área fixa irá selecionar colunas
inteiras e linhas.
* AllowSelection Retorna ou define se o usuário pode selecionar intervalos de
células com o mouse e teclado.
* AllowUserFreezing Retorna ou define se o usuário tem permissão para congelar
linhas e colunas com o mouse.
* AllowUserResizing Retorna ou define se o usuário tem permissão para
redimensionar linhas e colunas com o mouse.
* Appearance Retorna ou define o estilo de pintura do controle sobre um
objeto MDIForm ou formulário.
* ArchiveInfo Retorna informações de um arquivo VSFlex.
* AutoResize Retorna ou define se a largura das colunas serão ajustadas
automaticamente quando os dados são carregados.
* AutoSearch Retorna ou define se o controle irá procurar por entradas como
eles são digitados.
* AutoSearchDelay Retorna ou define o atraso, em segundos, antes que o buffer
AutoSearch é reposto.
* AutoSizeMode Retorna ou define se AutoSize irá ajustar a largura das colunas
ou alturas de linha para caber o conteúdo da célula.
* AutoSizeMouse Retorna ou define se as colunas devem ser redimensionada
para caber quando o usuário clica duas vezes sobre a linha de
cabeçalho.
* BackColor Retorna ou define a cor de fundo das células não-fixa.
* BackColorAlternate Retorna ou define a cor de fundo para linhas alternadas
(definido como 0 para desabilitar).
* BackColorBkg Retorna ou define a cor de fundo da área não abrangida por
qualquer das células.
* BackColorFixed Retorna ou define a cor de fundo das linhas fixas e colunas.
* BackColorFrozen Retorna ou define a cor de fundo das linhas e colunas
congeladas.
* BackColorSel Retorna ou define a cor de fundo das células selecionadas.
* BottomRow Retorna o índice baseado em zero da última linha exibida no
controle.
* Cell Retorna ou define as propriedades da célula para um intervalo
arbitrário.
* CellAlignment Retorna ou define o alinhamento do texto na célula selecionada
ou intervalo.
* CellBackColor Retorna ou define a cor de fundo da célula selecionada ou
intervalo.
* CellButtonPicture Retorna ou define a imagem usada em botões celular.
* CellChecked Retorna ou define se uma célula da grade tem uma marca de
verificação.
* CellFloodColor Retorna ou define a cor a ser usada para inundar uma célula.
* CellFloodPercent Retorna ou define o percentual de inundação para uma célula.
Página - 33
22. Tutorial Controle VSFlexgrid
* CellFontBold Retorna ou define o atributo negrito da fonte da célula
selecionada ou intervalo.
* CellFontItalic Retorna ou define o atributo Itálico da fonte da célula
selecionada ou intervalo.
* CellFontName Retorna ou define o nome da fonte da célula selecionada ou
intervalo.
* CellFontSize Retorna ou define o tamanho da fonte da célula selecionada ou
intervalo.
* CellFontStrikethru Retorna ou define o atributo Strikethru da fonte da célula
selecionada ou intervalo.
* CellFontUnderline Retorna ou define o atributo Sublinhado da fonte da célula
selecionada ou intervalo.
* CellFontWidth Retorna ou define a largura da fonte da célula selecionada ou
intervalo.
* CellForeColor Retorna ou define a cor de primeiro plano da célula selecionada
ou intervalo.
* CellHeight Retorna a altura da célula selecionada, em twips. Também traz
a célula em vista, a rolagem, se necessário.
* CellLeft Retorna a esquerda (x) coordenar da célula selecionada em
relação ao controle, em twips. Também traz a célula em vista,
a rolagem, se necessário.
* CellPicture Retorna ou define a imagem exibida em uma célula selecionada
ou intervalo.
* CellPictureAlignment Retorna ou define o alinhamento das imagens na célula
selecionada ou intervalo.
* CellTextStyle Retorna ou define efeitos 3D para o texto em uma célula
selecionada ou intervalo.
* Celltop Retorna ao topo (y) de coordenadas da célula selecionada em
relação ao controle, em twips. Também traz a célula em vista,
a rolagem, se necessário.
* CellWidth Retorna a largura da célula selecionada, em twips. Também
traz a célula em vista, a rolagem, se necessário.
* ClientHeight Retorna a altura da área cliente do controle, em twips.
* ClientWidth Retorna a largura da área cliente do controle, em twips.
* Clip Retorna ou define o conteúdo de um intervalo.
* ClipSeparators Retorna ou define os caracteres a serem usados como
separadores de coluna e linha em Clipe strings.
* Col Retorna ou define o índice baseado em zero da coluna atual.
* ColAlignment Retorna ou define o alinhamento da coluna dado.
* ColComboList Retorna ou define a lista para ser usado como um drop-down
na coluna especificada.
* ColData Retorna ou define um user-defined variante associada à
determinada coluna.
* ColDataType Retorna ou define o tipo de dados para a coluna.
* ColEditMask Retorna ou define a máscara de entrada usado para editar as
células da coluna especificada.
* ColFormat Retorna ou define o formato usado para exibir valores
numéricos.
* ColHidden Retorna ou define se uma coluna está oculto.
* ColImageList Define ou retorna um identificador para um ImageList para
ser usado como uma fonte de imagens para uma determinada
Página - 33
23. Tutorial Controle VSFlexgrid
coluna.
* ColIndent Retorna ou define o recuo da coluna dado, em twips.
* colIndex Retorna o índice da coluna que coincida com a chave dada.
* ColIsVisible Retorna se uma determinada coluna está à vista.
* ColKey Retorna ou define uma chave usada para identificar a coluna
determinada.
* ColPos Retorna a esquerda (x) coordenar de uma coluna em relação à
borda do controle, em twips.
* ColPosition Move uma determinada coluna para uma nova posição.
* Cols Retorna ou define o número total de colunas no controle.
* ColSel Retorna ou define a extensão de um intervalo de colunas.
* ColSort Retorna ou define a ordem de classificação para cada coluna
(para uso com o Sort propriedade).
* ColWidth Retorna ou define a largura da coluna especificada em twips.
* ColWidthMax Retorna ou define a largura da coluna máximo, em twips.
* ColWidthMin Retorna ou define a largura da coluna mínimo, em twips.
* ComboCount Retorna o número de itens na lista do editor de combinação.
* ComboData Retorna o valor muito tempo associado com um item na lista do
editor de combinação.
* ComboIndex Retorna ou define o índice com base zero da seleção atual na
lista do editor de combinação.
* ComboItem Retorna a string associada a um item na lista do editor de
combinação.
* ComboList Retorna ou define a lista para ser usado como um drop-down
ao editar uma célula.
* ComboSearch Retorna ou define se as listas de combinação deve apoiar
buscas inteligente.
* DataMember Retorna ou define o membro de dados.
* DataMode Retorna ou define o tipo de ligação de dados usado pelo
controle quando ele está conectado a uma fonte de dados
(somente leitura ou leitura / gravação).
* DataSource Retorna ou define a fonte de dados.
* DragMode Retorna / define um valor que determina se o modo de arrastar
manual ou automático é usado.
* Editable Retorna ou define se o controle permite que na célula de
edição.
* EditMask Retorna ou define a máscara de entrada usado para editar as
células.
* EditMaxLength Retorna ou define o número máximo de caracteres que podem
ser inseridos no editor.
* EditSelLength Retorna ou o número de caracteres selecionados no editor.
* EditSelStart Retorna ou define o ponto de partida do texto selecionado no
editor.
* EditSelText Retorna ou define a string contendo a seleção atual no editor.
* EditText Retorna ou define o texto no editor de celular.
* EditWindow Retorna um identificador para a janela da grade de edição, ou 0
se a grade não está no modo de edição.
* Ellipsis Retorna ou define se o controle irá mostrar reticências (...)
Página - 33
24. Tutorial Controle VSFlexgrid
depois de longas cadeias.
* Enabled Retorna ou define um valor que determina se um formulário ou
controle pode responder a eventos gerados pelo usuário.
Consulte a documentação do Visual Basic para mais
informações.
* ExplorerBar Retorna ou define se cabeçalhos de coluna são usados para
classificar colunas e / ou mover.
* ExtendLastCol Retorna ou define se a última coluna deve ser ajustada para
ajustar a largura do controle.
* FillStyle Retorna ou define se as alterações ao texto propriedades ou
Format aplicar à célula atual ou a toda a seleção.
* FindRow Retorna o índice de uma linha que contém uma seqüência
especificada ou o valor rowdata.
* FindRowRegex Retorna o índice da linha que contém um jogo ou -1 se
nenhuma correspondência foi encontrada.
* FixedAlignment Retorna ou define o alinhamento para as linhas fixas em uma
coluna.
* FixedCols Retorna ou define o número de colunas fixas (não rolável).
* FixedRows Retorna ou define o número de linhas fixas (não rolável).
* Flags Obtém ou define sinalizadores que afetam o comportamento do
controle.
* FlexDataSource Retorna ou define uma fonte de dados personalizado para o
controle.
* FloodColor Retorna ou define a cor usada para as células de inundação.
* focusRect Retorna ou define o tipo de retângulo de foco a ser exibido em
torno da célula atual.
Font Retorna um objeto Font. Consulte a documentação do Visual
Basic para mais informações.
* FontBold Determina se a fonte está em negrito.
* FontItalic Determina se a fonte é itálico.
* FontName Retorna ou define o nome da fonte.
* FontSize Determina o tamanho da fonte.
* FontStrikethru Determina a strikethru da fonte.
* FontUnderline Determina o tipo de letra é sublinhado.
* FontWidth Retorna ou define a largura da fonte, em pontos.
* ForeColor Retorna ou define a cor de primeiro plano das células não-fixa.
* ForeColorFixed Retorna ou define a cor de primeiro plano das linhas fixas e
colunas.
* ForeColorFrozen Retorna ou define a cor de primeiro plano das linhas e colunas
congeladas.
* ForeColorSel Retorna ou define a cor de primeiro plano das células
selecionadas.
* FormatString Atribui a largura das colunas, alinhamentos e linha fixa e texto
da coluna.
* FrozenCols Retorna ou define o número de congelados (editável, mas não
rolável) colunas.
* FrozenRows Retorna ou define o número de congelados (editável, mas não
rolável) linhas.
* GridColor Retorna ou define a cor usada para desenhar as linhas de grade
entre as células não-fixa.
Página - 33
25. Tutorial Controle VSFlexgrid
* GridColorFixed Retorna ou define a cor usada para desenhar as linhas de grade
entre as células fixas.
* GridLines Retorna ou define o tipo de linhas a serem traçadas entre as
células não-fixos.
* GridLinesFixed Retorna ou define o tipo de linhas a serem traçadas entre
células fixas.
* GridLineWidth Retorna ou define a largura das linhas da grade, em pixels.
* GroupCompare Retorna ou define o tipo de comparação utilizado quando o
agrupamento de células.
* HighLight Retorna ou define se as células selecionadas serão destaque.
hWnd Retorna um identificador para um formulário ou controle.
Consulte a documentação do Visual Basic para mais
informações.
* IsCollapsed Retorna ou define se uma linha contorno é recolhido ou
expandido.
* IsSearching Retorna um valor que indica se a rede está em modo de busca.
* IsSelected Retorna ou define se uma linha é selecionada (para listbox tipo
de seleções).
* IsSubtotal Retorna ou define se uma linha contém subtotais (em oposição
a dados).
* LeftCol Retorna ou define o índice baseado em zero da coluna não fixa
mais à esquerda exibido no controle.
* MergeCells Retorna ou define se as células com o mesmo conteúdo serão
fundidos em uma única célula.
* MergeCellsFixed Permite aos usuários definir diferentes critérios de fusão de
células fixo vs scrollable.
* MergeCol Retorna ou define se uma coluna terá o seu células mescladas.
* MergeCompare Retorna ou define o tipo de comparação utilizada na mesclagem
de células.
* MergeRow Retorna ou define se uma linha terá suas células mescladas.
* MouseCol Retorna o índice baseado em zero da coluna sob o ponteiro do
mouse.
MouseIcon Retorna ou define um ícone de mouse personalizado. Consulte
a documentação do Visual Basic para mais informações.
MousePointer Retorna ou define um valor que indica o tipo de ponteiro do
mouse exibido quando o mouse está sobre uma parte específica
de um objeto em tempo de execução. Consulte a
documentação do Visual Basic para mais informações.
* MouseRow Retorna o índice baseado em zero da linha sob o cursor do
mouse.
* MultiTotals Retorna ou define se subtotais serão exibidos em uma única
linha, quando possível.
* NodeClosedPicture Retorna ou define a imagem a ser usada para nós contorno
fechado.
* NodeOpenPicture Retorna ou define a imagem a ser usada para nós esboço
aberto.
* OLEDragMode Retorna ou define se o controle pode atuar como uma fonte de
arrastar OLE, automaticamente ou sob o controle do programa.
* OLEDropMode Retorna ou define se o controle pode atuar como um destino de
soltar OLE, automaticamente ou sob o controle do programa.
* OutlineBar Retorna ou define o tipo de barra de esquema que deve ser
exibido.
Página - 33
26. Tutorial Controle VSFlexgrid
* OutlineCol Retorna ou define a coluna usada para mostrar a árvore de
esboço.
* OwnerDraw Retorna ou define se e quando o controle vai disparar o evento
DrawCell.
* Picture Retorna uma imagem de todo o controle.
* PicturesOver Retorna ou define se o texto e as imagens devem ser
sobrepostos nas células.
* PictureType Retorna ou define o tipo de imagem retornado pela propriedade
Picture.
* Redraw Habilita ou desabilita o redesenho do controle VSFlexGrid.
* RightCol Retorna o índice baseado em zero da última coluna exibida no
controle.
* RightToLeft Retorna ou define se o texto deve ser exibido da direita para a
esquerda em sistemas hebraico e árabe.
* Row Retorna ou define o índice baseado em zero da linha atual.
* rowdata Retorna ou define um user-defined variante associada à
determinada linha.
* RowHeight Retorna ou define a altura da linha especificada em twips.
* RowHeightMax Retorna ou define a altura da linha máximo, em twips.
* RowHeightMin Retorna ou define a altura de linha mínimo, em twips.
* RowHidden Retorna ou define se uma linha está oculto.
* RowIsVisible Retorna se uma determinada linha está dentro da visão.
* RowOutlineLevel Retorna ou define o nível de destaque para uma linha de
subtotal.
* RowPos Retorna ao topo (y) de coordenadas de uma linha em relação à
borda do controle, em twips.
* RowPosition Move-se uma determinada linha para uma nova posição.
* Row Retorna ou define o número total de linhas no controle.
* RowSel Retorna ou define a extensão de um intervalo de linhas.
* RowStatus Retorna ou define um valor que indica se uma linha foi
adicionado, excluído ou modificado.
* ScrollBars Retorna ou define se o controle irá exibir horizontal ou vertical
barras de rolagem.
* ScrollTips Retorna ou define se dicas de ferramentas são mostradas
enquanto o usuário rola verticalmente.
* ScrollTipText Retorna ou define o texto dica de ferramenta exibida enquanto
o usuário rola verticalmente.
* ScrollTrack Retorna ou define a rolagem deve ocorrer enquanto o usuário
move o polegar de rolagem.
* SelectedRow Retorna a posição de uma linha selecionada quando
SelectionMode está definido para flexSelectionListBox.
* SelectedRows Retorna o número de linhas selecionadas, quando
SelectionMode está definido para flexSelectionListBox.
* SelectionMode Retorna ou define se o controle irá selecionar células em um
intervalo livre, por linha, por coluna, ou como uma caixa de
listagem.
* SheetBorder Retorna ou define a cor usada para desenhar a borda em torno
da folha.
* ShowComboButton Retorna ou define se suspensa botões são mostrados quando as
células editáveis são selecionados.
Página - 33
27. Tutorial Controle VSFlexgrid
* Sort Define uma ordem de classificação para as linhas selecionadas
usando as colunas selecionadas como chaves.
* SortAscendingPicture Obtém ou define uma imagem personalizada para indicar a
direção de classificação coluna.
* SortDescendingPicture Obtém ou define uma imagem personalizada para indicar a
direção de classificação coluna.
* SubtotalPosition Retorna ou define se subtotais deve ser inserido acima ou
abaixo dos dados totalizados.
* TabBehavior Retorna ou define se a tecla tab moverá o foco entre controles
(default VB) ou entre as células da grade.
* Text Retorna ou define o conteúdo da célula selecionada ou
intervalo.
* TextArray Retorna ou define o conteúdo de uma célula identificada por um
único índice.
* TextMatrix Retorna ou define o conteúdo de uma célula identificada pelo
seu coordenadas de linha e coluna.
* TextStyle Retorna ou define efeitos 3D para a exibição de texto em
células não-fixos.
* TextStyleFixed Retorna ou define efeitos 3D para a exibição de texto em
células fixas.
* TopRow Retorna ou define o índice baseado em zero da linha não fixa
mais alto exibido no controle.
* TreeColor Retorna ou define a cor usada para desenhar a árvore de
esboço.
* Value Retorna o valor numérico da célula atual.
* ValueMatrix Retorna o valor numérico de uma célula identificada pelo seu
coordenadas de linha e coluna.
* Version Retorna a versão do controle atualmente carregados na
memória.
* VirtualData Retorna ou define se todos os dados é obtido a partir da fonte
de dados ao mesmo tempo ou conforme a necessidade.
* WallPaper Retorna ou define uma imagem para ser usada como um fundo
para a área de rolagem do controle.
* WallPaperAlignment Retorna ou define o alinhamento da imagem de fundo
WallPaper.
* WordWrap Retorna ou define se o texto mais amplo que sua célula vai
embrulhar.
Métodos
* AddItem Adiciona uma linha para o controle.
* Archive Acrescenta, extratos, ou exclui arquivos de um arquivo
vsFlexGrid.
* AutoSize Redimensiona a largura das colunas ou alturas de linha para
caber o conteúdo da célula.
* BindToArray Liga-se a grade para uma matriz de variantes para ser utilizado
como armazenamento.
* BuildComboList Retorna uma ColComboList string de dados em um conjunto
de registros.
* CellBorder Desenha uma borda ao redor e dentro das células selecionadas.
* CellBorderRange Semelhante ao CellBorder método, mas permite ao usuário
especificar o intervalo em vez de usar o CellBorderRange
seleção.
Página - 33
28. Tutorial Controle VSFlexgrid
* Clear Limpa o conteúdo do controle. Parâmetros opcionais especificar
o que clara e onde.
* Copy Copiar seleção para a área de transferência.
* Cut Corte seleção para a área de transferência.
* DataRefresh Força o controle a atualizar todos os dados de sua fonte de
dados.
* Delete Exclui a seleção.
* DragRow Começa a arrastar uma linha a uma nova posição.
* EditCell Ativa o modo de edição.
* FinishEditing Termina quaisquer edições pendentes e retorna a grade para o
modo de navegação.
* GetMergedRange Retorna o intervalo de células mesclado que inclui uma
determinada célula.
* GetNode Retorna um objeto do nó de contorno para uma determinada
linha subtotal.
* GetNodeRow Retorna o número de pais de uma linha, primeiro, ou último
filho de um esboço.
* GetSelection Retorna a seleção atual ordenados de forma que ROW1 <=
ROW2 e Col1 <= Col2.
* LoadArray Cargas controlar a com dados de uma matriz Variant ou de
outro controle FlexGrid.
* LoadGrid Carrega o conteúdo da grade e formato de um arquivo.
* LoadGridURL Carrega o conteúdo da grade e formato de uma URL (criado com
SaveGrid).
* OLEDrag Inicia uma operação de arrastar OLE.
* Outline Define um nível de destaque para a exibição de subtotais.
* Paste Cola a seleção da área de transferência.
* PrintGrid Imprime a grade na impressora.
Refresh Força uma completa repaint de um formulário ou controle.
Consulte a documentação do Visual Basic para mais
informações.
* RemoveItem Remove uma linha de controle.
* SaveGrid Salva o conteúdo da grade e formato para um arquivo.
* Select Seleciona um intervalo de células.
* Subtotal Insere linhas com dados de resumo.
Eventos
* AfterCollapse Despedido depois que o usuário expande ou recolhe uma ou mais
linhas em um esboço.
* AfterDataRefresh Ocorre após a atualização/leitura de dados da fonte do registro.
* AfterEdit Ocorre após a saída do modo de edição de células controle.
* AfterMoveColumn Despedido depois de uma coluna é movida arrastando o
ExplorerBar.
* AfterMoveRow Despedido depois de uma briga é movida arrastando o ExplorerBar
ou usar o DragRow método.
* AfterRowColChange Despedido depois de a célula atual (Row, Col) alterações em uma
célula diferente.
* AfterScroll Despedido depois de os pergaminhos de controle.
* AfterSelChange Demitido após o intervalo selecionado ( RowSel , ColSel )
Página - 33
29. Tutorial Controle VSFlexgrid
alterações.
* AfterSort Despedido depois de uma coluna é classificada por um clique no
ExplorerBar.
* AfterUserFreeze Despedido depois que o usuário altera o número de linhas ou
colunas congeladas.
* AfterUserResize Despedido depois que o usuário redimensiona uma linha ou uma
coluna.
* BeforeCollapse Despedido antes que o usuário expande ou recolhe uma ou mais
linhas em um esboço.
* BeforeDataRefresh Disparou antes de ler dados a partir de fonte de registro.
* BeforeEdit Despedido antes que o controle entra no modo de edição de célula.
* BeforeMouseDown Ocorre antes do controle processar o evento MouseDown.
* BeforeMoveColumn Ocorre antes de uma coluna ser movida arrastando o ExplorerBar.
* BeforeMoveRow Disparou antes de uma linha é movida arrastando o ExplorerBar ou
usar o DragRow método.
* BeforePageBreak Disparados durante a impressão do controle para controlar quebras
de página.
* BeforeRowColChange Disparou antes da célula atual (Row, Col) muda para uma célula
diferente.
* BeforeScroll Disparou antes da rola de controle.
* BeforeScrollTip Disparou antes de uma ponta de rolagem é mostrada de modo que
você pode definir o ScrollTipText propriedade.
* BeforeSelChange Demitido antes do intervalo selecionado ( RowSel , ColSel )
alterações.
* BeforeSort Disparou antes de uma coluna é classificada por um clique no
ExplorerBar .
* BeforeUserResize Despedido antes que o usuário começa a redimensionar uma linha
ou coluna, permite cancelar.
* CellButtonClick Despedido depois que o usuário clica em um botão de células.
* CellChanged Demitido após a mudança de uma célula conteúdo.
* ChangeEdit Despedido depois de o texto no editor mudou.
* click Este evento ocorre quando o usuário pressiona e solta o botão do
dispositivo de mouse sobre um objeto. Consulte a documentação do
Visual Basic para mais informações.
* ComboCloseUp Demitido antes do built-in combobox fecha.
* ComboDropDown Demitido antes do built-in combobox cai para baixo.
* Compare Disparado quando o Sort propriedade é definida como
flexSortCustom, para permitir a comparação costume de linhas.
DblClick Este evento ocorre quando o usuário clica duas vezes um objeto.
* DrawCell Disparado quando a propriedade OwnerDraw é configurado para
permitir desenho de célula personalizado.
* EndAutoSearch Disparado quando a grade sai do modo AutoSearch.
* EnterCell Disparado quando uma célula se torna ativo.
* Error Despedido depois de um erro de acesso a dados.
* FilterData Despedido depois de um valor é lido e antes de um valor é gravado
em um conjunto de registros para permitir a formatação
personalizada.
* GetHeaderRow Disparados durante a impressão do controle para definir linhas de
cabeçalho repetição.
Página - 33
30. Tutorial Controle VSFlexgrid
KeyDown Este evento ocorre quando o usuário pressiona uma tecla enquanto
um objeto tem o foco.
* KeyDownEdit Disparado quando o usuário pressiona uma tecla no modo de edição
de célula.
KeyPress Este evento ocorre quando o usuário pressiona e libera uma chave
ANSI.
* KeyPressEdit Disparado quando o usuário pressiona uma tecla no modo de edição
de célula.
KeyUp Ocorre quando o usuário solta uma tecla.
* KeyUpEdit Disparado quando o usuário pressiona uma tecla no modo de edição
de célula.
* LeaveCell Demitido antes das alterações célula atual em uma célula diferente.
MouseDown Ocorrer quando o usuário pressiona (MouseDown) um botão de
mouse.
MouseMove Ocorre quando o usuário move o mouse.
MouseUp Ocorrer quando o usuário libera (MouseUp) um botão de mouse.
* OLECompleteDrag Despedido depois de uma queda de informar o componente de
origem que uma ação de arrastar ou foi realizado ou cancelado.
* OLEDragDrop Disparado quando um componente da fonte é jogada sobre uma
componente de destino.
* OLEDragOver Disparado quando um componente é arrastado sobre o outro.
* OLEGiveFeedback Demitido após cada OLEDragOver evento para permitir que o
componente de origem para fornecer feedback visual para o usuário.
*
OLESetCustomDataObject
Despedido depois de uma operação de arrastar OLE é iniciado
(manualmente ou automaticamente), permite que você forneça uma
DataObject personalizado.
* OLESetData Dispararam sobre o componente de origem quando um componente
de destino executa o método GetData do objeto DataObject da
fonte.
* OLEStartDrag Despedido depois de uma operação de arrastar OLE é iniciado
(manualmente ou automaticamente).
* RowColChange Disparado quando a célula atual ( Row , Col ) muda para uma
célula diferente.
* SelChange Demitido após o intervalo selecionado ( RowSel , ColSel )
alterações.
* SetupEditStyle Demitido antes do EditWindow é criada, usada para modificar
estilos janela.
* SetupEditWindow Demitido após a EditWindow foi criado e antes que ela seja exibida.
* StartAutoSearch Disparado quando a grade entra em modo de pesquisa
automática.
* StartEdit Disparado quando o controle entra no modo de edição de célula
(após BeforeEdit ).
* StartPage Disparou antes de cada página enquanto a grade está sendo
impresso.
* ValidateEdit Disparou antes de sair do modo de controle de edição de célula.
Demonstração calculadora
Esta demonstração mostra como o VSFlexString controle pode ser usado para
implementar uma expressão matemática avaliador. Você pode usar esse projeto
Página - 33
31. Tutorial Controle VSFlexgrid
como está, para permitir aos usuários inserir expressões em vez de constantes
numéricas, ou usá-lo como ponto de partida para um avaliador mais sofisticados
com variáveis e funções personalizadas.
Aqui está como a aplicação final será:
Passo 1: Criar os controles
Iniciar um novo projeto Visual Basic. Botão direito do mouse na caixa de
ferramentas e selecione "Components ...", em seguida, escolher o VSFlexString
controle da lista. O VSFlexString ícone será adicionado à caixa de ferramentas
Visual Basic. (Se o controle não aparece na lista, não foi registrado em seu
computador. Neste caso, clique no botão "Procurar" e selecione o arquivo
VSSTR8.OCX para registrá-lo.)
Criar um VSFlexString objeto na forma clicando no ícone na caixa de
ferramentas, em seguida, soltando-o no formulário. Também criar duas caixas de
texto e um botão de comando. Organizar os controles e redimensionar o
formulário para que ele se parece com a foto acima.
Clique no VSFlexString controle e uso do Visual Basic para janela de
propriedades mudar seu nome para "fs".
Passo 2: Avaliando Expressões
Este projecto consiste principalmente de uma única função recursiva que
usa o VSFlexString controle para avaliar as expressões digitadas na caixa de
texto.
Essa função, que vamos escrever mais tarde, precisa ser chamada quando
o usuário clica no botão. Dê um duplo clique no botão e digite o seguinte no
manipulador de eventos:
"Avaliar a expressão em Text1 e mostrar o resultado em Text2
Sub Command1_Click ()
Texto2 = Format (Eval (Text1), "0.00")
End Sub
Isso deixa apenas os Eval função, que recebe uma string contendo uma
expressão matemática como um parâmetro e retorna um valor. Aqui está o
código:
Function Eval (ByVal s As String) As Double
Dim s1, $ s2, $ s3
Dim v #
"Prepare-se para analisar
fs = Trim (s) 'ponto de interrupção definido nesta linha
"Interpretar sub-expressões entre parênteses
fs.Pattern = "{.*}({[^()]*}){.*}"
if fs.MatchCount> 0 Then
s1 = fs.TagString (0) 'coisas para a esquerda
s2 = fs.TagString (1) 'sub-expressão
s3 = fs.TagString (2) 'para a direita
Página - 33
32. Tutorial Controle VSFlexgrid
Debug.Print "match"; s1 "; #<(>#"; s2; "#<)>#"; s3
v = Eval (s2) "avaliar a expressão sub-
Eval = Eval (s1 & Format (v) & s3)
exit function
End If
"Somar e subtrair (de alta prioridade operadores)
fs.Pattern = "{.+}{[+-]}{.+}"
if fs.MatchCount> 0 Then
s1 = fs.TagString (0) 'operando 1
s2 = fs.TagString (2) "operando 2
Debug.Print "match"; s1 "; #<+->#"; s2
Fs.TagString Select Case (1)
Case "+": Eval = Eval (s1) + Eval (s2)
Case "-": = Eval Eval (s1) - Eval (s2)
End Select
exit function
End If
'Multiplicar e dividir (de menor prioridade operadores)
fs.Pattern = "{.+}{[*/]}{.+}"
if fs.MatchCount> 0 Then
s1 = fs.TagString (0) 'operando 1
s2 = fs.TagString (2) "operando 2
Debug.Print "match"; s1 "; #<*/>#"; s2
Fs.TagString Select Case (1)
"*" Caso: Eval = Eval (s1) * Eval (s2)
Caso "/": Eval = Eval (s1) / Eval (s2)
End Select
exit function
End If
"Poder (de menor prioridade operador)
fs.Pattern = "{.+}^{.+}"
Se fs.MatchCount> 0 Then
s1 = fs.TagString (0) 'operando 1
fs.TagString = s2 (1) 'operando 2
Debug.Print "match"; s1; "#<^>#"; s2
Eval = Eval (s1) ^ Eval (s2)
exit function
End If
'Número (nada combinado, de modo que este deve ser um número)
fs.Pattern = "^-?[ 0-9] + .? [0-9] * $ "
if fs.MatchCount> 0 Then
Eval = Val (s)
else
Debug.Print "Erro Eval:"; fs: Beep
End If
End Function
Esta rotina trata todos os operadores básicos tendo em conta a sua
precedência (isto é, o poder, antes da divisão antes de soma). Ele também
lida com sub-expressões contidas entre parênteses.
O Eval função consiste em um padrão que se repete. O VSFlexString é
utilizado para analisar cada expressão em seus componentes, de acordo com
regras de prioridade do operador, e Eval é chamado recursivamente para
avaliar cada componente. Este processo continua até que um número for
encontrado e avaliados usando built-in do VB Val função.
O padrão típico tem este formato: "{.+}{[*/]}{.+}". O "+ {.}" No
início e no final da partida padrão corre de um ou mais personagens. O
"{[*/]}" corresponde a um operador que separa as partes esquerda e direita
da expressão.
Página - 33
33. Tutorial Controle VSFlexgrid
Passo 3: Tentando-o para fora
Pressione F5 para executar o projeto e digite uma expressão como "(2 *
(5 +3) 144 ^ 0,5) / 7". Em seguida, clique no botão de comando eo
resultado (4) aparecerá na segunda caixa de texto. A janela de depuração irá
mostrar um traço da Eval função. Aqui está uma versão comentada da
saída:
match: (2 * 5 +3 #<(># #<)># 144 ^ 0,5) / 7 found sub-
expression
match: 5 #<+-># 3 Found +
match: #<(># 2 * 8 144 ^ 0,5 #<)># / 7 found sub-expression
match: 2 * 8 #<+-># 144 ^ 0,5 found +
match: 144 #<^># 0,5 found ^
match: 2 #<*/># 8 found *
match: 28 #<*/># 7 found /
O rastreamento mostra a ordem em que foram encontrados resultados e
operações executadas. Você pode querer colocar um ponto de interrupção no
topo da Eval de rotina e ver o que acontece após cada jogo.
Passo 4: aperfeiçoar a demonstração
Como um exercício para o leitor, tente adicionar suporte para variáveis
definidas pelo usuário e funções, tais como Sin e Cos.
Página - 33