Newsgroup: it.comp.lang.visual-basic
Titolo: Chiarimenti su Fond Dialog e modifica proprietà

É noto che con Fond Dialog c'è la possibilità di aggiornare le proprietà 
del font come nome, dimensione eccetera. 
Il problema è che queste proprietà sono ReadOnly, quindi non possono 
essere modificate se non con Font Dialog. 
Ma allora se devo salvare su disco le modifiche (se devo chiudere il 
programma) e poi devo riprenderle dal disco (se deve riaprire il 
programma), come faccio ad aggiornare quelle proprietà?
Christian

 essere modificate se non con Font Dialog.
Quindi parli di VB.net, perchè in VB6 possono essere modificate.
Sì, in Gdi+ devi creare un nuovo font da assegnare con le nuove 
caratteristiche.
Ciao 

 caratteristiche.
Si, 
vb.net
, mi sono dimenticato di specificarlo.
Non sono pratico di gdi+, sai dove approfondire l'argomento per 
risolvere il problema (guida in linea, link ecc.)?
Christian

 risolvere il problema (guida in linea, link ecc.)?
GDI+ significa System.Drawing.
Dove documentarsi... ovvio: 
http://msdn2.microsoft.com/en-us/library/ms310245.aspx
Poi basta l'intellisense per vedere cosa fare:
Me.Font = new Font(...
Ciao 

 Me.Font = new Font(...
Molto interessante, grazie.
Vedo che č possibile impostare grassetto, sottolineanto ecc., anche le 
dimensioni, ma non trovo il tipo di carattere.
Christian

 dimensioni, ma non trovo il tipo di carattere.
Ma come non trovi il tipo di carattere???
E' il primo parametro di uno dei veri overload: ad es. "Arial".
Ciao 

 E' il primo parametro di uno dei veri overload: ad es. "Arial".
Vero, non ho afferrato subito il concetto, una volta che ci sono 
riuscito mi č risultato chiaro.
La cosa sta procedendo, ho messo a posto il nome e la dimensione:
textbox1.Text = New Font (File.ReadLine, CSng(File.ReadLine),.......
Il primo File.ReadLine legge da disco il nome del font in formato 
String, il secondo legge la dimensione del font e lo trasforma in 
single.
Fin qui tutto bene, ora perň mi chiede di convertire i 4 String 
memorizzati (True o False) di grassetto, italico, sottolineato e barrato 
in System.Drawing.FontStyle e non ho idea di come fare la conversione.
C'č un modo per farlo?
Christian

 C'è un modo per farlo?
Beh, se hai i valori memorizzati come true/false il metodo è il classico:
If Grassetto Then
    MyFontStyle = MyFontStyle Or FontStyle.Bold
End if
...
Ciao 

Fabio says...

A questo ci avevo già pensato io, ma nel mio caso:
If CBool(File.ReadLine) Then
   TextBox1.Font.Style = FontStyle.Bold
End If
mi dice che la proprietà Style è ReadOnly.
Christian

 mi dice che la proprietà Style è ReadOnly.
No, non ci siamo capiti.
Come si diceva prima, NON puoi cambiare le proprietà di un font!
Devi creare un nuovo font con tutte le caratteristiche che ti servono.
La classe font ha mezzo migliaio di costruttori: scegli quello che fa al 
caso tuo.
Ciao 

 caso tuo.
Sinceramente non trovo nell'help il mezzo migliaio di costruttori, mi 
piacerebbe sapere dove sono.
Forse c'è una strada alternativa, ovvero indicare in una variabile quali 
tra bold, italic, strikeout ed underline sono stati scelti dall'utente e 
comportarmi di conseguenza con un if..then oppure Select Case.
Prima però vorrei capire dove sono, come sono e studiarmi per bene 
questo mezzo migliaio di costruttori per font.
Christian

 questo mezzo migliaio di costruttori per font.
Tutto questo e molto di piů sempre al solito posto: MSDN
http://msdn2.microsoft.com/en-us/library/ms310246.aspx
Ciao 

 stati che ti interessano con l'Or.
Mi sono studiato il FlagAttribute:
http://msdn2.microsoft.com/en-us/library/system.flagsattribute.aspx
ma non riesco ad utilizzarlo.
Quello che mi serve è inserire queste 16 combinazioni:
0= non scelto
1= scelto
primo numero: grassetto
secondo numero: italico
terzo numero: barrato
quarto numero: sottolineato
01-0000  -  normale
02-0001  -  sottolineato
03-0010  -  barrato
04-0011  -  barrato & sottolineato
05-0100  -  italico
06-0101  -  italico & sottolineato
07-0110  -  italico & barrato
08-0111  -  italico & barrato & sottolineato
09-1000  -  grassetto
10-1001  -  grassetto & sottolineato
11-1010  -  grassetto & barrato
12-1011  -  grassetto & barrato & sottolineato
13-1100  -  grassetto & italico
14-1101  -  grassetto & italico & sottolineato
15-1110  -  grassetto & italico & barrato
16-1111  -  grassetto & italico & barrato & sottolineato
La soluzione più semplice è un If...Then in scrittura ed un Select Case 
in lettura con le 16 opzioni, ma vorrei una soluzione migliore, come il 
FlagsAttribute, però l'ho letto e non ho capito come farlo funzionare.
Mi serve una mano per il FlagsAttribute.
Christian

 Mi serve una mano per il FlagsAttribute.
No, ti serve un manuale di programmazione :)
Ciao 

 No, ti serve un manuale di programmazione :)
No, mi serve capire.
Christian


Ragazzo, vediamo di capirci.
Che cavolo è <Flags()> Enum 
FontStyle????????????????????????????????????????????
FontStyle è definito in System.Drawing, e mi pare a quest'ora sarebbe dovuto 
essere chiaro.
Poi è chiaro che rimarrà sempre regular, dato che hai dato a tutti lo stesso 
valore (-1).
Butta via 'sta roba e usa il FontStile giusto e vedrai che funziona.
Poi, non mi interessa come ti salvi su disco i true o false, però immagino 
che li metterai in qualche variabile o comunque li leggerai da disco, quindi 
negli If testa questi e non le TextBox che non so cosa siano.
Ciao 

 negli If testa questi e non le TextBox che non so cosa siano.
Quelle erano solo per fare delle prove e cercare di capire meglio il 
FlagsAttribute.
Christian

 vuoti di conoscenza.
Fregatene del flagattribute, quando mai te ne ho parlato :)
Il codice funzionante te l'ho postato, se tu poi ci inventi sopra non so che 
farci.
Ciao

 Fregatene del flagattribute, quando mai te ne ho parlato :)
Quando mi hai detto:
"
Ti stai perdendo su una sciocchezza.
Flag attribute indica solo che una variabile di quel tipo di enumeratore 
può contere più valori contemporaneamente.
Io mi riferivo a FontStyle che è dichiarato come
<FlagsAttribute> _
Public Enumeration FontStyleProprio perchè un font può essere 
contemporaneamente ad es. sia bold che italic.
"
In ogni caso ho studiato ancora e forse ci sono arrivato:
Dim myFontStyle As System.Drawing.FontStyle = Drawing.FontStyle.Regular
If File.ReadLine = "True" Then
    myFontStyle = myFontStyle Or Drawing.FontStyle.Bold
End If
If File.ReadLine = "True" Then
    myFontStyle = myFontStyle Or Drawing.FontStyle.Italic
End If
If File.ReadLine = "True" Then
    myFontStyle = myFontStyle Or Drawing.FontStyle.Strikeout
End If
If File.ReadLine = "True" Then
    myFontStyle = myFontStyle Or Drawing.FontStyle.Underline
End If
TextBox1.Font = New Font(File.ReadLine, CSng(File.ReadLine), 
myFontStyle)
Di cui:
1° file.readline: legge se Bold è True o False
2° file.readline: legge se Italic è True o False
3° file.readline: legge se Strikeout è True o False
4° file.readline: legge se Underline è True o False
5° file.readline: legge qual'è il carattere scelto
6° file.readline: legge qual'è la dimensione del font scelto
Ci sono errori?
Christian


[cut]
Scusa Fabio, ho letto tutto il thread con interesse (non uso .Net ed ero 
curioso di vederne un po'), ma credo di essermi perso un passaggio...ha 
senso salvare i valori True o False degli attributi del font? Non fareste 
prima a salvare il valore del flag e via?
Cioe'...leggendo quanto scrivete, per salvare immagino che uno debba partire 
dal flag FontStyle e, a botte di OR, estrarne dei booleani da andare a 
scrivere, per poi rileggere i booleani e andare di nuovo a Or per 
reimpostare il flag. Perche'?

 reimpostare il flag. Perche'?
Non lo so :)
L'importante č che alla fine abbia almeno capito come funziona l'oggetto 
font.
Come si salva i dati č un altro discorso.
Ciao
-- 
Free .Net Reporting Tool - 
http://www.neodatatype.net
 

 font.
Si, l'ho capita.    :-P
Christian

 altra scelta.
Sě, ma puoi salvare la stringa su una sola riga cosě ad es.:
Arial, 14, 4
Dove Arial č il nome del font, 14 le dimensioni e 4 č un CInt() del flag 
FontStile.
Poi lo rileggi e fai
Dim s() As String = rigaLetta.Split(",")
nomeFont = s(0)
dimensioneFont = CDbl(s(1))
stileFont = CType(CInt(s(2)), FontStyle)
Sarebbe meglio anzichč CInt e CDbl usare Int32.TryParse e Double.TryParse, 
ma per semplificare va bene cosě.
Ciao 

 ...
Interessante alternativa, ma la vedo come una soluzione paritetica, 
dov'č il vantaggio?
Christian

Andate ivi e leggetene tutti:
http://tinyurl.com/jr6fq
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
http://tinyurl.com/jr6fq
il solito saitta, qui in versione eucaristica. ce n'e' uno cosi' anche nel 
gruppo dei labrador (e in ennemila gruppi in crosspost), quello e' proprio 
uno psicopatico. ma quando manca per una mezza giornata se ne sente la 
mancanza. quando ho dei dubbi sul mio equilibrio mentale, se non ci fosse 
gente come voi bisognerebbe inventarla. poco se mi considero, molto se mi 
confronto. fa sempre bene :P

 
http://tinyurl.com/jr6fq
Oh!
Ha aggiornato l'home page :)
Adesso è tutta bella colorata :P
Ciao