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 22.10.2001

Diese Seite wurde zuletzt aktualisiert am 22.10.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...

Font-Reaktionen

Zurück...


Anzeige

(-hg) mailto:hg_fontautosize@aboutvb.de

Wenn die Größe eines UserControls von einer Schriftgröße abhängen soll, muss das UserControl auf die Änderung der betreffenden Schriftgröße reagieren. In Visual Basic 6 löst ein Font-Objekt das Ereignis FontChanged aus, wenn eine der Eigenschaften des Font-Objekts geändert wurden. Sie brauchen also lediglich eine Ereignisempfänger-Variable auf das betreffende Font-Objekt zu setzen, am besten in den Ereignissen InitProperties und ReadProperties des UserControls:

Private WithEvents eFont As StdFont

Private Sub UserControl_InitProperties()
  Set eFont = XY.Font
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  Set eFont = XY.Font
End Sub

Private Sub eFont_FontChanged(ByVal PropertyName As String)
  ' Reaktion...
End Sub

Das funktioniert ganz prächtig sowohl zur Laufzeit als auch zur Entwicklungszeit - mit der Einschränkung, dass das Font-Objekt nicht als Eigenschaft des UserControls zur Verfügung gestellt wird. Sobald Sie den Zugriff auf das Font-Objekt über Eigenschaften-Prozeduren ermöglichen, klappt das nicht mehr zur Entwicklungszeit. VB ersetzt bei der Änderung einer Eigenschaft eines so offen gelegten Font-Objekts nämlich das vorhandene Font-Objekt durch ein neues. Und da dieses noch nicht Ihrer Ereignisempfänger-Variablen zugewiesen ist, kommt auch kein FontChanged-Ereignis in Ihrem UserControl an. Eine nachträgliche Zuweisung in der Property Set-Prozedur der Font-Eigenschaft kommt zu spät. Zur Laufzeit bleibt das Font-Objekt hingegen erhalten.

Da aber bei einem Zugriff auf das Font-Objekt zur Entwicklungszeit auch immer auf die Property Set-Prozedur zugegriffen wird, können Sie statt des FontChanged-Ereignisses zur Entwicklungszeit dieses als Anstoß für eine Reaktion auf eine Änderung einer Eigenschaft des Font-Objekts betrachten - es fehlt Ihnen lediglich die Information, was sich geändert hat. Zur Entwicklungszeit sollte es allerdings kein großes Problem sein, in jedem Fall und pauschal zu reagieren - Performance-Fragen spielen hier sicher keine so übergroße Rolle.

Das folgende Beispiel zeigt, wie Sie dafür sorgen können, dass etwa eine TextBox immer vollständig die Fläche eines UserControls bedeckt und sich dieses bei Änderungen der Schriftgröße der TextBox auch in der Höhe sofort anpasst - sowohl zur Entwicklungszeit als auch zur Laufzeit:

Private WithEvents eFont As StdFont

Public Property Get Font() As StdFont
  Set Font = Text1.Font
End Property

Public Property Let Font(New_Font As StdFont)
  zSetFont New_Font
End Property

Public Property Set Font(New_Font As StdFont)
  zSetFont New_Font
End Property

Private Sub zSetFont(New_Font As StdFont)
  Set eFont = New_Font
  Set Text1.Font = New_Font
  UserControl_Resize
  PropertyChanged "Font"
End Sub

Private Sub eFont_FontChanged(ByVal PropertyName As String)
  UserControl_Resize
End Sub

Private Sub UserControl_InitProperties()
  Set eFont = Text1.Font
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  Set Text1.Font = PropBag.ReadProperty("Font", Ambient.Font)
  Set eFont = Text1.Font
End Sub

Private Sub UserControl_Resize()
  Static sInProc As Boolean
    
  If sInProc Then
    Exit Sub
  Else
    sInProc = True
  End If
  With UserControl
    txt.Move 0, 0, .ScaleWidth, 0
    .Height = Text1.Height
  End With
  sInProc = False
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  PropBag.WriteProperty "Font", Text1.Font, Ambient.Font
End Sub

Beispiel-Projekt FontAutoSize (fontautosize.zip - ca. 3,4 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