Modifica dimensioni controllo in relazione all'angolazione del testo.

di il
1 risposte

Modifica dimensioni controllo in relazione all'angolazione del testo.

Buonasera,

per la creazione di un editor ho dovuto estendere una label in modo da consentire la rotazione del testo.

Mi è stato richiesto che la proprietà 'Autosize' si comporti in maniera da modificare le dimensioni del controllo tenendo conto della rotazione imposta così da wrappare il testo completo e senza 'Autoellipsis'.

Ho tentato di sfruttare la larghezza in pixel del testo (via Graphics.MeasureString) e l'angolo fornito in modo da applicare le formule che ritornano i cateti di un triangolo rettangolo partendo dall'ipotenusa e dagli angoli ad essa adiacenti:


Width = MeasuredTextWidth * sin(Angle)
Height = MeasuredTextWidth * cos(Angle)

Ma il risultato non è lineare nella risposta e il controllo si adatta alla perfezione solo ogni tot di gradi senza cadenza fissa.

Grazie a chi vorrà aiutarmi.

1 Risposte

  • Re: Modifica dimensioni controllo in relazione all'angolazione del testo.

    Posto la soluzione nel caso potesse servire:

    il problema risiedeva nel fatto che il computo ritornava le dimensioni tenendo conto degli angoli espressi in radianti.
    
    
                Dim TextToPixel As Single = gr.MeasureString(Text, Font).Width * 1.3
    
                Dim AngleDegrees As Single = Angle / 180 * Math.PI
    
                Dim H As Single = TextToPixel * Math.Abs(Math.Sin(AngleDegrees))
                Dim W As Single = TextToPixel * Math.Abs(Math.Cos(AngleDegrees))
                Dim QuietZone As Single = Font.Height * 1.6
    
                Size = New Size(W + QuietZone, H + QuietZone)
    
    
    convertendone la rappresentazione in gradi ho risolto il problema.

    L'utilizzo dei valori assoluti mi consente di visualizzare correttamente il testo con qualunque valore.

    E' possibile migliorare il controllo disegnando un rettangolo col Backcolor per simularne la rotazione completa.
Devi accedere o registrarti per scrivere nel forum
1 risposte