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 25.04.2000

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

Grafik-CheckBox im Eigenbau

Zurück...


Anzeige

(-hg) mailto:hg_owncheckbox@aboutvb.de

Mit recht einfachen Mitteln können Sie eigene Schalter-Steuerelemente erstellen, die sich wie CheckBoxen verhalten, aber anstelle des CheckBox-Kästchens mit dem Häkchen eigene Grafiken zur Darstellung des Schaltzustandes zeigen.


Drei Image-Steuerelemente bilden die Grundlage für einen Schalter mit eigener Grafik

Sie benötigen dazu lediglich drei Image-Steuerelemente und die beiden Grafiken für die beiden Schaltzustände. Zwei der Image-Steuerelemente (zum Beispiel ImgAus und imgEin genannt) bleiben unsichtbar (Eigenschaft Visible gleich False) und enthalten je eine der beiden Grafiken (in der Picture-Eigenschaft). Das dritte Image-Steuerelement (z.B. imgSchalter) enthält in der Picture-Eigenschaft zunächst die Grafik des Ruhezustandes und in der Tag-Eigenschaft den Wert 0.

Klickt der Anwender auf das imgSchalter-Steuerelement, werden die Grafik und der Wert der Tag-Eigenschaft in dessen Click-Ereignis umgeschaltet:

Private Sub imgSchalter_Click()
  If imgSchalter.Tag = "1" Then
    imgSchalter.Tag = "0"
    Set imgSchalter.Picture = imgAus.Picture
  Else
    imgSchalter.Tag = "1"
    Set imgSchalter.Picture = imgEin.Picture
  End If
End Sub

Wird imgSchalter angeklickt, ändert sich der Schaltzustand

Eigentlich war es das schon. Doch wenn Sie sich die Funktionsweise einer originalen Visual Basic-CheckBox beim Umschalten einmal genauer anschauen, werden Sie sehen, dass sich die grafische Darstellung bereits beim Niederdrücken der linken Maustaste ein wenig verändert: Das CheckBox-Kästchen wird grau hinterlegt, solange die Maustaste gedrückt ist. Erst beim Loslassen der Maustaste wechselt die Darstellung des Zustandes.


Beim Niederdrücken der linken Maustaste wird vor dem Zustandswechsel ein Zwischenzustand angezeigt

Um auch dieses Verhalten nachzubilden, fügen Sie in das MouseDown-Ereignis von imgSchalter den folgenden Code ein:

Private Sub imgSchalter_MouseDown(Button As Integer, _
 Shift As Integer, X As Single, Y As Single)

  If Button = vbLeftButton Then
    If imgSchalter.Tag = "1" Then
      Set imgSchalter.Picture = imgEinDown.Picture
    Else
      Set imgSchalter.Picture = imgAusDown.Picture
    End If
  End If
End Sub

Zur Aufnahme der zusätzlichen Grafiken für diese Zwischenzustände benötigen Sie ebenfalls zusätzliche, genau so wie imgEin und imgAus unsichtbar bleibende Image-Steuerelemente - hier beispielsweise die Image-Steuerelemente imgAusDown und imgEinDown.


Die zusätzlichen, unsichtbaren Image-Steuerelemente imgAusDown und ImgEinDown nehmen die Grafiken für die Zwischenzustände auf

Wenn Sie nun noch einmal ganz genau hinschauen, während Sie den Mauszeiger bei niedergedrückter Maustaste von einer originalen Visual Basic-CheckBox weg bewegen, werden Sie sehen, dass die grafische Darstellung wieder zum vorherigen Schaltzustand zurückwechselt, sobald der Mauszeiger den Bereich der CheckBox verlässt. Lassen Sie die Maustaste dann los, bleibt der Schaltzustand unverändert. Bewegen Sie jedoch statt dessen den Mauszeiger wieder in den Bereich der CheckBox hinein, wechselt die Grafik wieder in den Zwischenzustand. Erst dann, und nur dann, wenn Sie die Maustaste innerhalb der CheckBox loslassen, wechselt der Schaltzustand. Dieses Verhalten ist ein Windows-Standard, den Sie auch bei den meisten anderen Steuerelementen wie etwa auch bei Schaltflächen (CommandButtons) beobachten können.


Verlässt der Mauszeiger bei niedergedrückter linker Maustaste den Bereich des Schalters, wird wieder der unveränderte Schaltzustand angezeigt

Nun, selbstverständlich sollten auch Sie Ihren "selbstgebaute" Schalter auch in diesem Punkt dem Original (und den Windows-Standards) entsprechend nachgestalten. Da wir hierzu auf die Bewegung des Mauszeigers reagieren wollen, ist das MouseMove-Ereignis der richtige Platz für den dazu gehörenden Code:

Private Sub imgSchalter_MouseMove(Button As Integer, _
 Shift As Integer, X As Single, Y As Single)

  Dim nInside As Boolean
  
  If Button = vbLeftButton Then
    Select Case X
      Case 0 To imgSchalter.Width
        Select Case Y
          Case 0 To imgSchalter.Height
            nInside = True
        End Select
    End Select
    If nInside Then
      If imgSchalter.Tag = "1" Then
        Set imgSchalter.Picture = imgEinDown.Picture
      Else
        Set imgSchalter.Picture = imgAusDown.Picture
      End If
    Else
      If imgSchalter.Tag = "1" Then
        Set imgSchalter.Picture = imgEin.Picture
      Else
        Set imgSchalter.Picture = imgAus.Picture
      End If
    End If
  End If
End Sub

Auch wenn der Code in dieser Prozedur erheblich komplizierter aussieht, als der Code der beiden anderen Ereignis-Prozeduren unseres imgSchalter-Steuerelements, passiert hier dennoch nicht besonders viel.

Zunächst wird festgestellt, ob überhaupt eine Maustaste, und zwar die linke, niedergedrückt ist. Dann wird geprüft, ob sich die im Parameter X übergebene X-Koordinate innerhalb des Steuerelements befindet. Ist dies der Fall, wird noch geprüft, ob sich die Y-Koordinate ebenfalls innerhalb des Steuerelements befindet. Ist dies ebenfalls der Fall, wird die prozedurlokale Variable nInside auf True gesetzt. Nur dann, wenn beide Bedingungen erfüllt sind, befindet sich der Mauszeiger innerhalb des Bereichs. Anderenfalls bleibt Sie in ihrem Urzustand False - wir ersparen uns die ausdrückliche Feststellung in weiteren Case-Verzweigungen, dass sich der Mauszeiger außerhalb des Bereichs befindet.

Für den Fall, dass nInside auf True gesetzt wurde, weisen wir der Picture-Eigenschaft von imgSchalter die jeweils passende (dem Wert der Tag-Eigenschaft entsprechende) Grafik-Variante des Zwischenzustands zu. Ist nInside dagegen False geblieben, weisen wir wieder die normale Grafik entsprechend dem Schaltzustand zu. Verlässt der Mauszeiger also den Bereich, wird der unveränderte Zustand angezeigt. Bewegt sich der Mauszeiger innerhalb des Bereichs, wird der Zwischenzustand angezeigt - also auch dann, wenn sich der Mauszeiger vorher hinaus bewegt hat und nun wieder hinein bewegt wird.

Daraus ergibt sich auch, dass der Schaltzustand zunächst noch unverändert ist, wenn der Mauszeiger nach außen bewegt wurde. Wird dann die Maustaste losgelassen, sorgt Windows selbst dafür, entsprechend dem besagten Standard, dass das Click-Ereignis auch nicht ausgelöst wird - der Schaltzustand bleibt eben unverändert.

Den Schalter-Zustand können Sie über die Tag-Eigenschaft jederzeit ähnlich der Value-Eigenschaft einer CheckBox auswerten:

Select Case imgSchalter.Tag 
  Case "0"
    ' Schalter ausgeschaltet
  Case "1"
    ' Schalter eingeschaltet
End Select

Beispiel-Projekt für OwnCheckCheck (VB 5) (owncheckbox5.zip - ca. 4,4 KB)
Beispiel-Projekt für OwnCheckCheck (VB 6) (owncheckbox6.zip - ca. 4,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