Titolo: Calcolo di altezza e larghezza di un testo
Categoria: Plugin |
|
Ultimo Aggiornamento: 10/02/06 |
In 4D è incluso un plugin, 4D Chart, che non è molto considerato (forse perchè è gratis :) );in realtà oltre a fare i grafici fornisce alcuni strumenti interessanti, ad esempio per la elaborazione di testi o disegni all'interno di una immagine. Ecco un interessante esempio di utilizzo.
Usando una offscreen area di 4D Chart è possibile conoscere larghezza e altezza di una campo testo, anche multilinea.
I parametri passati sono il testo, il carattere, la dimensione, lo stile, il puntatore all'oggetto che deve ricevere la larghezza e il puntatore all'oggetto che deve ricevere l'altezza.
Ecco il metodo:
C_TEXT($Testo_t)
$Testo_t:=$1
C_STRING(255;$TipoCarattere_S)
$TipoCarattere_S:=$2
C_LONGINT($Dimensione_L;$StileTesto_L)
$Dimensione_L:=$3
$StileTesto_L:=$4
C_LONGINT($Larghezza_L;$Altezza_L)
$Larghezza_L:=0
$Altezza_L:=0
If ($Testo_t#"")
C_LONGINT($NumeroTipoCarattere_L)
$NumeroTipoCarattere_L:=CT Font number ($TipoCarattere_S)
If ($NumeroTipoCarattere_L#0)
C_LONGINT($ChartArea_L; $TestoChart_L)
$ChartArea_L:=CT New offscreen area
$TestoChart_L:=CT Draw text ($ChartArea_L;0;0;2048;5;$Testo_t)
CT SET TEXT ATTRIBUTES ($ChartArea_L;$TestoChart_L;$NumeroTipoCarattere_L;$Dimensione_L;$StileTesto_L;0;0)
C_LONGINT($sinistra_L;$alto_L;$destra_L;$basso_L)
CT GET BOUNDARY ($ChartArea_L;$TestoChart_L;$sinistra_L;$alto_L;$destra_L;$basso_L)
$Larghezza_L:=$destra_L-$sinistra_L `La larghzza viene trovata riducendola
$Altezza_L:=$basso_L-$alto_L `L’altezza è corretta
If ($Larghezza_L>0)
Repeat $Larghezza_L:=$Larghezza_L-100
CT SIZE ($ChartArea_L;$TestoChart_L;$Larghezza_L;$Altezza_L)
CT GET BOUNDARY ($ChartArea_L;$TestoChart_L;$sinistra_L;$alto_L;$destra_L;$basso_L)
Until ((($basso_L-$alto_L)>$Altezza_L) | ($Larghezza_L<100))
$Larghezza_L:=$Larghezza_L+(100*Num(($basso_L-$alto_L)>$Altezza_L))
Repeat $Larghezza_L:=$Larghezza_L-20
CT SIZE ($ChartArea_L;$TestoChart_L;$Larghezza_L;$Altezza_L)
CT GET BOUNDARY ($ChartArea_L;$TestoChart_L;$sinistra_L;$alto_L;$destra_L;$basso_L)
Until ((($basso_L-$alto_L)>$Altezza_L) | ($Larghezza_L<20))
$Larghezza_L:=$Larghezza_L+(20*Num(($basso_L-$alto_L)>$Altezza_L))
Repeat $Larghezza_L:=$Larghezza_L-1
CT SIZE ($ChartArea_L;$TestoChart_L;$Larghezza_L;$Altezza_L)
CT GET BOUNDARY ($ChartArea_L;$TestoChart_L;$sinistra_L;$alto_L;$destra_L;$basso_L)
Until ((($basso_L-$alto_L)>$Altezza_L) | ($Larghezza_L<1))
$Larghezza_L:=$Larghezza_L+1
Else `Se il testo supera i 2048 pixel, ritorna 0
End if CT DELETE OFFSCREEN AREA ($ChartArea_L)
End if End if $5->:=$Larghezza_L
$6->:=$ Altezza_L
Fonte: 4DToday - Michel Pourcel
Inviato da: PierPaolo Sichera |
|
Visite: 12963 |
Se accedi con utente e password, puoi aggiungere dei commenti.