Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - leggere i valori di crenatura da file TTF
Forum - Visual Basic 6 - leggere i valori di crenatura da file TTF

Avatar
enzolone (Normal User)
Newbie


Messaggi: 6
Iscritto: 03/05/2010

Segnala al moderatore
Postato alle 12:33
Lunedì, 03/05/2010
Hello,
sto sviluppando un programma per la gestione dei fonts.
ho bisogno di conoscere i valori di crenatura (kerning ) per ogni file
TTf
Qualcuno conosce la funzione GETKERNINGPAIRS e come farla funzionare
io ci ho provato ma non va, se qualcuno riesce a farmi un esempio in VB6
di come fare  la chiamata e ad avere i valori di ritorno con il vettore
contenente le stringhe con gli spazi da applicare mi farebbe cosa molto
gradita.
Thanks

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6383
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:50
Lunedì, 03/05/2010
La documentazione sulla funzione la trovi in

http://msdn.microsoft.com/en-us/library/dd144895(VS.85).aspx

Tu cosa hai scritto?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
enzolone (Normal User)
Newbie


Messaggi: 6
Iscritto: 03/05/2010

Segnala al moderatore
Postato alle 14:10
Lunedì, 03/05/2010
sorry
'alle volte per essere conciso scrivo quasi niente
'a livello di modulo ho scritto:

Public Type KERNINGPAIR
    wFirst As Long
    wSecond As Long
    iKernAmount As Long
End Type

Public Declare Function GetKerningPairs Lib "gdi32" Alias "GetKerningPairsA" (ByVal hdc As Long, ByVal cpairs As Long, lpkrnpair As KERNINGPAIR) As Integer





'---------------------------
'semplice tasto command
'VISlettere è una picture box
'valori di ritorno dopo click
'la variabile aaa =-1
'bbb=0
'ccc=0
'ddd=0
'dovrebbeero invece essere 909 valori di coppie di caratteri
'con i relativi valori di crenatura

Private Sub Command5_Click()
    Dim aaa As Long
    Dim bbb As Long
    Dim ccc As Long
    Dim ddd As Long
    Dim lpkrnpair As KERNINGPAIR
    Dim cpairs As Long
    Dim PLUTO As Integer
    dim eee as long    
'On Error GoTo ERRATO
    
    
    
    
    Me.vislettere.FontName = "arial"
    
    PLUTO = GetKerningPairs(Me.vislettere.hdc, cpairs, lpkrnpair)
  
    eee = cpairs
    aaa = GDI_ERROR
    bbb = lpkrnpair.wFirst
    ccc = lpkrnpair.wSecond
    ddd = lpkrnpair.iKernAmount
    
    Exit Sub
ERRATO:
Stop
End Sub

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6383
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:30
Lunedì, 03/05/2010

Dalla documentazione, la struttura è

Codice sorgente - presumibilmente Visual Basic 6

  1. typedef struct tagKERNINGPAIR {
  2.   WORD wFirst;
  3.   WORD wSecond;
  4.   int  iKernAmount;
  5. } KERNINGPAIR, *LPKERNINGPAIR;



e quindi il primo e secondo elemento sono Integer (e non Long) e solo il terzo è Long. Quindi

Codice sorgente - presumibilmente VB.NET

  1. Public Type KERNINGPAIR
  2.     wFirst As Integer
  3.     wSecond As Integer
  4.     iKernAmount As Long
  5. End Type



Per la dichiarazione, la funzione restituisce un DWORD, quindi deve essere

Codice sorgente - presumibilmente VB.NET

  1. Public Declare Function GetKerningPairs Lib "gdi32" Alias "GetKerningPairsA" (ByVal hdc As Long, ByVal cpairs As Long, lpkrnpair As KERNINGPAIR) As Long



e non As Integer

Il resto del codice non l'ho testato (ma perchè tutte quelle variabili ccc, ddd ...?) ... provalo con le modifiche opportune e ne riparliamo ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6383
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:01
Lunedì, 03/05/2010
Ho visto il codice, ma non rispetta assolutamente la documentazione che ti ho segnalato.
Dovrebbe essere

Codice sorgente - presumibilmente VB.NET

  1. Public Type KERNINGPAIR
  2.     wFirst As Integer
  3.     wSecond As Integer
  4.     iKernAmount As Long
  5. End Type
  6.  
  7. Public Declare Function GetKerningPairs _
  8.     Lib "gdi32" Alias "GetKerningPairsA" _
  9.     (ByVal hdc As Long, ByVal cpairs As Long, _
  10.      lpkrnpair As KERNINGPAIR) As Long
  11.  
  12. Public Declare Function GetKerningPairsN _
  13.     Lib "gdi32" Alias "GetKerningPairsA" _
  14.     (ByVal hdc As Long, ByVal cpairs As Long, _
  15.      ByVal lpkrnpair As Long) As Long



e poi

Codice sorgente - presumibilmente VB.NET

  1. Dim cpairs As Long
  2.     Dim res As Long
  3.     Dim lpkrnpair() As KERNINGPAIR
  4.  
  5.     Picture1.FontName = "Arial"
  6.     cpairs = GetKerningPairsN(Picture1.hdc, 0, 0)
  7.     ReDim lpkrnpair(1 To cpairs) As KERNINGPAIR
  8.     res = GetKerningPairs(Picture1.hdc, cpairs, lpkrnpair(1))



in res avrai il numero di pairs letti.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
enzolone (Normal User)
Newbie


Messaggi: 6
Iscritto: 03/05/2010

Segnala al moderatore
Postato alle 4:53
Martedì, 04/05/2010
la mia conoscenza della chiamata alle api in una scala da 1 a 10  è =0
Se il tuo scopo è di aiutarmi lo hai fatto in maniera very very well !

Grazie.

PS. Per caso sai anche la formula per convertire tutti questi 0 e -1 in valori di
spaziatura?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6383
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:09
Martedì, 04/05/2010
Testo quotato

Postato originariamente da enzolone:
Per caso sai anche la formula per convertire tutti questi 0 e -1 in valori di
spaziatura?



No ... mi dispiace ma l'esperto sei tu ... :)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote