FillForegnd no Shapesheet usando dados errados

0

Eu tenho um problema relacionado ao trabalho e, como tal, não consigo anexar o arquivo de exemplo.

Eu uso formas dinâmicas como parte de um diagrama, onde o usuário pode alterar os dados da forma (ou seja, alterar uma categoria) e a forma mudará de cor. A mecânica para isso está na ShapeSheet.

O elemento chave dos dados (Prop.Category) é um índice de uma lista fixa de opções. Um campo Usuário (User.ForeColour) usa os dados Prop.Category para determinar o valor da cor RGB de outra lista fixa (outra fórmula de índice / pesquisa). Eu tenho FillForegnd definido para acessar User.ForeColour diretamente.

No meu exemplo aqui, o usuário seleciona Prop.Category # 3, que indiretamente configura User.ForeColour para RGB (128,0,128). No entanto, na configuração atual do arquivo, o FillForegnd é definido como RGB (64,86,150). Quando seleciono outras categorias, os valores de FillForegnd também são alterados a partir do valor esperado.

Eu verifiquei o ShapeSheet usando a visualização de fórmula e valores. Tudo está correto (exceto para o valor final em FillForegnd). A verificação dupla User.ForeColour mostra que ela contém o valor RGB (128,0,128) conforme o esperado.

Curiosamente, se eu sobrescrever a fórmula em User.ForeColour com o valor estático RGB (128,0,128), FillForegnd será preenchido corretamente e a forma mostrará a cor correta. Retorne à fórmula (que ainda acaba no valor correto) e o FillForegnd é novamente preenchido com o valor RGB errado.

Eu verifiquei e removi temas, isso não teve efeito.

Visio 2010, ambiente Windows 7 em rede.

Eu tentei duplicar o problema em um novo arquivo em um sistema diferente (para obter um exemplo de upload), mas não obtive êxito. O arquivo com a forma mestre original ainda funciona conforme o esperado. O novo arquivo com as formas copiadas (e por padrão, o mestre copiado) é aquele com problemas. Eu verifiquei duas vezes a ShapeSheet e as configurações padrão / mestre são as esperadas (texto preto) e as opções personalizadas (texto azul) são as esperadas.

    
por AJD 15.12.2017 / 07:42

1 resposta

0

As pessoas boas nos fóruns visguy forneceram insight suficiente para resolver a questão que coloquei aqui.

A propriedade User.Forecolour usou uma fórmula ( INDEX(...) ) para determinar o valor de cor desejado. Esse uso de fórmula não ficou bem com a célula FillForegnd .

Existem três soluções simples. Ambas as soluções usam SETF(...) em vez de ter FillForegnd apontando para uma fórmula.

  1. A propriedade User.Forecolour pode usar SETF(GetRef(FillForegnd),INDEX(...)) . Isso forçará um valor em FillForegnd e será a modificação mais fácil para o código original. Uma desvantagem é que qualquer modificação do usuário na própria forma sobrescreverá a célula FillForegnd , que não será corrigida até que o usuário selecione os dados de forma corretos novamente.
  2. Uma célula User.X adicional pode ser criada. O SETF na resposta 1 seria GetRef(User.X) . FillForegnd conteria Guard(User.X) . Isso impedirá que os usuários alterem aleatoriamente as cores.
  3. A terceira opção estende as respostas anteriores. Em User.ForeColour : =SETF(GetRef(FillForegnd),"GUARD(INDEX(...))") . Isso definirá o GUARD conforme necessário na área de cor do primeiro plano.

Todas essas soluções aproveitam a característica que SETF pode sobrescrever células que têm GUARD , mas a intervenção normal do usuário na GUI (área de página de formas) não pode.

    
por 12.01.2018 / 07:21