Autore Topic: [RISOLTO] Differenze fra testo disegnato e testo scritto  (Letto 5624 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #30 il: 03 Febbraio 2014, 22:08:16 »
procedendo empiricamente, nel tuo programma il rapporto per il font dovrebb essere 0.744

ovvero quando disegni sullo schermo il font che usi deve avere il size desiderato moltiplicato per  0.744

ti consiglio di creare la seguente funzione:


Codice: [Seleziona]
public sub ridimensiona(size as float)as float

   If Paint.Device = da Then
        Return size * 0.744
   Else
        Return size
   Endif


end

in questo modo nel modulo disegno per cambiare font darai

paint.font.size=ridimensiona(15)

così il programma cambierà automaticamente la dimensione del font nel caso tu stia stampando oppure disegnando a schermo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #31 il: 03 Febbraio 2014, 22:45:18 »
procedendo empiricamente, nel tuo programma il rapporto per il font dovrebb essere 0.744...
Questa è bella mentre io mi convinco che viste tutte le cose dette dovrò agire sul foglio e sul disegno ricalibrandoli tu ti convinci del contrario o eri già convinto e io ho capito tutto l'opposto. ???
Mi sento come quei cagnolini che cercano di morsicarsi la coda troppo corta :rolleyes:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #32 il: 03 Febbraio 2014, 22:59:00 »
Diciamo che si può sempre agire in diversi modi, nel tuo caso mi e sembrato piu semplice giocherellare con il font lasciando il resto invariato.
Facendo delle prove con il tuo software modificato tutto sembra funzionare correttamente ed il testo occupa il giusto spazio anche a monitor

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #33 il: 03 Febbraio 2014, 23:36:38 »
Diciamo che si può sempre agire in diversi modi, nel tuo caso mi e sembrato piu semplice giocherellare con il font lasciando il resto invariato.
Facendo delle prove con il tuo software modificato tutto sembra funzionare correttamente ed il testo occupa il giusto spazio anche a monitor

Guarda un po questo codice a me restituisce un foglio A4 esatto esatto, ma non ho idea del perché  ;)

Codice: [Seleziona]
' Gambas class file

'' Solita DrawingArea denominata da
Private fRatio As Float
Private fRatioS As Float
Private fRatioD As Float
Private Const MM_X_DOT As Float = 0.352778
Public Sub _new()

End

Public Sub Form_Open()
  fRatioS = CFloat(Screen.Width / Screen.Height)
  fRatioD = CFloat(Desktop.Width / Desktop.Height)
  fRatio = Frac((fRatioD + fRatioS) / 2)
  Me.H = 210 / MM_X_DOT / fRatio
  Me.W = 297 / MM_X_DOT / fRatio
  da.X = 0
  da.Y = 0
  da.H = Me.H
  da.W = Me.W
End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #34 il: 04 Febbraio 2014, 00:15:53 »
....a me restituisce un foglio A4 esatto esatto, ma non ho idea del perché  ;)

...secondo me, a questo punto, sta prendendo il sopravvento la ceskhonite !   :rotfl:


« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #35 il: 04 Febbraio 2014, 00:17:28 »
...secondo me, a questo punto, sta prendendo il sopravvento la ceskhonite !  

Che cosa è la  ceskhonite :)
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #36 il: 04 Febbraio 2014, 00:26:39 »

Che cosa è la  ceskhonite :)

Ti lascio il brivido della ricerca su questo forum !  ;D

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #37 il: 04 Febbraio 2014, 00:36:05 »
Ti lascio il brivido della ricerca su questo forum !  ;D

Si lo so ho scritto una cavolata ma sono alla frutta delle idee,   :rolleyes:  e anche se non faccio la ricerca posso immaginare

buonanotte  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #38 il: 06 Febbraio 2014, 23:25:48 »
Ho preso una piccola pausa di riflessione ma nel frattempo non sono stato con le mani in mano e grazie ai favolosi consigli di fsurfing penso di essere arrivato ad una più che soddisfacente risoluzione del problema.
Be a dire il vero mi è stato brillantemente risolto da fsurfing ma non bisogna dimenticare il fattivo stimolante aiuto di vuott, specialmente quando mi ha mandato l'ambulanza, il ricovero penso (o almeno spero) che mi abbia fatto bene. :)
In effetti in questa discussione ho inserito del codice che può nuocere gravemente alla salute mentale e me ne scuso.
A parte gli scherzi grazie davvero dei vari aiuti e consigli.
Però siccome al peggio non c'è mai fine insisto e vi propino la (mia?) soluzione.
Occorre fare una premessa all'inizio della terza pagina di questa discussione fsurfing mi consigliava già la soluzione: :-[

procedendo empiricamente, nel tuo programma il rapporto per il font dovrebb essere 0.744....
ti consiglio di creare la seguente funzione:
Codice: [Seleziona]
public sub ridimensiona(size as float)as float
   If Paint.Device = da Then
        Return size * 0.744
   Else
        Return size
   Endif
end
in questo modo nel modulo disegno per cambiare font darai
paint.font.size=ridimensiona(15)
così il programma cambierà automaticamente la dimensione del font nel caso tu stia stampando oppure disegnando a schermo

ma ai me io non l'ho capita subito e siccome sono di coccio anche dopo che mi sono reso conto che funzionava benissimo ho avuto bisogno di ulteriori delucidazioni e voi non ci crederete ma ho ancora delle domande da pormi e da porvi.

Comunque andiamo per ordine ho esemplificato “a modo mio” come ottenere un preciso riscontro fra il testo e il disegno mostrato a video, con quanto andremo poi a stampare.

Per il codice che segue ho tratto ispirazione dal codice mostrato negli esempi di Gambas – esempi di disegno.

Codice: [Seleziona]
' Gambas class file

'' Ho creato questo esempio come progetto grafico con l'aggiunta alla Main form (l.800x500 circa)di una DrawingArea nominata "da".
'' Una textbox1 e tre button Disegna, Stampa e Cancella.
'' Questo esempio è stato ispirato dall'esempio di disegno degli esempi di Ganbas.

Private fFontVideo As Float
Private fFontOrig As Float
'Private sFont As String
Private sTestoText As String
Private miaStampante As Printer
Private Const MM_X_PX As Float = 0.352778 'per mutare millimetri in pixel e viceversa
Private Const F_FSURFING_VIDEO As Float = 0.744 ' Per creare il giusto font a video :)
Private Const F_GAMBERETTO_STAMPA As Float = 1.3441 ' Per riportare il font alle giuste proporzioni :)


Public Sub _new()

End

Public Sub Form_Open()

  miaStampante = New Printer As "Stampa"   
  'Avrei voluto usare una fontbox ma non sono riuscito a capire come funziona
  'e allora accontentiamoci.
  sTestoText = "TO BE OR NOT TO BE: THAT IS THE QUESTION"
  fFontOrig = 26
  da.W = 210 / MM_X_PX
End

'' Non ho inserito questa bella funzione di fsurfing nel codice perchè mi confondevo durante il ciclo di ridimensionamento
'' ma occorre che ci ritorni su comunque la riporto per conoscenza.
'' Poi nel codice la si usa così: Paint.Font.size = ridimensiona(11)
 
''Public Sub ridimensiona(size As Float) As Float

'   If Paint.Device = da Then
'        Return size * 0.744
'   Else
'        Return size
'   Endif


''End




Public Sub Stampa_Draw()
 
  DisegnoX("Stampante")
 
End

'' Qui si sarebbe dovuta(?) usare la funzione Paint.Device al posto della string sDevice
'' ...ma le vecchie abitudini sono dure a morire.
Public Sub DisegnoX(sDevice As String)
 
  Dim fLarghezza, fAltezza As Float
  Dim fSpazInLarg, fSpazInAlt As Float
   
    Select Case sDevice
      Case "Video"
        da.Cached = True
        da.Clear       
        Paint.Begin(da)       
        'Paint.Scale(1.2, 1.2) '' Qui non ho capito bene se si può zoomare senza agire sui font!
      Case "Stampante"
        Paint.Begin(miaStampante)
      Case Else
        ' Avete idea di quale altro caso?
        Return
    End Select   
   
    'Spazi iniziali di 20 mm.
    fSpazInLarg = 20 / MM_X_PX
    fSpazInAlt = 20 / MM_X_PX
    fLarghezza = 150 / MM_X_PX
    fAltezza = 80 / MM_X_PX   
   
    Paint.Background = Color.Black     
    Paint.Rectangle(fSpazInLarg, fSpazInAlt, fLarghezza, fAltezza)
    Paint.Stroke(True)
    Paint.Save
    Paint.Clip   
    Paint.Font.Size = fFontVideo
    Print Paint.Font.Size   
    Print Paint.Font.TextWidth(sTestoText)
   
    'Qui inserisco un ciclo per ridurre la scritta e farla stare all'interno del rettangolo.   
    While Paint.Font.TextWidth(sTestoText) > fLarghezza
      Paint.Font.Size = Paint.Font.Size - 0.1
    Wend
    If sDevice = "Stampante" Then Paint.Font.Size = Round(Paint.Font.Size * F_GAMBERETTO_STAMPA, -2)
    Print Paint.Font.Size
    'Paint.Restore     
    Paint.Text(sTestoText, fSpazInLarg, fSpazInAlt + 50)
    Print sTestoText
    Paint.Fill(True)
    Paint.Restore   
    Paint.Font.Size = fFontVideo
    If sDevice = "Stampante" Then Paint.Font.Size = Round(Paint.Font.Size * F_GAMBERETTO_STAMPA, -2)
    Print Paint.Font.Size
    'Paint.Background = Color.Blue
    Paint.Text(sTestoText, fSpazInLarg, fSpazInAlt + 100)
    Paint.Fill
    Paint.End   
End





Public Sub Button3_Click()

  ' Invece di cancellare e basta ripristina la scritta di default
  ' altro trucco copiato ma non mi ricordo più da chi :)
  TextBox1.Text = "TO BE OR NOT TO BE: THAT IS THE QUESTION"

End



Public Sub Button1_Click() 
 
  fFontVideo = Round(fFontOrig * F_FSURFING_VIDEO, -2)
  Print fFontVideo
  'Disegna
  DisegnoX("Video")

End

Public Sub TextBox1_Change()

  sTestoText = TextBox1.Text

End

Public Sub Button2_Click()
'' Come giustamente ricorda fsurfing se vuoi risparmiare carta stampa le prove su file PDF.
   fFontVideo = Round(fFontOrig * F_FSURFING_VIDEO, -2)
   With miaStampante   
     If .Configure() Then Return 
    'Verticale
    .Orientation = 0   
    .PaperWidth = 210
    .PaperHeight = 297     
    '.OutputFile = "/home/gianluigi/ProvaGambas.pdf" ' vedi sotto!
        '' metti il tuo nome^                 
   
    .Resolution = 300 ' Desktop.Resolution  '200  '100     
    .FullPage = True 'parte da X0 e Y0 di paper   
    'Print .Resolution
  End With
 
  Me.Enabled = False
  Inc Application.Busy
  miaStampante.Print
  Dec Application.Busy
  Me.Enabled = True

End


Per quelli che come me sono poco istruiti riporto l'esemplificazione di come è stato ottenuto il fattore video fattami da fsurfing che è veramente chiara, io per mia maggiore comprensione ho inserito dei numeri che ho lasciato e messo fra parentesi:

Codice: [Seleziona]
''###################################codice di esempio####################################################
 
  Paint.Font.Name = "Ubuntu"
  Paint.Font.size = 11
 
  'sapento che un il testo "TESTOCORTO" IN UBUNTU 11  in stampa occupa 24mm in larghezza
  'procedo empiricamente costringendo il programma a diminuire il font finchè la larghezza corrisponde
  While Paint.Font.TextWidth("TESTOCORTO") > 24 / fMm_x_Dot ' (0.352778)
    Paint.Font.Size = Paint.Font.Size - 0.1
  Wend
  'uscendo da while il font avrà la dimensione corretta
  font_finale = Paint.Font.size
 
  'ora creo un equazione
  'dim_font_campione:font_finale=nuovo_font:x
 
  'quindi:
  'dim_font_campione/font_finale=nuovo_font/x
  '********* (11) **** (8.184) **(es.26)
  'ovvero
  'xr=nuovo_font*(font_finale/dim_font_campione)
  '
  'considerando
  r = font_finale / 11
  'e quindi
  'il font da usare per mostrare a video le giuste proporzioni va moltiplicato per r
  Message.Info("il rapporto per il video è: " & Chr(10) & Round(r, -4)) ' round serve per arrotondare
 
  '##################fine codice di esempio########################################################################################

Continuando con lo stesso ragionamento e udite udite si potrebbe quasi sostenere che è farina del mio sacco:
z = Round(11/8.184,-4)  che corrisponde a 1.3441 ora abbiamo anche il fattore che ci riporta un font proporzionato alla stampa e che serve come avete visto nell'esempio di codice quando dobbiamo rimpicciolire i caratteri per far rientrare la stringa in uno spazio più piccolo.

Bene io spero che questa discussione sia stata proficua, per me lo è stata moltissimo ho imparato diverse cose fra cui una molto confortevole che ci sono persone che si aiutano e questo fa sempre bene all'umore.

Comunque prima di mettere RISOLTO sarà meglio che attenda un attimino i vostri pareri e poi non vorreste rispondere alle ultime domande scusate? ;)  :ok:
« Ultima modifica: 10 Febbraio 2014, 17:05:07 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Differenze fra testo disegnato e testo scritto
« Risposta #39 il: 08 Febbraio 2014, 16:02:59 »
Allora visto che non ci sono nuove proposte ne consigli e nuove soluzioni credo di poterla chiudere qui. Con un RISOLTO fra parentesi all'inizio della discussione.  :D

Ne approfitto per ringraziare ancora fsurfing che senza il suo codice starei ancora dando le testate nel muro e vuott per l'appoggio e i consigli grazie di cuore e alla prossima.

 :ok:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Differenze fra testo disegnato e testo scritto
« Risposta #40 il: 10 Febbraio 2014, 17:15:36 »
 :-[
Ho corretto un (!?) errore nel codice che ho postato per ultimo come esempio finale era la prima riga che mancava sul Sub Button2_Click()   fFontVideo = Round(fFontOrig * F_FSURFING_VIDEO, -2)  senza questa riga di codice, se si passava prima dalla stampa che dal disegno, dava errore.
Chiedo scusa
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Differenze fra testo disegnato e testo scritto
« Risposta #41 il: 27 Maggio 2014, 23:21:58 »
Riprendo questa discussione perché quando l'ho postata ero ai miei primi passi in Gambas e non conoscevo altro che l'applicazione grafica gb.gui.
Come molti di voi sanno, anche perché sono sempre a battere su questo tasto, vi sono notevoli differenze di proporzione fra quello che si disegna e si scrive sia a video che su carta stampata.
In Gambas tanto con QT che con GTK le proporzioni video fra disegno e scritto (font) le si possono ottenere con il coefficiente di fsurfing e cioè riducendo il font moltiplicandolo per 0.744.
Quando si deve stampare basta riportarlo al formato originale. Però questo funziona con tutte le risoluzioni solo con librerie GTK+.
QT invece varia tantissimo le misure del disegno (non delle scritte) che si rimpicciolisce mano a mano che si aumenta la risoluzione.
Perché QT rimanga proporzionato occorre dare 72 DPI di risoluzione come già detto in altro post.
Pare comunque che Gambas non tenga conto della risoluzione pertanto stampando in Gambas a 50 DPI o a 2400, otterremmo comunque la stessa stampa ne più ne meno.
Potete verificare quanto detto da queste due piccole applicazioni allegate che si rifanno a quanto postato qui all'inizio e cioè la scritta TESTOCORTO in riquadro giallo.

 :ciao:
« Ultima modifica: 28 Maggio 2014, 09:48:58 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro