Forms

3.10 In modalità maschere continue è possibile visualizzare un controllo colorato diversamente a seconda del suo contenuto? (2)
  Graziano Mario Valenti
(D)
In modalità maschere continue è possibile visualizzare un controllo colorato
diversamente a seconda del suo contenuto? (2)

(R)
La soluzione di Lorenzo Coronati può essere ulteriormente sviluppata, aumentandone potenzialità e possibilità applicative.
Detta soluzione, infatti, è limitata alla rappresentazione di pochi colori,quelli previsti dagli stati:negativo, zero, positivo e nullo.
Per ottenere maggior libertà si può costruire il campo "Furbo" come contenitore di oggetto "OLE Associato" e collegarlo a immagini BMP.

La funzione da inserire nel campo FURBO assume questo aspetto:
=Choose(TestSullaCellaDaColorare;[Img1];[Img2];[Img3];[Img4];...[Img n])
La funzione che effettua il TEST sul campo da colorare deve restituire un Intero che rappresenterà l'indice che individua l'immagine da visualizzare all'interno del campo FURBO.

Supponiamo di dover colorare le celle in base al secondo carattere del codice che contengono:
 AE289 AF430 AK340 AW239
 AS229 DF434 GK320 MW736

=Choose( Asc(Mid(CODICE;2;1))-64;[Img1];[Img2];[Img3];[Img4];...[Img n])

Quando la seconda lettera è A (codice ascii 65) la funzione test vale 1 e sarà elezionata l'immagine Img1 se la seconda lettera è B (codice ascii 66) la funzione test vale 2 e sarà selezionata l'immagine Img2 etc.

Non dovrebbe essere difficile costruire funzioni test per ricoprire ogni esigenza applicativa.
Si tenga presente che la funzione,se particolrmente complessa, può essere definità nel modulo della form ed essere richiamata semplicemente con il nome.
=Choose(MyTest(CODICE);[Img1];[Img2];[Img3];[Img4];...[Img n])
L'operazione più faticosa è quella di definire i campi immagine.
La soluzione proposta è piuttosto complessa, sono certo che vi sia una strada più breve lascio ad altri questa parte di contributo.

Personalmente ho operato in questo modo.
1) ho creato delle BITMAP (256 colori);
2) ho creato una tabella "COLORI" con un campo per ogni bitmap e un solo record;
3) ho creato una maschera (singola) sulla tabella COLORI;
4) ho creato una maschera singola in cui ho inserito come sottomaschere:
 la maschera (continua) con la tabella codici
 la maschera (singola) con la tabelle colori
5) ho editato la maschera della tabella codice e NELL'INTESTAZIONE ho inserito tanti campi "OLE Associato" quante sono le immagini e li ho referenziati alle relative celle della sottomaschera colori
6) a detti campi ho assegnato nomi brevi (Img1, Img2 etc...) e li ho resi invisibili
7) ho inserito i campi FURBI necessari

N.B.
Perchè tutto questo giro?
1) Perchè volevo che i colori delle maschere fossero facilmente sostituibili
modificando il contenuto della tabella colori e non le maschere.

2) Perchè nelle formule volevo risparmiare spazio e scrivere IMG1 anzichè
   Form![Maschera principale]![Sottomaschera].Form[Controllo]

Sarebbe auspicabile trovare una soluzione più diretta che prevedesse in sostituzione della "Choose" una espressione del tipo: =ArrayBMP(MyTest)

Dove l'ArrayBMP viene caricato nell Form_OnLoad con gli oggetti contenuti nella tabella COLORI.
Strada tentata ma con scarso successo.

Si tenga inoltre presente che con questa procedura è possibile creare sfondi a tinta unita oppure con texture articolate.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.