Szybkie szukanie
Słowo kluczowe:
sobota, 11 luty 2012
Start arrow Tips & Tricks arrow AutoSize dla label, ale w pionie.
AutoSize dla label, ale w pionie. Drukuj E-mail
Nadesłał marcin_an   
czwartek, 10 sierpień 2006
Nie widzę nigdzie czegoś takiego, a może być przydatne. Funkcja, która ustawia
wysokość etykiety (Label) w taki sposób, by zmieścił się cały wpisany tekst, a
jednocześnie szerokość pozostała bez zmian. Coś jak AutoSize, tylko działające
w pionie (AutoSize działa tylko w poziomie). Funkcja ma w tej chwili jedną
niedoróbkę: jeżeli jest bardzo długi, niełamliwy ciąg znaków, to funkcja będzie
naliczała zbyt dużo linii. Label po prostu nie łamie na siłę takiego ciągu,
tylko powoduje jego "wypłynięcie" za obszar rysowania. Jednak przy małej ilości
sytuacji, gdy taki ciąg powstanie oraz niewielkiej szkodliwości ewentualnych
problemów związanych z nadmiarowymi liniami... można przyjąć, że działa dobrze
;-).

-------- BEGIN CODE --------
Option Explicit

'''
' Funkcja oblicza i ustawia wysokość etykiety tak, by przy obecnej
' szerokości zmieścił się w niej cały tekst.
' Argumenty:
'   lblTarget       Referencja do etykiety (Label), której dotyczy operacja
'   setHeight       Określa, czy funkcja ma ustawić wartość dla
lblTarget.Height.
'                   TRUE (Domyślne) oznacza ustawienie wartości.
'                   FALSE oznacza, że wysokość nie zostanie ustawiona
' Zwraca:
'   Wyliczoną wysokość w jednostkach zgodnych z ScaleMode kontenera etykiety.
'
Function setLabelHeight(ByRef lblTarget As Label, Optional ByVal setHeight As
Boolean = True) As Double
    Dim oContainer As Object
    Dim i As Long
    Dim t(255) As Double
    Dim c As Integer
    Dim p As Double
    Dim w As Double
    Dim n As Long
    
    n = 1
    Set oContainer = lblTarget.Container
    With oContainer
        For i = 0 To 255
            t(i) = .TextWidth(Chr$(i))
        Next
    End With
    
    With lblTarget
        w = .Width
        For i = 1 To Len(.Caption)
            c = Asc(Mid$(.Caption, i, 1))
            If c > 32 Then
                p = p + t(c)
            End If
            If p >= w Then
                p = 0
                n = n + 1
            End If
        Next
        If setHeight Then
            lblTarget.Height = n * oContainer.TextHeight("WMj^_")
        End If
    End With
    setLabelHeight = n * oContainer.TextHeight("WMj^_")
End Function
-------- END CODE --------

Komentarze
Dodane przez mikmas w dniu - 2006-10-04 08:07:35
Do tego jest w?aściwoś? WordWrap kontrolki ;)

Aby dodać komentarz zaloguj się. Jeśli nie masz konta, załóż je sobie.
Tylko zarejestrowani użytkownicy mogą pisać komentarze.

Powered by AkoComment 2.0!

< Poprzedni   Następny >

Menu główne
Start
Teoria
VB.NET
Api
Tips & Tricks
Warsztat
VBMagazine
Pliki
Forum
Literatura
Ankiety
Linki
Szukaj
Wyślij program
Napisz do nas
Redakcja
Logowanie
Login

Hasło

Zapamiętaj mnie
Nie pamiętasz hasła?
Nie masz konta? Załóż je sobie
Gościmy
Aktualnie jest 22 gości online
Statystyka
Użytkownicy: 11345
Newsy: 237
Odnośniki: 48
Odwiedzających: 4328146
Mambo is Free Software released under the GNU/GPL License.