Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Argomento Buttons di un MsgBox

Ciao a tutti.
Avete presente i MsgBox? :P
Un msgbox si puň aprire anche cosě:
Msgbox "Ciao", vbQuestion + vbYesNo , "pippo"
Ecco. Io ho una funzione a cui passo il vbQuestion + vbYesNo.
Come faccio a scindere i valori? Cioč come faccio a distinguere che i
parametri sommati sono stati vbQuestion + vbYesNo?
Devo usare qualche operatore And or,... o operazioni matematiche?
Spero di essermi spiegato... :)
CiaoZ
SebaMix

Devo usare qualche operatore And or,... o operazioni matematiche?
Mi pare si debba fare un and tra il valore che vuoi testare e la somma
degli altri due... non ho avuto il tempo di provare perň! :-(
-- 
Visita il sito comune del NG: 
http://www.it-lang-vb.net
Visit: 
http://www.hardwaretips.com

 Devo usare qualche operatore And or,... o operazioni matematiche?
Vedi i valori reali delle varie costanti (non solo quelle dei bottoni) e
comincia a togliere dal valore complessivo passato i valori delle varie AND
(se <>0) a partire dalla piů alta.

 Come faccio a scindere i valori? Cioè come faccio a distinguere che i


 parametri sommati sono stati vbQuestion + vbYesNo?
Si tratta di valori costanti espressi in potenze di 2, quindi si possono
facilmente estrarre con la funzione AND. Es:
If (ValorePassato AND vbQuestion) = vbQuestion then
    MsgBox "VbQuestion"
Endif
If (ValorePassato AND vbYesNot) = vbYesNot then
    MsgBox "vbYesNot"
Endif
Ho un po' di insonnia, quindi approfitto per darti una spiegazione
approfondita.
Per capire il motivo, basta fare un esempio seguendo i valori binari e
l'effetto che provoca la funzione AND
VbYesNo vale 4, cioè in binario     00000100
VbQuestion vale 32, cioè in binario 00110010
La somma dei 2 valori in binario è   00110110
Come puoi vedere i bit a 1 sono posti in posizioni differenti nei due valori
binari. La somma così si limita a inserire tutti degli 1 in qualunque
posizione sia occupata da un 1 in uno dei valori originali. Così facendo si
comporta esattamente come la funzione OR.
L'inverso di OR è AND, che si occupa di porre a zero tutti i bit che non
valgono 1 nella stessa posizione in entrambi i valori testati. In questo
modo, se confronti in AND il valore di VBYesNo e la somma dei valori,
ottieni solo gli 1 comuni, e quindi proprio il valore di VBYesNo.
Questo ragionamento non è valido se utilizzi costanti che non siano valori
pari a pure potenze di 2. Ad esempio, proviamo ad usare un ipotetico valore
costante 5, che accende sia il bit 0 (2^0 = 1) sia il byte 2 (2^2=4) e
sommiamolo a vbYesNo (2^2=4). Il risultato provoca un overflow di bit perchè
vengono sommati due bit ad 1, e se confrontassi col metodo spiegato più
sopra questo valore di somma con vbYesNo, otterresti erroneamente che non è
contenuto (perchè 9 vale 00001001 e non ha 1 in posizioni comuni con
0000100). Per fortuna nelo caso delle costanti usate dai MSGBox questo non
può avvenire.
Ciao
*Roby*

 Devo usare qualche operatore And or,... o operazioni matematiche?
Se ho capito bene il tuo problema,
Function MyFunction(mbMode as long) as ....
    dim IsQuestion as boolean
    dim IsYesNo as boolean
    IsQuestion = mbMode And vbQuestion
    IsYesNo = mbMode And vbYesNo
    .......
End Function
Ciao
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> VbQuestion vale 32, cioč in binario 00110010
Ragionamenti ok, ma 32 decimale = 00100000 binario.
Ciao.


 Ragionamenti ok, ma 32 decimale = 00100000 binario.
Orpo č vero. Ecco cosa si ottiene quando si scrive veloci come un treno ma
si hanno i "binari" arrugginiti. ;-)
Ciao
*Roby*

 facilmente estrarre con la funzione AND. Es:
Attenzione, secondo me ci sono delle eccezioni. Per esempio il tasto
vbOKOnly vale 0. Inoltre gli altri parametri (per esempio le icone) possono
creare valori tali da non essere separabili con un unico e specifico test.
Io sono giunto alla conclusione (come dicevo nel post sopra) che occorre
testare e togliere a partire dai valori possibili più alti.