Salve, vorrei sapere come é possibile, utilizzando l' overload del metodo drawstring, dare un font diverso a più parti del testo nella stessa pagina. Grazie
Salve, vorrei sapere come é possibile, utilizzando l' overload del metodo drawstring, dare un font diverso a più parti del testo nella stessa pagina. Grazie
Forse é necessario che mi spieghi meglio:
sono nell'evento PrintPage che si scatena nel momento in cui viene invocato l'evento print. Qui invoco il metodo e.graphics.drawstring(...) per scrivere il testo con il font, le coordinate etc.. Se a questo punto voglio dare nella stessa riga 2 tipi di font diversi, come faccio? Grazie
Credo che l'overload non c'entri molto in questo caso.
Purtroppo sviluppo in Delphi e quindi non sono sicuro di fornire buon codice a livello di VB, tuttavia provo a dettagliare il concetto in modo discorsivo.
Il metodo Graphics.DrawString, nelle sue tante "salse", accetta come parametro anche il Font da utilizzare per la resa grafica del testo.
Per modificare il font utilizzato nella scrittura del testo, devi creare un'istanza dell'oggetto Font usando il nome del carattere, la dimensione e gli stili che preferisci, passandolo poi al metodo DrawString che utilizza tale font per la stampa (in questo caso), l'output a video e altro ancora.
Un esempio per chiarire (non verificato):
Ogni volta che desideri cambiare carattere, devi creare un nuovo oggetto Font per passarlo poi come parametro al metodo DrawString. Il Garbage Collector fornito dal framework si occuperà, alla fine del processo, di distruggere gli oggetti creati.codice:Dim arialFont As System.Drawing.Font arialFont = New System.Drawing.Font("Arial", 96, FontStyle.Regular) e.Graphics.DrawString("testo", arialFont, textBrush, textPosition)
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Scusami ma se vai col cursore su drawstring nel codice il tip ti dice:
Public Overloads Sub Drawstring(...)
quindi non mi pare proprio che non c'entri niente con l'overload.
Inoltre non mi sembra che tu abbia risposto alla domanda, infatti quel codice che tu hai proposto lo uso anch'io ma la mia necessità é di dare una formattazione diversa a varie parti della stessa riga.
L'overload consente al programmatore di creare differenti versioni di un metodo; nel tuo caso, non devi fare l'overload di alcun metodo (è già stato fatto dal creatore della libreria) ma semplicemente utilizzare la versione dello stesso che coincide con l'insieme dei parametri che devi specificare.Originariamente inviato da stellinaxxx
quindi non mi pare proprio che non c'entri niente con l'overload.
La domanda non era espressa molto chiaramente: nel primo messaggio si parla di pagina, poi si parla di riga...Originariamente inviato da stellinaxxx
Inoltre non mi sembra che tu abbia risposto alla domanda, infatti quel codice che tu hai proposto lo uso anch'io ma la mia necessità é di dare una formattazione diversa a varie parti della stessa riga.
Ad ogni modo, non esiste un concetto di riga già predefinito, poichè quando si scrive il testo attraverso DrawString si specificano esattamente le coordinate in cui questo deve apparire; pertanto, basta determinare la posizione del testo con il font A, tracciarlo, calcolare la posizione del testo con il font B, creandolo come indicato prima, e tracciare quest'ultimo.
Se non sbaglio, sei tu a dover definire la posizione del testo, pertanto è sufficiente che tu cambi la coordinata X in modo opportuno, ad esempio, per scrivere il testo col nuovo font spostandolo della giusta misura dalla parte di testo che lo precede.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Anzitutto visto che ho dimenticato di farlo prima ti ringrazio per l'aiuto che mi stai dando.
Detto concretamente se io ho invocato un metodo Print che a sua volta ha scatenato un evento PrintPage, invocando nel suddetto evento il metodo drawstring, come faccio ad avere la coordinata che mi dice in che punto esatto finisce la prima parte della stringa, in modo da invocare di nuovo il metodo drawstring ma con la coordinata che mi dia come punto iniziale il punto finale della stringa precedente? Spero di essere stata chiaraGrazie
La coordinata non ce l'hai...sei tu a doverla definire.Originariamente inviato da stellinaxxx
Detto concretamente se io ho invocato un metodo Print che a sua volta ha scatenato un evento PrintPage, invocando nel suddetto evento il metodo drawstring, come faccio ad avere la coordinata che mi dice in che punto esatto finisce la prima parte della stringa, in modo da invocare di nuovo il metodo drawstring ma con la coordinata che mi dia come punto iniziale il punto finale della stringa precedente?
Hai una parte di codice già scritta per mostrarti quello che intendo?
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Cerco di essere più chiara possibile:
Concentriamoci sull'evento PrintPage che si scatena invocando il metodo Print.
Nell'ambito di tale evento si "disegna" il testo che si vuole mandare in output:
e.graphics.drawstring(PrimaParteStringa,ArialFont, x,y)
e fino a qui tutto bene, adesso voglio scrivere la seconda parte della stringa con un'altro font concatenandola alla prima parte della stringa:
e.graphics.drawstring(SecondaParteStringa, CourierFont,???,???)
Insomma come faccio a ricavare il punto esatto in cui la PrimaParteStringa é terminata?Grazie
Azzardo una possibilità:
e.graphics.drawstring(SecondaParteStringa,CourierF ont,x,Len(PrimaParteStringa)+y)
Può essere giusto????
La possibilità che ho azzardato é una stupidaggine perchè dovrei ricavare la lunghezza in pixel della prima parte della stringa, ma come si fa a ricavare la lunghezza in pixel di una stringa???