Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 31 Gennaio 2014, 22:12:15

Titolo: [RISOLTO] Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 31 Gennaio 2014, 22:12:15
Sono un nuovo utente entusiasta (nuovo solo per dire avendo ai me superato la sessantina) di Linux  e di Gambas che trovo fantastici. Mi scuso anticipatamente se il tema in oggetto è stato già trattato ma io non sono stato capace di scovarlo.
Lavoro con:
[System]
Gambas=3.5.90
OperatingSystem=Linux
Kernel=3.11.0-15-generic
Architecture=x86_64
Distribution=Ubuntu 13.10
Desktop=GNOME
Theme=QGtk
Language=it_IT.UTF-8
Memory=15978M

[Libraries]
Cairo=libcairo.so.2.11200.16
Curl=libcurl.so.4.3.0
DBus=libdbus-1.so.3.7.4
GStreamer=libgstreamer-0.10.so.0.30.0
GStreamer=libgstreamer-1.0.so.0.200.0
GTK+3=libgtk-3.so.0.800.6
GTK+=libgtk-x11-2.0.so.0.2400.20
OpenGL=libGL.so.1.2.0
Poppler=libpoppler.so.43.0.0
Qt4=libQtCore.so.4.8.4
SDL=libSDL-1.2.so.0.11.4

[SVN]
3.5.99.1+svn20140131+build18~ubuntu13.10.1

Ho avuto conoscenza in Windows con VBA su VBE e li la stampa era gestita in automatico, quindi per me disegnare testo per la stampante è una nuova esperienza.

Problema:
non riesco a far combaciare le misure del testo disegnato sulla DrawingArea con le misure stampate su foglio.
Se io stampo la stringa “TESTOCORTO” con carattere “Ubuntu” 11 otterrò un testo di circa  millimetri 3 in altezza per 24,5 di lunghezza qualunque software io usi per scrivere.
Perché invece Gambas mi da misure diverse?
Per esemplificare quanto chiedo ho creato un programmino il cui codice allego, è un progetto grafico con una DrawingArea denominata “da” su cui il codice disegna per poi mandare alla stampa (metodo commentato per evitare sprechi di carta) la scritta “TESTOCORTO” che viene riquadrata sulla base delle misure fornite da Paint.Font.TestWidth e Paint.Font.TextHeight e poi disegna anche un riquadro giallo che è quello delle misure giuste usate dalla stampante.
Cosa sbaglio? Cosa non ho capito? Dove posso avere una risposta elementare adeguata alla mia bassa conoscenza della programmazione?
Tante grazie anticipate a chiunque vorrà aiutarmi.
Gianluigi
Codice: [Seleziona]
' Gambas class file

'' Ho creato questo esempio come progetto grafico con l'aggiunta alla Main form di una DrawingArea nominata "da".

Private miaStampante As Printer
Private Const MM_X_PX As Float = 0.3527 'per mutare millimetri in pixel e viceversa

Public Sub _new()

End

Public Sub Form_Open()

  miaStampante = New Printer As "Stampa"
  ' mie misure arbitrarie.
  Me.W = 600
  Me.H = 450
  da.Left = 0
  da.Top = 0
  da.W = 550
  da.H = 400
  da.Background = Color.White
  ' Crea subito il disegno e la stampa
  StampoSu("Video")
  'Stampare()
End

Public Sub Stampare()
  
  With miaStampante  
    'Verticale
    .Orientation = 0    
    ' A4 orizzontale
     '.Orientation = 1
    '.PaperWidth = 297
    '.PaperHeight = 210
    .Resolution = Desktop.Resolution '300      
    .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


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

Public Sub StampoSu(sDevice As String)
  
  Dim iH, iW As Integer
  Dim fSpazInLarg, fSpazInAlt, fLargRet, fAltRet As Float
  Dim sTesto As String
  Dim fTratteggio As Float[] = [3.0, 2.0]
                          
    
    Select Case sDevice
      Case "Video"
        da.Cached = True
        da.Clear        
        Paint.Begin(da)
        'Paint.Scale(2, 2)
      Case "Stampante"
        Paint.Begin(miaStampante)
      Case Else
        Return
    End Select    
    'Spazi iniziali di 20 mm.
    fSpazInLarg = 20 / MM_X_PX
    fSpazInAlt = 20 / MM_X_PX
    Paint.Background = Color.Black
    Paint.Save
    'Disegna testo
    'Paint.Font.Name = "Sans Serif"
    Paint.Font.Name = "Ubuntu"
    Paint.Font.Size = "11"    
    'Paint.Font.Bold = True
    sTesto = "TESTOCORTO"          
    iW = Paint.Font.TextWidth(sTesto)
    iH = Paint.Font.TextHeight(sTesto)
    Print Paint.Font.Size
    Print Paint.Font.Name
    Print "H testo = " & iH
    Print "L teso = " & iW                  
    Paint.DrawText(sTesto, fSpazInLarg, fSpazInAlt, 1, 1, 17) '35 = bottom; 33 = BottomLeft; 32 = BottomNormal; 17 = TopLeft    
    Paint.Restore
    ' Disegna rettangolo  
    fLargRet = CFloat(iW)
    fAltRet = CFloat(iH)
    Paint.LineWidth = 0.5    
    'Paint.Background = Color.Black      
    Paint.Rectangle(fSpazInLarg, fSpazInAlt, fLargRet, fAltRet)
    Paint.Stroke(True)
    Paint.Clip      
    ' Visualizza a schermo (rettangolo giallo) l'ingombro reale della scritta sul foglio stampato.
    fLargRet = 24.5 / MM_X_PX
    fAltRet = 3 / MM_X_PX
    Paint.Rectangle(fSpazInLarg, fSpazInAlt + (1 / MM_X_PX), fLargRet, fAltRet)
    Paint.Background = Color.RGB(255, 218, 90, 0)
    Paint.Dash = fTratteggio
    Paint.Stroke(True)
    Paint.Background = Color.RGB(255, 218, 90, 180)
    Paint.Fill
    Paint.End
  
End
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 01 Febbraio 2014, 01:45:05
Se io stampo la stringa “TESTOCORTO” con carattere “Ubuntu” 11 otterrò un testo di circa  millimetri 3 in altezza per 24,5 di lunghezza qualunque software io usi per scrivere.
Perché invece Gambas mi da misure diverse?

Complimenti innanzitutto per il codice che hai scritto.

Ho provato la stampa con questo tuo codice, e devo dire che ho avuto (dunque con Gambas) una stampa perfettamente coerente con le misure da te indicate ed ottenute con altri software.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 01 Febbraio 2014, 17:27:34
Ringrazio Vuott e se ho compreso bene,anche a te (posso dare del tu?) Gambas da misure diverse fra video e stampa.
L'unica cosa che mi è venuta in mente per far combaciare le due cose è inserire dei fattori di compensazione.
A questo scopo aggiungo il codice sottostante che mi è costato un po di carta.
Rimane il fatto che mi sembra impossibile che questo approccio sia corretto.
Sono andato a guardare in CAIRO ma onestamente non ho capito un tubo.
A parte che il mio inglese è ridicolo (approfitto per ringraziare il traduttore di Google) io il C non lo so e no mi ci metto neppure a provare in quanto i miei studi si sono fermati alle elementari anche se posso “vantare” una licenza media.
Ci dovrà pur essere un modo corretto per mostrare a video ciò che si andrà a stampare! :rolleyes:  :hard:

Codice: [Seleziona]
' Gambas class file

'' Ho creato questo esempio come progetto grafico con l'aggiunta alla Main form di una DrawingArea nominata "da".

'' Questa è la seconda parte di codice che attraverso alcune aggiustature riesce a ottenere misure abbastanza
'' simili al reale.
'' Vale a dire quanto stampato e quanto visto a video sono simili nelle misure reali pur non perfettamente uguali.
 

Private miaStampante As Printer
Private iH As Integer
Private iW As Integer
Private Const MM_X_PX As Float = 0.3527 'per mutare millimetri in pixel e viceversa

Public Sub _new()

End

Public Sub Form_Open()

  miaStampante = New Printer As "Stampa"
  ' mie misure arbitrarie.
  Me.W = 600
  Me.H = 450
  da.Left = 0
  da.Top = 0
  da.W = 550
  da.H = 400
  da.Background = Color.White
  ' Crea subito il disegno e la stampa
  StampoSu("Video")
  'Stampare()
End

Public Sub Stampare()
 
  With miaStampante   
    'Verticale
    .Orientation = 0   
    ' A4 orizzontale
     '.Orientation = 1
    '.PaperWidth = 297
    '.PaperHeight = 210
    .Resolution = Desktop.Resolution '300       
    .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


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

Public Sub StampoSu(sDevice As String)
 
  'Dim iH, iW As Integer
  Dim fSpazInLarg, fSpazInAlt, fLargRet, fAltRet As Float
  Dim sTesto As String
  Dim fTratteggio As Float[] = [3.0, 2.0]
                           
   
    Select Case sDevice
      Case "Video"
        da.Cached = True
        da.Clear       
        Paint.Begin(da)
        'Paint.Scale(2, 2)
      Case "Stampante"
        Paint.Begin(miaStampante)
      Case Else
        Return
    End Select   
    'Spazi iniziali di 20 mm.
    fSpazInLarg = 20 / MM_X_PX
    fSpazInAlt = 20 / MM_X_PX
    Paint.Background = Color.Black   
    'Disegna testo
    'Paint.Font.Name = "Serif"
    'Paint.Font.Name = "Sans Serif"
    Paint.Font.Name = "Ubuntu"
    Paint.Font.Size = 12
    'Paint.Font.Bold = True
    sTesto = "TESTOCORTO"
    'sTesto = "questocorto"
    'sTesto = "QUESTOCORTO"               
    If sDevice = "Video" Then
      ' Riduce il font per renderlo sinile a quello stampato
      ' Memorizza altezza e larghezza del rettangolo di confronto
      ' che a video sembrerebbe sempre perfetto mentre stampato no.         
      Paint.Font.Size *= 73 / 100
      iW = Paint.Font.TextWidth(sTesto)
      iH = Paint.Font.TextHeight(sTesto)       
    Endif
   
    Print iH * MM_X_PX
    Print iW * MM_X_PX
                     
    Paint.DrawText(sTesto, fSpazInLarg, fSpazInAlt, 1, 1, 17) '35 = bottom; 33 = BottomLeft; 32 = BottomNormal; 17 = TopLeft   
   
    ' Disegna rettangolo del formato della scritta (quasi) senza differenze tra video e foglio stampato.
    fLargRet = CFloat(iW)
    fAltRet = CFloat(iH)
    Paint.LineWidth = 0.5   
    ' Ho tenuto conto dei tratti discendenti dei caratteri tipo la g minuscola la q sia minuscola che maiuscola ecc.
    ' per lasciare lo spazio inferiore. 
    If sDevice = "Video" Then
      Paint.Rectangle(fSpazInLarg, fSpazInAlt + (fAltRet * 16 / 100), fLargRet, fAltRet * 82 / 100)
    Else
      If CInt(Paint.Font.Size) Mod 2 = 1 Then
        Paint.Rectangle(fSpazInLarg, fSpazInAlt + (fAltRet * 16 / 100), fLargRet + (fLargRet * 6 / 100), fAltRet * 82 / 100)
        Print "DISPARI"
        Print Paint.Font.Size
      Else
        Paint.Rectangle(fSpazInLarg, fSpazInAlt + (fAltRet * 16 / 100), fLargRet + (fLargRet * 2 / 100), fAltRet * 82 / 100)
        Print "ELSE"
      Endif
       
    Endif
   
    Paint.Stroke 
    Paint.End
   
End
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 01 Febbraio 2014, 17:47:16
Video e stampa non possono essere uguali, questo perché risoluzioni hanno risoluzioni differenti.
Devi per forza usare una compensazione che varierà in base alla risoluzione di stampa
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 01 Febbraio 2014, 20:21:42
Ringrazio fsurfing per la risposta, ma evidentemente o non riesco a spiegarmi o non riesco a capire.
Non capisco il perché  se una parola scritta in un dato formato di font sta per esempio 10 volte in un dato rettangolo perché a video ci sta solo (per dire) 6 volte? Perché il rettangolo a prescindere dalla risoluzione è effettivamente del formato impostato e se richiedo quanto è alto e largo ottengo le giuste misure e invece per le stringhe no? Non sono entrambi soggetti alla stessa risoluzione? Oppure intendi che il rettangolo non è soggetto alla risoluzione mentre la scritta si? Se è così dove posso studiarmi queste robe qui.
Inoltre quando stampo le stringhe a prescindere dalla risoluzione e dal software per quel tipo di “size e name” e di grandezza pagina otterrò sempre le stesse misure e lo stesso numero di righe per pagina. ???
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 01 Febbraio 2014, 20:29:05
Ringrazio Vuott e se ho compreso bene,anche a te (posso dare del tu?) Gambas da misure diverse fra video e stampa.


Voglio precisare che il risultato della stampa ha dato un testo avente dimensione circa  millimetri 3 in altezza per 24,5 di lunghezza.
Non ho fatto, però, un confronto fra testo mostrato sullo schermo e quello stampato su carta.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 01 Febbraio 2014, 20:48:06
Ho ripetuto ora la stampa, e l'ho confrontata con le dimensioni del testo mostrato sullo schermo: il testo stampato su carta risulta un po' più grande.
Anche a me è successa una cosa di questo genere, e - come già detto da fsurfing - devi effettuare delle correzioni.


Questa è la seconda parte di codice che attraverso alcune aggiustature riesce a ottenere misure abbastanza simili al reale.
A me invece stampa il rettangolo un pochino più grande di quello che vedo nello schermo, ed il testo molto più grande di quello sullo schermo.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 01 Febbraio 2014, 20:49:09
 :-[
Scusate ma credo occorra una precisazione quando scrivo “altro software” io non intendo un altro software per programmare ma per esempio scrivendo con Libre Office o Scribus o Inkscape.
Per programmare io uso e userò solo il sublime Gambas che mi avanza e cresce.
Faccio presente che ho cancellato Windows 7 Professional e da ora in poi userò solo Linux e nient'altro che Linux amen.
Devo imparare tante di quelle cose che non posso essere distratto da nulla che non sia Gambas in Linux.
A proposito per studiare ho fatto delle traduzioni(acce) di alcuni capitoli di A Beginner's Guide to Gambas – Revised Edition, e qualcosa ho trovato già in internet. In particolare ho tradotto il capitolo sui DB se interessa posso inviarlo.
Ciao a tutti.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 01 Febbraio 2014, 21:00:00

Questa è la seconda parte di codice che attraverso alcune aggiustature riesce a ottenere misure abbastanza simili al reale.
A me invece stampa il rettangolo un pochino più grande di quello che vedo nello schermo, ed il testo molto più grande di quello sullo schermo.
[/quote]

Intendi dire che la scritta trasborda il rettangolo?
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 01 Febbraio 2014, 21:03:29
Scusate ma credo occorra una precisazione quando scrivo “altro software” io non intendo un altro software per programmare ma per esempio scrivendo con Libre Office o Scribus o Inkscape.

Sì, questo io l'avevo capito.


Intendi dire che la scritta trasborda il rettangolo?
Sì, ma solo in lunghezza, e per circa 7 millimetri.

A proposito per studiare ho fatto delle traduzioni(acce) di alcuni capitoli di A Beginner's Guide to Gambas – Revised Edition, e qualcosa ho trovato già in internet. In particolare ho tradotto il capitolo sui DB se interessa posso inviarlo.

Non abbiamo nella WIKI traduzioni da altri testi.
Forse potresti creare una discussione ad hoc qui nel forum, ed allegarvi il file compresso della tua traduzione. Io penso, però, che sarebbe opportuno consultare ed attendere il parere degli Amministratori del forum, soprattutto in ordine - se debbano applicarsi - alle norme del diritto d'autore in riferimento alle traduzioni.  :-\
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 01 Febbraio 2014, 21:29:20

Sì, ma solo in lunghezza, e per circa 7 millimetri.

Non abbiamo nella WIKI traduzioni da altri testi.
Forse potresti creare una discussione ad hoc qui nel forum, ed allegarvi il file compresso della tua traduzione. Io penso, però, che sarebbe opportuno consultare ed attendere...

Per l'ultima parte ti ringrazio del consiglio, aspetterò. Iinvece per quanto riguarda i 7 millimetri mi mandi nello sconforto, cosa mi consigli di fare dove posso trovare una guida che mi possa aiutare a comprendere l'arcano, sempre che io sia in grado di capire. :'(
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 01 Febbraio 2014, 23:36:59
.... per quanto riguarda i 7 millimetri mi mandi nello sconforto, cosa mi consigli di fare

A me è capitato una volta questo tuo problema, ed effettivamente è un vero fastidio !
Io ho cercato di ottenere la corripondenza delle dimensioni dei caratteri fra schermo e stampato, calibrando i valori (dando, cioè, valori leggermenti diversi) della proprietà Paint.Font.Size nel codice afferente alla stampa ed in quello alla DrawingArea.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 02 Febbraio 2014, 01:31:36
Se usi i metodi draw per stampare e disegnare sicuramente avrai una migliore corrispondenza.
usando invece i metodi paint entrano in goco altre considerazioni dovute alle matrix che complicano un bel po il tutto.

se hai gambas > 3.2 prova a stampare con i metodi draw,
i in quel modo non jo mai avuto problemi
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 02 Febbraio 2014, 01:56:25
Se usi i metodi draw per stampare e disegnare sicuramente avrai una migliore corrispondenza.
usando invece i metodi paint entrano in goco altre considerazioni dovute alle matrix che complicano un bel po il tutto.


Suggerimento molto interessante. Ma, poiché Gianluigi ha installato Gambas=3.5.90, forse avrà qualche problema  :-\ , visto che la documentazione della Class Draw dice che:
"The Draw class is deprecated since Gambas 3.4. It is now emulated through the Paint class".


Ad ogni modo, ho provato entrambi i codici di Gianluigi con la Classe Draw, ma non ho avuto miglioramenti.  :-\
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 02 Febbraio 2014, 13:48:53
comunque l' argomento è molto interessante,

io per ottenere una stampa "precisa" al millimetro per quanto rigurada le linee , quadrati ed una precisione quasi millimetrica per il testo ho usato il codice che allego all' esempio.

ps per non sprecare carta si stampa su pdf :)
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 02 Febbraio 2014, 15:25:03
io per ottenere una stampa "precisa" al millimetro ... esempio.

Grazie molte per l'esempio che ora vado a studiare, poi mi faccio vivo  :D

ps per non sprecare carta si stampa su pdf :)

E ancora grazie per il suggerimento :D
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 02 Febbraio 2014, 16:51:42
io per ottenere una stampa "precisa" al millimetro

Sì, ho provato il tuo codice, e la precisione - seppur in modo proporzionale tra visibile e stampato - è confermata.
Ho notato, comunque, che hai usato la Classe Paint, non la Draw.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 02 Febbraio 2014, 16:56:09
be del resto come hai detto tu gambas3 simula la classe draw tramite paint , percui tanto vale usare paint :)
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 02 Febbraio 2014, 17:01:42
...già !   :-X
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 02 Febbraio 2014, 18:38:21
Sì, ho provato il tuo codice, e la precisione - seppur in modo proporzionale tra visibile e stampato...

Ad ogni modo, mi viene in mente che - se non erro - Gianluigi non aveva posto la questione delle dimensioni in termini di "proporzione" (fra schermo e stampato), bensì in termini assoluti.

Sbaglio ?  ???
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 02 Febbraio 2014, 18:45:10

Ad ogni modo, mi viene in mente che - se non erro - Gianluigi non aveva posto la questione delle dimensioni in termini di "proporzione" (fra schermo e stampato), bensì in termini assoluti.

Sbaglio ?  ???

No non sbagli :ok:
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 02 Febbraio 2014, 19:44:07
invece si perchè sia nella stampa che sullo schermo lo spazio occupato dal testo e dal rettangolo con il bordo nero è identico a quello occupato dal rettangolo giallo .

parlare di termini assuluti non ha assolutamente senso quando si stampa ciò che si ha sul monitor , perchè sia le risuluzioni che le dimensioni dei pixel sono differenti ,

l acosa strana di gambas è che il testo non segue le stesse proporzioni della parte grafica, quindi bisogna giocherellare con le dimensioni tra una modalità e l' altra
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 02 Febbraio 2014, 20:14:44
invece si...
la cosa strana di gambas è che il testo non segue le stesse proporzioni della parte grafica, quindi bisogna giocherellare con le dimensioni tra una modalità e l' altra

Allora è certo che la parte testo non segue le stesse regole della parte disegno?
Vuoi dire che il foglio fustellato funziona anche a te con tutte le differenti risoluzioni?
Però ci sarà un modo "universale" per trattare pure il testo es. 0,3527 del rapporto mm. px, magari a seconda della risoluzione video?
E' questo che intendi ???
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 02 Febbraio 2014, 20:32:59
la risoluzione video è sempre uguale ovvero 85 dpi,

quello che cambia è la risoluzione di stampa è la dimensione del tuo foglio "virtuale"

facciamo un esempio semplice,

se stampi a 200 dpi  dovresti avere il tuo foglio virtuale di circa 1653 x 2338

quindi dividendo la dimensione del foglio reale per il foglio virtuale ottieni il rapporto tra un pixel del tuo schermo ed un pixel del  foglio

se cambi valore di risoluzione o di dimensione il rapporto cambierà e quindi devi tenerne conto.

purtroppo il testo segue altri parametri

ps: il tuo programma a risoluzioni diverse stampa in modo diverso perchè il rapporto fMm_x_Dot è fisso
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 02 Febbraio 2014, 20:45:33
la risoluzione video è sempre uguale ovvero 85 dpi,
quello che cambia è la risoluzione di stampa è la dimensione del tuo foglio "virtuale"...
ps: il tuo programma a risoluzioni diverse stampa in modo diverso perchè il rapporto fMm_x_Dot è fisso

Scusa ma a me la stampante stampa sempre uguale sia con risoluzione a 100 che a 600 ecc. ??? :rolleyes:

Aiuto!
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 02 Febbraio 2014, 21:11:28
la risoluzione video è sempre uguale ovvero 85 dpi,
quello che cambia è la risoluzione di stampa è la dimensione del tuo foglio "virtuale"...
ps: il tuo programma a risoluzioni diverse stampa in modo diverso perchè il rapporto fMm_x_Dot è fisso

 :-[
Scusa ma si vede che oggi proprio non ci sto con la testa.
Nella mail non ti ho scritto che misure di foglio reale io provavo:
Orizzontale - A4 - Larghezza et. 38,1 - Altezza et. 63,5 - 7 etichette per riga - 3 per colonna -Spazio iniz. 14,8 in larghezza - 6,8 in altezza - Spazio fra et. 0 in larghezza - 3 in altezza.

scusa e ciao

Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 02 Febbraio 2014, 21:26:31
scusa tu  ;D

come al solito stavo facendo troppe cose contemporaneamente, ho provato con calma, il tuop codice va benissimo!!!!!!!!
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 03 Febbraio 2014, 10:08:10
... sia nella stampa che sullo schermo lo spazio occupato dal testo e dal rettangolo con il bordo nero è identico a quello occupato dal rettangolo giallo .


Ho ripetuto con ottica diversa la stampa (su file .pdf) del primo codice, allegato da Gianluigi, e più precisamente verifico che fra quanto riportato dal video e dal file:
* il rettangolo giallo non coincide con il rettangolo principale dal bordo nero;
* il testo è identico nell'altezza, ma nel file .pdf la lunghezza complessiva del testo è minore, seppur di poco, rispetto a quella del testo nel video.


Riguardo al secondo codice constato che il testo visibile sullo schermo possiede un'altezza ed una lunghezza minori rispetto a quelle del file .pdf .

Comunque  l'esempio allegato da fsurfing è un ottimo riferimento da seguire.
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 03 Febbraio 2014, 11:27:41
Ho provato il tuo applicativo, che mi hai invato in privato, e mi sembra che funzioni bene.  :-\
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 03 Febbraio 2014, 21:10:52
Ho provato il tuo applicativo, che mi hai invato in privato, e mi sembra che funzioni bene. 

Grazie ma se funzionasse non sarei a...  ;) rompere

Piuttosto vorrei fare il punto della situazione e cioè ricapitolare quanto fino ad ora è emerso:

Che inserendo disegni con misure in millimetri, attraverso un fattore, ottenevo dalla stampante,  misure precise al decimo di millimetro qualunque risoluzione di stampa io usassi.
Che se inserivo del testo dentro i disegni quest'ultimo appariva a video sproporzionato rispetto al disegno salvo poi essere stampato di giusta misura se lasciato uguale, oppure molto più piccolo se ridotto per rientrare nel disegno stesso.
Subito ho pensato fosse colpa del font e ho cercato di scalarlo sul disegno.
Ma credo, anche sulla base di quanto fsurfing ha detto e mostrato attraverso il suo codice e anche ribadito da te, che io debba concentrarmi sullo scalare o meglio aumentare le proporzioni del disegno.
Anche perché se apriamo LibreOffice con zoom 100% e scriviamo una parola, la stampiamo e quindi sovrapponiamo il foglio A4 al monitor vediamo l'esatta corrispondenza fra stampa e video, corrisponde tutto sia foglio che scritta!
Se invece stampo il foglio fustellato l'unica cosa che corrisponde è la scritta dei numeri il resto è molto più piccolo, ma basta fare una semplice prova empirica senza bisogno di stampare, si conforma una drawingarea sfondo bianco a .W 297 / 0.3527 e .H 210 / 0.3527 avendo il form che la possa contenere (bastano uguali misure) e poi sovrapporre il foglio A4.
Quindi è chiaro che occorre trovare il rapporto tra la risoluzione video lo screen e la risoluzione stampa, ma la vedo dura per uno con studi matematici elementari come il sottoscritto.  :-\
Comunque un passo avanti, grazie a voi l'ho fatto, speriamo bene.
Salutoni :ciao:
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 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
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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:
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: fsurfing - 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
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 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:


(http://www.federazionesanita.confcooperative.it/PublishingImages/autoambulanza.jpg)
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 04 Febbraio 2014, 00:17:28
...secondo me, a questo punto, sta prendendo il sopravvento la ceskhonite !  

Che cosa è la  ceskhonite :)
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: vuott - 04 Febbraio 2014, 00:26:39

Che cosa è la  ceskhonite :)

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

Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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:
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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:
Titolo: Re: Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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:
Titolo: Re: [RISOLTO] Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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
Titolo: Re: [RISOLTO] Differenze fra testo disegnato e testo scritto
Inserito da: Gianluigi - 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 (http://www.gambas-it.org/smf/index.php?topic=3410.msg32872#msg32872).
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: