ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 29.06.2001

Diese Seite wurde zuletzt aktualisiert am 29.06.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Geklonte Fonts

Zurück...


Anzeige

(-hg) mailto:hg_clonefont@aboutvb.de

Einen heimtückischen Effekt des Font-Objekts werden Sie sicher schon kennen gelernt haben: Wenn Sie beispielsweise das Font-Objekt eines Steuerelements einem anderen Steuerelement zuweisen, und wenn Sie dann dort eine Eigenschaft des Objekts ändern, wirkt sich diese Änderung auch auf die Darstellung des ersten Steuerelements aus.
Set Label12.Font = Label11.Font
Label12.Font.Bold = True

Um diese beiden Steuerelement unabhängig voneinander zu halten, müssen Sie ein neues Font-Objekt instanzieren und dem zweiten Steuerelement zuweisen. Nun können sie die Eigenschaften des Font-Objekts beim zweiten Steuerelement beliebig modifizieren.

Damit die Font-Einstellungen bei diesem zweiten Steuerelement mit denen des ersten Steuerelements zunächst übereinstimmen, können Sie die Eigenschaften des ursprünglichen Font-Objekts einzeln an diese neue Instanz einzeln übertragen:

Dim nFont As StdFont

Set nFont = New StdFont
With Label21.Font
  nFont.Bold = .Bold
  nFont.Charset = .Charset
  nFont.Italic = .Italic
  nFont.Name = .Name
  nFont.Size = .Size
  nFont.Strikethrough = .Strikethrough
  nFont.Underline = .Underline
  nFont.Weight = .Weight
End With
Set Label22.Font = nFont

Eine mühselige Angelegenheit, wie es scheint... Weitaus handlicher erscheint die in Visual Basic 6 zur Verfügung stehende Möglichkeit, zur Erzeugung eines neuen unabhängigen Font-Objekts mit den gleichen Einstellungen ein PropertyBag-Objekt zu verwenden. Sie speichern das Font-Objekt des einen Steuerelements in einer temporär angelegten Instanz eines PropertyBag-Objekts, und weisen das anschließend aus dem PropertyBag ausgelesene Font-Objekt dem anderen Steuerelement zu. Auf diese Weise wird tatsächlich ein neues Font-Objekt erzeugt, da das im PropertyBag lediglich die Einstellungen eines Font-Objekts angelegt werden.

Dim nPropbag As PropertyBag

Set nPropbag = New PropertyBag
nPropbag.WriteProperty "F", Label31.Font
Set Label32.Font = nPropbag.ReadProperty("F")

Dieses Verfahren hat aber einen kleinen Haken. Der Schreibaufwand hat sich zwar auf gut die Hälfte reduziert - die Ausführung zur Laufzeit dauert jedoch um gut die Hälfte länger als die Zuweisung der einzelnen Eigenschaften beim ersten Verfahren.

Es gibt aber noch eine erheblich schnellere Lösung. Sie ist um etwa 40% schneller als die Einzelzuweisungen, und fast doppelt so schnell wie der PropertyBag-Umweg. Und sie hat den Vorteil, das sie auch in Visual Basic 5 zur Verfügung steht.

Falls Sie bereits einmal die Neugier gepackt hat, was sich hinter dem Menüpunkt "Ausgeblendete Mitglieder anzeigen" im Kontextmenü des Objektkatalogs verbirgt, werden Sie vielleicht beim Stöbern in der "stdole"-Bibliothek eine Reihe weiterer Objekte entdeckt haben. Die in grauer Schrift angezeigten "Objekte" (aha - Anführungszeichen...!?) sind allerdings keine Objekte, sondern lediglich weitere Schnittstellen der beiden Objekte dieser Bibliothek. Leider sind einige der recht interessant und viel versprechend aussehenden Methoden und Eigenschaften dieser Schnittstellen in Visual Basic nicht verwendbar. Doch die Clone-Methode der IFont-Schnittstelle des Font-Objekt ist genau das, was die versprochene Beschleunigung bietet. Der erste nahe liegende Versuch, diese Methode zu nutzen, schlägt allerdings fehl - das zweite Steuerelement denkt gar nicht daran, die Einstellungen des Fonts des ersten Steuerelements zu übernehmen:

Dim nIFont As IFont

Set nIFont = Label11.Font
nIFont.Clone Label12.Font

Irgendwie scheint nicht ganz klar zu sein, wer hier wen klont - vielleicht einfach umgekehrt?

Dim nIFont As IFont

Set nIFont = Label12.Font
nIFont.Clone Label11.Font

Doch da tut sich immer noch nichts. Also doch ein neues Font-Objekt instanzieren, es dann klonen und zuweisen?

Dim nIFont As IFont
Dim nFont As StdFont

Set nIFont = Label11.Font
Set nFont = New StdFont
nIFont.Clone nFont
Set Label12.Font = nFont

Na endlich! Nun brauchen wir nur noch eine handliche Clone-Funktion - denn auch das ist noch immer eine Menge Schreiberei.

Public Function CloneFont(Font As IFont) As StdFont
  Font.Clone CloneFont
End Function

Diese Funktion nimmt uns die Instanzierung eines neuen Font-Objekts und die Schnittstellen-Konvertiererei auf einen Schlag ab - und ist selbst sogar noch kürzer. Und auch das Klonen eines Steuerelement-Font-Objekts spielt sich nunmehr nur noch in einer einzigen Zeile ab:

Set Label42.Font = CloneFont(Label41.Font)

Die Änderung einer Font-Einstellung beim zweiten Steuerelement bleibt nun ohne Risiken und Nebenwirkungen:

Label42.Font.Bold = True

Test-Projekt und Modul CloneFont (clonefont.zip - ca. 6,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer