Microsoft.com Brasil Home | Mapa do Site
HyperLink
 
Procurar no Microsoft.com por:
 
  Home | Developer Center | Biblioteca | Downloads | Como Comprar | Assinaturas MSDN




Pesquisa rápida

 
 
  
Home MS Brasil
Compre
Downloads
Suporte
Fale conosco
  Visual FoxPro 8.0

   Desconsiderando Comportamentos e Suportando Novos Tipos de Ferramentas

   Conforme abordado nas seções anteriores, os suplementos são uma maneira fácil de adicionar comportamentos personalizados ao conjunto suportado atualmente de tipos da Caixa de Ferramentas e são facilmente distribuídos como parte de um conjunto de ferramentas. Além dos comportamentos do suplemento, a Caixa de Ferramentas pode ser estendida de modo você possa desconsiderar comportamentos existentes ou suportar seus novos tipos de ferramenta e categoria. Para a maioria das situações, os suplementos realizam o que você precisa; no entanto, há casos em que será necessário criar suas próprias implementações da classe de ferramenta.

Você pode estender ou alterar os comportamentos atuais herdando seu item de ferramenta a partir de um tipo de item suportado ou alterando o código do comportamento diretamente na classe de item da ferramenta. Por exemplo, você pode criar uma subclasse de _dbftool chamada mydbftool para suportar um comportamento arrastar e soltar diferente para itens da tabela. Ou então você pode editar a classe _dbftool diretamente na biblioteca de classe _toolbox.vcx. Você também pode criar novos tipos de item herdando a partir de classes pai apropriadas, como _filetool ou _tool, dependendo do tipo de ferramenta necessário para suportar ou do nível de controle que você deseja. Como regra, todos os itens da caixa de ferramentas que você criar deveram herdar a partir da classe _tool. Todas as categorias que você cria deverão herdar de _category, e as categorias dinâmicas deverão herdar de _dynamiccategory.

O primeiro exemplo descreve como desconsiderar um comportamento para todas as ferramentas de um certo tipo. Existem duas maneiras de realizar isso: modificar a classe de ferramenta apropriada diretamente na biblioteca de classe _toolbox.vcx ou criar uma subclasse dessa classe e direcionar a Caixa de Ferramentas para usá-la. Se você modificar _toolbox.vcx diretamente, todos os itens desse tipo usam o novo comportamento. Isso envolve a edição dos métodos de comportamento apropriados diretamente em _toolbox.vcx para a ferramenta de classe que você deseja modificar. Quando você reiniciar a Caixa de Ferramentas, ela lê o novo código que você digitou.

Por exemplo, suponha que você deseja modificar o comportamento arrastar e soltar de _dbftool. Atualmente, quando você libera um item da tabela para um formulário, ele libera um objeto da grade baseado em uma configuração de registro que você pode estabelecer na guia Field Mappings da caixa de diálogo Options do Visual FoxPro no tipo Multiple. Se isso não estiver definido, ele libera o Visual FoxPro base class Grid. Isso significa que todo item da tabela que você libera usa essa configuração. Para estabelecer essas informações por item da tabela além dessa abordagem global, uma opção é modificar a _dbftool classe para procurar o nome de classe da grade e a biblioteca especificada na caixa de diálogo de propriedades do item (Figura 10). Você pode, então, especificar uma classe específica para liberar para cada item da tabela na Caixa de Ferramentas.

  
    Figura 10 A _dbftool pode ser modificada para ler as propriedades do item para biblioteca de classe e nome para determinar qual objeto da grade será liberado para os designers.

A primeira abordagem para a modificação desse comportamento é editar a classe _dbftool diretamente na biblioteca de classe _toolbox.vcx. Antes de iniciar, é bom fazer o backup dos arquivos _toolbox.vcx e _toolbox.vct. Agora abra _dbftool no designer de classe e abra o método DropOnContainer. Você deverá ver o seguinte código:

   #include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cClassLib
LOCAL cClassName
LOCAL cPropertyList
LOCAL cOriginalObjName
LOCAL cFilename

*-- Look up the registry values for class name and location to use.
cClassLib = THIS.GetRegistryValue("ClassLocation", INTELLIDROP_KEY + "Multiple")
cClassName = THIS.GetRegistryValue("ClassName", INTELLIDROP_KEY + "Multiple")

*-- Obtain the item property value 'filename' for this item.
*-- Ex. 'C:\MYDATA\TABLE1.DBF'
cFilename = NVL(THIS.GetDataValue("filename"), '')

*-- If the registry value isn't set, use the VFP base class Grid
IF EMPTY(cClassName) OR !FILE(cClassLib)
cClassLib = ''
cClassName = "Grid"
ENDIF

*-- Obtain the item property value 'objectname' for this item.
*-- Ex. 'MyGrid'
cOriginalObjName = NVL(THIS.GetDataValue("objectname"), '')
IF EMPTY(cOriginalObjName)
cOriginalObjName = "grd" + JUSTSTEM(cFilename)
ENDIF

*-- Create the list of properties specified in the properties dialog.
*-- Any writable properties will be set when the object is dropped.
cPropertyList = TEXTMERGE( ;
[RecordSourceType=1] + CHR(10) + ;
[RecordSource=<>] + CHR(10), ;
.F., "<<", ">>") + ;
CHR(10) + THIS.EvalText(NVL(THIS.GetDataValue("properties"), ''))

*-- Drop the object to the designer
THIS.DropObject(oDropTarget, cSCXName, nXPos, nYPos, cClassName, ;
cClassLib, '', cOriginalObjName, cPropertyList, '', '', cFilename)
 

   É importante compreender que esse método é ler o registro para o nome e local da classe de modo que possa especificar essas informações nos parâmetros cClassName e cClassLib para o método DropObject. Desse modo, tudo o que você precisa fazer é definir essas duas variáveis com as informações de propriedade correspondentes. Você pode fazer isso com análise de seqüência de caracteres. As propriedades de um item podem ser obtidas chamando o método GetDataValue e passando a ele o nome do valor para recuperar, neste caso, propriedades. Ele retorna uma seqüência de caracteres que contém uma lista delimitada de retorno de carro das propriedades do item no formato de PropertyName=Value. Tudo o que você precisa fazer é procurar Class= and ClassLibrary= para recuperar os valores.

   #include "foxpro.h"
#include "toolbox.h"
LPARAMETERS oDropTarget, cSCXName, nXPos, nYPos
LOCAL cClassLib
LOCAL cClassName
LOCAL cPropertyList
LOCAL cOriginalObjName
LOCAL cFilename

m.cFilename = NVL(THIS.GetDataValue("filename"), '')

LOCAL lcProps
lcProps = THIS.GetDataValue("properties")

*-- Were both the properties specified?
IF "class=" $ LOWER(lcProps) AND "classlibrary=" $ LOWER(lcProps)

*-- Split the properties into an array for easy searching
LOCAL ARRAY laProps[1]
ALINES(laProps,LOWER(lcProps))

*-- Find the class property and get the value
m.cClassName = THIS.EvalText( ;
SUBSTR(laProps[ASCAN(laProps, "class=")],LEN("class=")+1))

*-- Find the classlibrary property and get the value
m.cClassLib = THIS.EvalText( ;
SUBSTR(laProps[ASCAN(laProps, "classlibrary=")],LEN("classlibrary=")+1))
ELSE
*-- If we didn't specify item properties, use the 'Multiple' registry setting
m.cClassLib = ;
THIS.GetRegistryValue("ClassLocation", INTELLIDROP_KEY + "Multiple")
m.cClassName = ;
THIS.GetRegistryValue("ClassName", INTELLIDROP_KEY + "Multiple")
ENDIF

IF EMPTY(m.cClassName) OR !FILE(m.cClassLib)
m.cClassLib = ''
m.cClassName = "Grid"
ENDIF
.
.
.

   Esse código procura primeiro as propriedades de Class e ClassLibrary. Se essas propriedades forem encontradas, elas definem as variáveis apropriadas que são passadas para o método DropObject. O método EvalText avalia o valor da propriedade de modo que você possa incluir funções e variáveis nos valores de propriedade do item. Por exemplo, você pode especificar o local da biblioteca de classe na caixa de diálogo de propriedades do item da seguinte maneira: (HOME()+"FFC\_BASE.VCX") para usar as classes Foundation do FoxPro. Você pode testar suas alterações fechando a biblioteca de classe e abrindo a caixa de Ferramentas. Especifique uma classe da grade para uma de suas ferramentas da tabela nas propriedades do item e então libere o item para um formulário. Você verá o que objeto da grade liberado está agora baseado na classe que você especificou.
Em vez de modificar a biblioteca de classe _toolbox.vcx, você pode criar uma subclasse de _dbftool em uma nova biblioteca de classe. Você então modifica Class e Classlib dos campos da tabela Tooltype para especificar uma nova informação de classe para o tipo de ferramenta da Tabela. Se isso for feito dessa maneira, apenas os novos itens daquele tipo serão adicionados para que a Caixa de Ferramentas use o novo comportamento. Quando você cria itens na Caixa de Ferramentas, os campos Class and Classlib na tabela Tooltype são copiados para a tabela de conteúdo da Caixa de Ferramentas para o item. Dessa maneira, nenhum item existente ainda faz referência à classe pai. Qualquer novo item que você criar, no entanto, refere-se à sua subclasse. Você pode criar conjuntos de ferramenta em que as ferramentas individuais poderão ter comportamentos desconsiderados. Isso é prático caso os fornecedores de terceiros queiram que seu conjunto de ferramentas apresente um comportamento específico, mas não queiram desconsiderar o comportamento padrão para todas as ferramentas daquele tipo. Nesse caso, você não precisa tocar a tabela Tooltype. Apenas digite manualmente as informações de Class e Classlib na tabela de conteúdo da Caixa de Ferramentas para aquele item específico e então distribua a biblioteca de classe.
Restaure a biblioteca de classe _toolbox.vcx e crie uma nova classe de ferramenta chamada mydbftool e baseie-a em _dbftool. Crie essa classe em uma nova biblioteca de classe chamada MyToolbox.vcx e armazene-a na mesma pasta de _toolbox.vcx.

   CREATE CLASS mydbftool OF MyToolbox.vcx AS _dbftool FROM _toolbox.vcx 

   Edite o método DropOnContainer para incluir as alterações de código, salve e feche a classe. Em seguida, vá à tabela Tooltype e localize o registro em que o campo Tooltype é igual a Table (o Uniqueid é DBF). Defina o campo Classname para mydbftool e o campo Classlib para o nome e local da biblioteca de classe MyToolbox.vcx, isto é, C:\Program Files\Microsoft Visual FoxPro 8\Toolbox\MyToolbox.vcx. Feche a tabela Tooltype e reinicie a Caixa de Ferramentas. No formulário Customize Toolbox, adicione um item, selecione File as the type e localize uma tabela (arquivo .dbf). Abra as propriedades do item, especifique Class e ClassLibrary de uma grade para liberar, e arraste e solte o item para um formulário. A grade está baseada na classe que você especificou. No entanto, se você tiver algum item da tabela existente em sua Caixa de Ferramentas, o comportamento desses itens não muda. Você poderá notar isso abrindo a tabela de conteúdo da Caixa de Ferramentas e observando os valores dos campos Classname e Classlib.
Esse método também é utilizado para adicionar um novo tipo de ferramenta à Caixa de Ferramentas. Primeiro crie sua classe de ferramenta herdada de uma ferramenta apropriada na hierarquia. Se o tipo que você estiver adicionando for baseado em um tipo de arquivo específico que não é suportado, herde a partir da classe _filetool. Grave o código apropriado para sua nova classe de ferramenta. Por fim, adicione o novo tipo de ferramenta à tabela Tooltype, certificando-se de ter especificado um ID único para sua ferramenta. É recomendado seguir o formato CompanyName.Toolname.
Para a classe mydbftool, na tabela Tooltype crie seu próprio tipo chamado Extended Table, em vez de especificá-lo como a classe do tipo da Tabela. Adicione um registro à tabela Tooltype conforme mostrado na Tabela 19 e digite os valores de campo relevantes. (Você pode fazer referência à tabela Tooltype abordada anteriormente neste artigo para obter detalhes sobre todos os campos nesta tabela.)

Tabela 19 Informações para criar seu próprio tipo de Extended Table

Campo

Valor

UNIQUEID

MASSI.TABLEEX

SHOWTYPE

T

TOOLTYPE

Extended Table

CLASSNAME

mydbftool

CLASSLIB

C:\Program Files\Microsoft Visual FoxPro 8\Toolbox\MyToolbox.vcx

SHOWNEW

.T.

PROPSHEET

.T.

INACTIVE

.F.

   Feche a tabela e reinicie a Caixa de Ferramentas. Como o campo Shownew está definido para true, quando você seleciona Add Item a partir da caixa de diálogo Customize Toolbox, é possível ver o novo tipo de ferramenta listado (Figura 11).

  
   Figura 11 Novos tipos de ferramentas que você cria podem ser exibidos na caixa de diálogo Add Item.

Após selecionar o tipo Extended Table, a folha de propriedades do item abre de modo que você possa inserir todos os campos necessários para o item, como Item name, Object name e File name. Além disso, você pode inserir as propriedades ClassLibrary e Class no editor de propriedade. A folha de propriedade aparece imediatamente, pois o campo Propsheet é definido para True. Quando você arrasta e solta um item de Extended Table para o designer, é liberada uma grade baseada na classe que você especificou. No entanto, qualquer item da Tabela que você adicionar à Caixa de Ferramentas apresenta o comportamento padrão.
 

 

   Voltar para o menu 

  

 

Fale Conosco | Imprima esta página | Adicione aos Favoritos
©2004 Microsoft Corporation. Todos os direitos reservados. Nota Legal | Política de Privacidade
aa