Oppure

Loading
03/05/10 10:33
enzolone
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
aaa
03/05/10 11:50
nessuno
La documentazione sulla funzione la trovi in

msdn.microsoft.com/en-us/library/…(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à.
03/05/10 12:10
enzolone
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
aaa
03/05/10 12:30
nessuno

Dalla documentazione, la struttura è

typedef struct tagKERNINGPAIR {
  WORD wFirst;
  WORD wSecond;
  int  iKernAmount;
} KERNINGPAIR, *LPKERNINGPAIR;


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

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


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

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à.
03/05/10 13:01
nessuno
Ho visto il codice, ma non rispetta assolutamente la documentazione che ti ho segnalato.
Dovrebbe essere

Public Type KERNINGPAIR
    wFirst As Integer
    wSecond As Integer
    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 Long

Public Declare Function GetKerningPairsN _
    Lib "gdi32" Alias "GetKerningPairsA" _
    (ByVal hdc As Long, ByVal cpairs As Long, _
     ByVal lpkrnpair As Long) As Long


e poi

    Dim cpairs As Long
    Dim res As Long
    Dim lpkrnpair() As KERNINGPAIR

    Picture1.FontName = "Arial"
    cpairs = GetKerningPairsN(Picture1.hdc, 0, 0)
    ReDim lpkrnpair(1 To cpairs) As KERNINGPAIR
    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à.
04/05/10 2:53
enzolone
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?
aaa
04/05/10 6:09
nessuno
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à.