Bei umfangreichen Projekten empfiehlt es sich, eine Infobox mit einer kurzen Beschreibung des Projektes/Programmes und dem Namen des Entwicklers einzubinden. Wer in dieser Infobox auch einen Hyperlink auf eine bestimme Web-Seite setzen möchte, kann dies mit einem Bezeichnungsfeld und dem API ShellExecute erreichen.
Das Bezeichnungsfeld wird zum besseren Erkennen wie ein Standard-Hyperlink formatiert; gleichzeitig wird eine Eigenschaft der Controls verwendet, die es erlaubt, eigene Mauszeiger zu verwenden.
Das folgende Beispiel demonstriert die Verwendung eines Bezeichnungsfeldes als Hyperlink (Infolink). Um das Beispiel auszuführen, genügt es den nachstehenden Code in eine leere Userform zu kopieren.
In der Prozedur UserForm_Initialize() werden die Größe der Userform gesetzt und gleichzeitig das Bezeichnungsfeld und eine Schaltfläche eingefügt und formatiert.
In der Prozedur lblInfolink_Click() wird dann das mit einem Hyperlink verknüpfte Programm (normalerweise der Browser) gestartet und die angegebene Seite aufgerufen.
Mit wenig Aufwand lässt sich der Infolink auch durch einen Mailaufruf ersetzen. Dazu muss sowohl die Beschriftung des Feldes als auch der Aufruf geändert werden. Im Aufruf muss der Zusatz "mailto:" eingefügt werden, damit das Standard-Mailprogramm gestartet wird.
Private bHyperlink As Boolean
Private Declare Function ShellExecute Lib "Shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal ProgName As String, _
ByVal Parameter As String, _
ByVal Verzeichnis As String, _
ByVal Modus As Long) _
As Long
Private WithEvents lblInfolink As MSForms.Label
Private WithEvents lblEnde As MSForms.CommandButton
Const strCaption = "Hyperlink auf ein Bezeichnungsfeld"
' Der Pfad zum verwendeten Icon oder Cursor
Const IconPfad = "C:\WINNT\Cursors\harrow.cur"
Private Sub UserForm_Initialize()
' Userform anpassen
With Me
.Width = 240
.Height = 120
.Top = 300
.Caption = strCaption
End With
' Label-Control hinzufügen
Set lblInfolink = Controls.Add("Forms.Label.1", "lblInfolink", True)
' Label-Control formatieren
With lblInfolink
' Muss entweder mit "www" anfangen oder mit "http://",
' damit der Aufruf klappt
.Caption = "www.chf-online.de"
.Font.Size = 13
.Font.Bold = True
.Font.Underline = True
.WordWrap = False
.Width = Len(.Caption) * PointsToPixels(.Font.Size / 2, True)
.Height = .Font.Size + 2
.Top = frmInfoLink.Height / 2 - .Font.Size
.Left = (frmInfoLink.Width - .Width) / 2
.ForeColor = RGB(0, 0, 255)
End With
' Schaltfläche zum Beenden einfügen
Set lblEnde = Controls.Add("Forms.Commandbutton.1", "lblEnde", True)
' Schaltfläche "Ausblenden" formatieren
With lblEnde
.Caption = "Ausblenden"
.Font.Size = 8
.Width = 72
.Height = 24
.Top = lblInfolink.Top + lblInfolink.Height + 10
.Left = (frmInfoLink.Width - .Width) / 2
End With
End Sub
Private Sub lblInfolink_Click()
Dim RetVal As Long
If bHyperlink = True Then
RetVal = ShellExecute(&O0, vbNullString, lblInfolink.Caption, _
vbNullString, vbNullString, vbNormalFocus)
End If
End Sub
Private Sub lblInfolink_MouseMove(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim sYDiff As Single
sYDiff = ((lblInfolink.Height - lblInfolink.Font.Size) / 2)
If (Y > sYDiff) And (Y < lblInfolink.Height - sYDiff) Then
bHyperlink = True
lblInfolink.MousePointer = fmMousePointerCustom
lblInfolink.MouseIcon = LoadPicture(IconPfad)
Else
bHyperlink = False
lblInfolink.MousePointer = fmMousePointerDefault
End If
End Sub
Private Sub lblEnde_Click()
Unload Me
End Sub
Bei der Größenanpassung des Bezeichnungsfeldes wird versucht, eine optimale Positionierung in der Mitte der Userform zu erreichen. Leider stehen in VBA nicht viele Möglichkeit der Pixel-Umrechung zur Verfügung, so dass an diesen Stellen auch gut feste Angaben eingetragen werden können.
Bekannte Probleme:
Wird der Hyperlink aufgerufen und die gewünschte Internet-Seite angezeigt, und wechselt man anschließend zu der Userform zurück, wird der für die Linkanzeige geladene Mauszeiger nicht sauber aktualisiert. Dieses erkennt man daran, dass der Mauszeiger zwischen dem normalen Zeiger und dem geladenen Bild bei jeder Bewegung wechselt.
|