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
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à.