vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Forms/Controls   |   VB-Versionen: VB5, VB601.08.01
Hyperlinks - Marke Eigenbau

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!

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  22.263 

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
Plazieren Sie eine Textbox auf die Form und nennen Sie diese txtHyperlink. Weitere Eigenschaften brauchen Sie nicht zu setzen - den Rest erledigen Sie per Code - oder besser gesagt, die Prozeduren im obigen Modul!

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
Je nachdem, welche Aktion beim Klicken auf den Hyperlink ausgeführt werden soll, sollten Sie folgende Werte für den Parameter Aktion für den Prozeduraufruf LinkCreate verwenden:

  • http://www....: Beim Klicken auf den Hyperlink wird automatisch der Standardbrowser geöffnet und die im Parameter Aktion angegebene URL geladen (Beispiel: http://www.vbarchiv.net).
  • mailto:...: Beim Klicken auf den Hyperlink wird automatisch das Standard EMail-Programm geöffnet und die Empfängeradresse eingetragen (Beispiel: mailto:info@vbarchiv.de).
  • App:... Beim Klicken auf den Hyperlink wird automatisch die angegebene Anwendung gestartet bzw. das angegebene Dokument mit der im System verknüpften Anwendung geöffnet (Beispiel: App:c:\eigene dateien\mein dokument.doc).

Verwendete Farben
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
Sie sollten für Ihre Anwendung eine Ressourcen-Datei erstellen, in der Sie das Symbol für den Mauszeiger einbinden, welches dann angezeigt wird, wenn sich die Maus über dem Hyperlink befindet. Hier eignet sich z.B. eine Hand, wie sie auch im WWW verwendet wird. Die Ressourcen-Kennung (ID) legen Sie in der globalen Konstante resHand im Modul fest.

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.

 HYPERLINK.RES

Ein kleines Manko gilt es noch abzustellen
Das einzige Manko, was jetzt noch vorhanden ist, ist, daß die Textbox beim Mausklick den Fokus erhält, und somit der senkrechte Eingabecursor sichtbar werden könnte. Dies wird aber in den seltensten Fällen der Fall sein, da durch das Setzen der .Enabled-Eigenschaft auf False und dann gleich wieder auf True der Fokus zum nächsten Steuerelement "wandert" (siehe Prozedur LinkGo). Sollte die Form jedoch keine weiteren "fokusfähigen" Steuerelemente enthalten, würde der Eingabecursor eben doch sichtbar. Wenn dies der Fall ist, sollte Sie eine zusätzliche PictureBox auf die Form plazieren und diese entweder außerhalb des sichtbaren Form-Bereichs verschieben oder aber so klein machen, daß sie nicht weiter stört und hierbei die BorderStyle-Eigenschaft auf 0 - Kein festlegen.


Viel Spaß mit Ihrer neuen Hyperlink-Funktionalität!

Cu
Dieter

Dieser Workshop wurde bereits 22.263 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel