Dieser Workshop soll Ihnen zeigen, wie sich Hyperlinks in Visual Basic realisieren und erstellen lassen. Hierbei sind alle nachfolgenden Routinen sehr universell gehalten und lassen (fast) keine Wünsche mehr offen. Ab sofort können auch Sie Ihre Projekte und Anwendungen mit modernen Hyperlinks ausstatten! Was sind Hyperlinks? Leider fehlen bisher in VB die modernen Hyperlink-Steuerelemente, wie sie in Webseiten seit Jahren verwendet werden. Hierbei handelt es sich um einen Text, bei dem eine bestimmte Aktion ausgeführt wird, wenn der Anwender mit der Maus darauf klickt. Um den Hyperlink vom restlichen Text hevorzuheben, wird dieser meist in einer anderen Farbe dargestellt - und oftmals noch zusätzlich mit einem sogenannten Hover-Effekt ausgestattet, d.h. bewegt man die Maus auf den Text, so wird dieser z.B. unterstrichen dargestellt und/oder verändert seine Farbe. Um einen solchen Hyperlink in VB zu realisieren, wird eigentlich nur eine Textbox benötigt und zwei API-Funktionen, um das MouseIn/MouseOut-Ereignis abzufangen (diese Ereignisse gibt es leider ebenfalls noch nicht in VB). Ein paar weitere API-Funktionen dienen dann dem automatischen Ausführen bestimmter Aktionen, wie z.B. Webbrowser starten und URL aufrufen oder Standard EMail-Client mit vorgegebener Empfängeradresse aufrufen. Dieser Workshop soll Ihnen zeigen, wie sich Hyperlinks in Visual Basic realisieren und erstellen lassen. Hierbei sind alle nachfolgenden Routinen sehr universell gehalten und lassen (fast) keine Wünsche mehr offen. Ab sofort können auch Sie Ihre Projekte und Anwendungen mit modernen Hyperlinks ausstatten! Das Modul basHyperlink.bas Den nachfolgenden Code bitte in ein Modul einfügen und unter basHyperlink.bas speichern. ' ------------------ Beginn Modul ----------------------- ' zunächst die benötigten API-Deklarationen ' zum Realisieren der MouseIn/MouseOut-Ereignisse Private Declare Function SetCapture Lib "user32.dll" ( _ ByVal hWnd As Long) As Long Private Declare Function ReleaseCapture Lib "user32.dll" () As Long ' Fenster-Handle des Desktops (für ShellExecute) Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function GetSystemDirectory Lib "kernel32" _ Alias "GetSystemDirectoryA" ( _ ByVal lpBuffer As String, _ ByVal nSize As Long) As Long ' Webbrowser/Mail-Client/Anwendung starten Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" ( _ ByVal hWnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long ' Dokument öffnen Private Const SE_ERR_NOASSOC = 31 Private Const SE_ERR_NOTFOUND = 2 ' Standard-Textfarbe für Hyperlinks Global Const Link_Normal = &HA56B39 ' Blauton Global Const Link_Hover = &HFF& ' Rot ' ID für das "Hand"-Icon in der Resource-Datei Global Const resHand = 1000 ' ------------------------------------------------ ' Setzt den Text und das Ziel (Aktion) des Hyperlinks Public Sub LinkCreate(Link As TextBox, _ ByVal Text As String, ByVal Aktion As String, _ Optional Container As Variant) With Link .Text = Text .Locked = True .Tag = Aktion .TabStop = False .BorderStyle = 0 If Not IsMissing(Container) Then .BackColor = Container.BackColor End If End With End Sub ' Hyperlink "normal" anzeigen Public Sub LinkDisplay(Link As TextBox, _ Optional ByVal ColorNormal As Variant) With Link If IsMissing(ColorNormal) Then ' wenn keine "gesonderte" Textfarbe angegeben wurde, ' Standard-Textfarbe verwenden .ForeColor = Link_Normal Else ' Übergebene Textfarbe verwenden .ForeColor = ColorNormal End If .Font.Underline = False ' Fehlerbehandlung einschalten, falls das Icon ' in der Resource-Datei nicht gefunden wird On Local Error Resume Next .MouseIcon = LoadResPicture(resHand, 1) .MousePointer = 99 On Local Error GoTo 0 End With End Sub ' Hyperlink: MouseIn/MouseOut (Hover-Effekt) ' Siehe Tipp: HoverEffekt von LonelySuicide Public Sub LinkHover(Link As TextBox, X As Single, _ Y As Single, Optional ByVal ColorNormal As Variant, _ Optional ByVal ColorHover As Variant) With Link ' Befindet sich die Maus über dem Control? If X >= 0 And Y >= 0 And X <= .Width And Y <= .Height Then SetCapture .hWnd If IsMissing(ColorHover) Then .ForeColor = Link_Hover Else .ForeColor = ColorHover End If .Font.Underline = True Else ' wenn nicht, Capture lösen ReleaseCapture If IsMissing(ColorNormal) Then .ForeColor = Link_Normal Else .ForeColor = ColorNormal End If .Font.Underline = False End If End With End Sub ' Klick auf Hyperlink ' Ggf. automatisch Webbrowser starten und URL anzeigen ' oder EMail-Client starten ' oder Anwendung starten Public Sub LinkGo(Link As TextBox, _ Optional ByVal ColorNormal As Variant) Dim URL As String ' Fokus auf das nächste Steuerelement setzen Link.Enabled = False Link.Enabled = True ' Hyperlink wieder normal darstellen LinkHover Link, -1, -1, ColorNormal ' Webbrowser starten und URL anzeigen If Left$(Link.Tag, 7) = "http://" Or _ Left$(Link.Tag, 4) = "www." Then URL = Link.Tag If Left$(URL, 7) <> "http://" Then _ URL = "http://" & URL Call ShellExecute(GetDesktopWindow(), "Open", URL, _ "", "", 3) ' EMail-Client starten ElseIf Left$(Link.Tag, 7) = "mailto:" Then Call ShellExecute(GetDesktopWindow(), "Open", _ Link.Tag, "", "", 1) ' Anwendung starten / Dokument öffnen ' Siehe Tipp: "Öffnen mit..."-Dialog bei Bedarf ' von Heinz Prelle ElseIf Left$(Link.Tag, 4) = "App:" Then DocumentOpen Mid$(Link.Tag, 5) End If End Sub ' Dokument öffnen und ggf. autom. den ' "Öffnen mit..." - Dialog anzeigen ' ' Tipp-Autor: Heinz Prelle '===================================================== Private Sub DocumentOpen(sFilename As String) Dim sDirectory As String Dim lRet As Long Dim DeskWin As Long DeskWin = GetDesktopWindow() lRet = ShellExecute(DeskWin, "open", sFilename, _ vbNullString, vbNullString, vbNormalFocus) If lRet = SE_ERR_NOTFOUND Then ' Datei nicht gefunden ElseIf lRet = SE_ERR_NOASSOC Then ' Wenn die Dateierweiterung noch nicht bekannt ist... 'wird der "Öffnen mit..."-Dialog angezeigt. sDirectory = Space(260) lRet = GetSystemDirectory(sDirectory, Len(sDirectory)) sDirectory = Left(sDirectory, lRet) Call ShellExecute(DeskWin, vbNullString, _ "RUNDLL32.EXE", "shell32.dll,OpenAs_RunDLL " & _ sFilename, sDirectory, vbNormalFocus) End If End Sub ' -------------------- Ende Modul ------------------------- Implementierung in eigene Forms Und so erstellen Sie Ihren eigenen Hyperlink Fügen Sie nachfolgenden Code in das Form_Load-Ereignis der Form ein: Private Sub Form_Load() ' Hyperlink erstellen LinkCreate txtHyperlink, "vb@rchiv", _ "www.vbarchiv.de", Me LinkDisplay txtHyperlink End Sub Wird die Form geladen, werden über die beiden Prozeduraufrufe LinkCreate und LinkDisplay alle notwendigen Eigenschaften der Textbox gesetzt. Im obigen Beispiel wird dann der Text vb@rchiv angezeigt und beim Klicken auf den "Hyperlink" wird der Standardbrowser gestartet, sowie die URL www.vbarchiv.de aufgerufen. Der letzte Paramater (Me) gibt das Container-Objekt an, also das Objekt, auf welchem sich die Textbox befindet. Das Container-Objekt wird benötigt, um die Hintergrundfarbe der Textbox automatisch an die des Containers anzupassen. Meist wird es sich hierbei um die Form selbst handeln. Haben Sie die TextBox aber z.B. auf ein Picture-Steuerelement plaziert oder in ein Frame-Steuerelement, und dessen Farbe weicht von der Hintergrundfarbe der Form ab, so müssen Sie dann natürlich für den Parameter Container die PictureBox oder das Frame-Control angeben. Nun werden noch nachfolgende zwei Prozeduraufrufe benötigt: ' Aktion ausführen Private Sub txtHyperlink_Click() LinkGo txtHyperlink End Sub ' MouseIn/MouseOut (Hover-Effekt) Private Sub txtHyperlink_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) LinkHover txtHyperlink, X, Y End Sub Das war's dann auch schon. Sie sehen, in Verbindung mit den universellen Prozeduren aus dem Modul können dann in den einzelnen Formen Hyperlinks ganz leicht realisiert werden. Anmerkungen zu den Parametern und Möglichkeiten
Die Standard-Farben für die Darstellung des Hyperlinks werden in den im Modul global definierten Konstanten Link_Normal und Link_Hover festgelegt. Die Prozeduren sind aber so universell gehalten, daß es durchaus möglich ist, für spezielle Hyperlinks andere Farben zu wählen. Hierzu müssen Sie bei den Prozeduraufrufen einfach die entsprechenden Farben mit angeben: ' Spezielle Farben verwenden ' normale Anzeige: GELB LinkDisplay txtHyperlink, vbYellow ' MouseIn/MouseOut (Hover-Effekt) ' normale Anzeige: GELB ' Hover (Maus befindet sich auf dem Hyperlink): ROT LinkHover txtHyperlink, x, y, vbYellow, vbRed Mauszeiger-Symbol Wenn Sie bisher noch keine Ressourcen-Datei in Ihr Projekt eingebunden haben, können Sie auch die folgende .RES-Datei laden und über den Befehl Projekt - Datei Hinzufügen in Ihrem Projekt verwenden. Ein kleines Manko gilt es noch abzustellen
Cu Dieser Workshop wurde bereits 22.158 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB Tipp des Monats ![]() Roland Wutzke DblClick Event für den CommandButton Eine Klasse, mit der sich die Standard-CommandButtons von VB mit einem DblClick-Ereignis ausstatten lassen. TOP! Unser Nr. 1 ![]() Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
|||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |