Klonování fontů

Postup:
Když si chcete přiřadit vlastnost prvku Font od jiného prvku, pak první a nejobvyklejší cesta je:

Set Text2.Font = Text1.Font

Ale ve většině případů tento postup skutečně nefunguje, protože tím vlastně jen přiřadíte referenci jednoho a toho samého fontu k oběma prvkům. Jinými slovy - pokud později změníte font u jednoho prvku, tak se změní i fonty u prvku ostatních. To co opravdu potřebujete, je font klonovat a prvku přiřadit kopii fontu, který má originální prvek.

Nejjednodušší cesta je manuálně kopírovat všechny individuální vlastnosti fontu:

Function CloneFont(Font As StdFont) As StdFont

    Set CloneFont = New StdFont
    CloneFont.Name = Font.Name
    CloneFont.Size = Font.Size
    CloneFont.Bold = Font.Bold
    CloneFont.Italic = Font.Italic
    CloneFont.Underline = Font.Underline
    CloneFont.Strikethrough = Font.Strikethrough

End Function


'
Příklad použití
Set Text2.Font = CloneFont(Text1.Font)

Pokud používáte VB6, je možné využít objekt PropertyBag na rychlé kopírování všech vlastností fontu. Pokud použijete objekt PropertyBag, pak následující metoda je dvakrát rychlejší než předchozí příklad:

Function CloneFont(Font As StdFont) As StdFont

    Dim pb As New PropertyBag
    ' zkopírování fontu do objektu PropertyBag
    pb.WriteProperty "Font", Font
   
' a vytvoření nového objektu Font a nastavení jeho vlastností
    Set CloneFont = pb.ReadProperty("Font")

End Function

Ale lze napsat ještě lepší kód pomocí použití skrytého rozhraní IFont, které je ale přístupné všem objektů StdFont. Toto rozhraní má i metodu Clone, která je přesně to, co potřebujeme. Tato metoda totiž vytvoří klonovaný font a vrátí pouze referenci na něj:

Function CloneFont(Font As IFont) As StdFont

    Font.Clone CloneFont

End Function

Tato poslední verze je ze všech uvedených metod nejrychlejší a i nejpohodlnější - pracuje 3x rychleji než verze s objektem PropertyBag.

Zpět

Autor: The Bozena

iReklama.cz - nový reklamní systém
iReklama.cz - nový reklamní systém