Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Amletico dubbio. Privilegiare la funzionalità o la filosofia ?

Applicazione cartografica.
Tutte le routine grafiche fatte da me.
Un drammatico errore di OVERFLOW si scatena quando effettuo piu' ZOOM, uno
dentro l'altro.
Ieri sera, casualmente, mi sono accorto che l'errore non si verifica se da
Pannello di Controllo > Schermo > Impostazioni, setto il numero massimo di
colori a 256.
Il funzionamento dell'applicazione e' graficamente IDENTICA al funzionamento
che aveva con 32767 colori.
L'idea di costringere l'operatore a lavorare a 256 colori non mi piace
molto, ma il pensiero di non dover rivedere il software mi tenta .... e
molto.
Il dubbio e' filosofico e non funzionale.
E' "eticamente" accettabile far lavorare un ipotetico utente a 256 colori ?
Ciao a tutti
Stefano

Primo si privilegia la funzionalita, poi .. tutto quello che e' possibile
Ciao Stefano

E' "eticamente" accettabile far lavorare un ipotetico utente a 256 colori ?
No.
Primo, perche' e' una rottura non indifferente (hai presente quei
ciddi' multimediali che appena partono ti dicono "io vado solo a 256
colori..?" Arrgh..)
Secondo, obiettivamente serve a mascherare un difetto strutturale, e
tu come autore del programma potresti non farci una bella figura.
Terzo, ho chiesto un parere in ditta e mi hanno risposto "ma sei
pazzo?"... ^_^;
--
C'ya,
 Benjamin Reilly
  |
  |
'/|\'
\\O//
//"\\
'\ /'
________________________________________TagLine___
"Quanti Angeli danzano sulla punta di uno spillo?"

Un limite di un programma non è 'eticamente' accettabile.
Cioè, un programma con questo tipo di limiti io non lo installerei, e lo
giudicherei di bassa qualità e fattura.
Ma scusa, overflow in cosa?
Probabilmente qualche variabile va in 'overflow', e questo non dipende dalla
profondità dei colori, ma da come assegni i valori (quelli del colore?) a
qualche variabile...
Lo so che è un consiglio che fa schifo, ma prova ad dichiarare ogni
variabile (dichiarandola esplicitamente) single... per il colore poi la
converti in long prima di usarla... prova, magari ne vieni a capo,
fuocalizzando meglio il problema...
--[GbC]--

Grazie a tutti per le risposte.
...dunque, a parte il problema ...."etico" (la maggioranza mi boccia .... e
in fondo ....mi boccio anch'io !!),  il problema sul software e' causato
dalla necessita' di dipingere sempre TUTTA la cartografia indipendentemente
dallo zoom selezionato.
Questo mi permette di muovermi tranquillamente sulla cartografia con la
funzionalità PANNING (....la manina che ...acchiappa la carta ....come
Acrobat), poiche' la cartina esiste ed e' visualizzata  ...fuori dal
monitor.
Quando presi le decisioni su come organizzare il programma ho pensato che
era conveniente sacrificare qualche millisecondo in piu' in fase di
caricamento e visualizzazione della mappa per avere pero' la possibilità di
muoversi con velocita' con il PANNING.
L'altra possibilita' era caricare ...una cornice di visualizzazioni intorno
alla visualizzazione corrente ad ogni spostamento della cartina.
.....forse dovro' fare cosi'.
Comunque l'errore che ho se vado troppo a fondo con lo Zoom e' il numero
480, IMPOSSIBILE CREARE IMMAGINE AUTOREDRAW sull'istruzione
CurrentPen = SelectObject(frmPrincipale.pctMappa.hdc, SelectedPen)
quando il programma dovrebbe tracciare i poligoni fillati (che poi sarebbero
le regioni d'italia)
Ciao a tutti
Stefano

 wrote

"fillati" ? da to fill, devo supporre...

...

Scusa, ma questo consiglio fa proprio schifo, perchè:
primo, i colori possono essere al massimo 16milioni (24bit) i quali ci
stanno comodamente in un long.
secondo, i colori sono grandezze intere e non float, e l'uso di double non
farebbero che peggiorare le prestazioni e forse rendere instabile il
programma per via delle conversioni non ortodosse.
L'unico problema si potrebbe verificare nel caso in cui si tentasse ad usare
una palette a 32 bit, poichè VB non gestisce valori unsigned, ma non mi
sembra il suo caso.
Scusa, ma sono un purista dei tipi (VB ne ha già pochi... usiamo bene almeno
quelli)
Ciao.

le regioni d'italia)
L'help mi sembra piuttosto esplicito:
----------
In Visual Basic non è possibile creare una bitmap fissa per aggiornamenti
automatici di form o immagini. Causa e soluzione dell'errore:
La memoria disponibile non è sufficiente per poter impostare la proprietà
AutoRedraw su True.
Impostare la proprietà AutoRedraw su False ed eseguire l'aggiornamento nella
routine dell'evento Paint oppure ridurre le dimensioni del controllo
PictureBox o dell'oggetto Form e riprovare con la proprietà AutoRedraw
impostata su True.
----------
Il tuo problema è che il risultato tra (bitPerPixel * ImageHeight *
ImageWidth) è troppo alto.
La soluzione sarebbe quella di visualizzare solo le regioni che cadono
all'interno dell'area grafica.
Se usi le regioni di windows puoi facilmente sapere quali sono con l'API
RectInRegion(hRgn, ScreenRECT)
Ciao


E' la direzione nella quale mi sto' muovendo
Ciao e grazie
Stefano