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-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Suche Visual-Basic Code
Dabei ist das doch Kinderleicht:  
Autor: unbekannt
Datum: 29.08.01 20:06

Für die Liebhaber von Flach-Buttons machen wir vorab mal ein einfacheres Button "fertig". Das Button soll eigentlich nicht viel können, bis eben auf Click oder nicht Click, außerdem eine Caption-Eigenschaft haben. Im Moment ist ja unser neues Button sowieso Flach. Wenn das Button angeklickt wird, muß es sich versenken und wieder "aufsteigen". Wenn der Mauspfeil auf dem Control liegt, soll ein Rahmen angezeigt werden. Natürlich wird das mit den Mouse-Events des UserControl realisiert.


Private Sub UserControl_LostFocus()
   DrawWidth = 2
   Line (0, 0)-(ScaleWidth, ScaleHeight), BackColor, B
   DrawWidth = 1
End Sub
 
Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
   BorderStyle = 1
End Sub
 
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
   DrawWidth = 2
   Line (0, 0)-(ScaleWidth, ScaleHeight), ForeColor, B
   DrawWidth = 1
End Sub
 
Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
   BorderStyle = 0
End Sub
Als Schluß "schenken" wir unserem "Flach"-Control noch eine Inschrift, die Caption-Eigenschaft. Außerdem wollen wir noch zulassen, das die Back- und Forecolor-Eigenschaften eingestellt werden können. Alle Eigenschaften des UserControl-Objects, die wir also freigeben wollen, müssen wir mit Public - Property erst "Freigeben", damit sie von außerhalb geändert werden können. Das ist Kapselung.


Public Property Get BackColor() As Long
   BackColor = UserControl.BackColor
End Property
 
Public Property Let BackColor(ByVal vNewValue As Long)
    If Not IsNumeric(vNewValue) Then Exit Property
    UserControl.BackColor = vNewValue
End Property
 
Public Property Get ForeColor() As Long
   ForeColor = UserControl.ForeColor
End Property
 
Public Property Let ForeColor(ByVal vNewValue As Long)
   If Not IsNumeric(vNewValue) Then Exit Property
   UserControl.ForeColor = vNewValue
End Property
Die beiden obigen Beispiele machen die "Freigabe" der Eigenschaften des Usercontrol deutlich. Es tritt hier die Property Let und die Property Get immer paarweise auf. Dies bedeutet, dass man von "außen" einen Lese- und Schreibzugriff auf diese Eigenschaften hat. Würde nur Let genannt, so kann diese Eigenschaft nur geschrieben werden. Tritt nur Get auf, so handelt es sich um eine Eigenschaft, die nur gelesen werden kann.


Hinweis: In der IDE können im Menü Extras, Prozedur hinzufügen, die Let/Get-Paare bequem hinzugefügt werden


Die Caption-Eigenschaft kennt das UserControl-Object nicht, sie ist jetzt eine völlig neue Eigenschaft. Wir müssen somit dem Control erklären, was zu tun ist, wenn diese Eigenschaft gesetzt wird. Da Caption gelesen und geschreiben werden kann, ein Get/Let-Paar.


Private tmpCaption As Variant
 
Public Property Get Caption() As Variant
    Caption = tmpCaption
End Property
 
Public Property Let Caption(ByVal vNewValue As Variant)
    Dim x As Long, y As Long, ux As Long, uy As Long
    If vNewValue = "" Then Exit Property
    x = UserControl.TextWidth(vNewValue)
    y = UserControl.TextHeight(vNewValue)
    ux = ScaleWidth
    uy = ScaleHeight
    Cls
    If x >= ux Then
        CurrentX = 0
    Else
        CurrentX = Int(ux / 2) - Int(x / 2)
    End If
    If y >= uy Then
        CurrentY = 0
    Else
        CurrentY = Int(uy / 2) - Int(y / 2)
    End If
    Usercontrol.AutoRedraw=True
    UserControl.Print vNewValue
    UserControl.AutoRedraw = False
    tmpCaption = vNewValue
End Property
Zusammenfassung einer ganz einfachen, flachen Schaltfläche ohne viel 'Drum und 'Dran:


Private tmpCaption As Variant
Public Event Click()
 
Private Sub UserControl_Click()
    RaiseEvent Click()
End Sub
 
Private Sub UserControl_LostFocus()
   DrawWidth = 2
   Line (0, 0)-(ScaleWidth, ScaleHeight), BackColor, B
   DrawWidth = 1
End Sub
 
Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
   BorderStyle = 1
End Sub
 
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
   DrawWidth = 2
   Line (0, 0)-(ScaleWidth, ScaleHeight), ForeColor, B
   DrawWidth = 1
End Sub
 
Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As _
  Single, Y As Single)
   BorderStyle = 0
End Sub
 
Public Property Get BackColor() As Long
   BackColor = UserControl.BackColor
End Property
 
Public Property Let BackColor(ByVal vNewValue As Long)
    If Not IsNumeric(vNewValue) Then Exit Property
    UserControl.BackColor = vNewValue
End Property
 
Public Property Get ForeColor() As Long
   ForeColor = UserControl.ForeColor
End Property
 
Public Property Let ForeColor(ByVal vNewValue As Long)
   If Not IsNumeric(vNewValue) Then Exit Property
   UserControl.ForeColor = vNewValue
End Property
 
Public Property Get Caption() As Variant
    Caption = tmpCaption
End Property
 
Public Property Let Caption(ByVal vNewValue As Variant)
    Dim x As Long, y As Long, ux As Long, uy As Long
    If vNewValue = "" Then Exit Property
    x = UserControl.TextWidth(vNewValue)
    y = UserControl.TextHeight(vNewValue)
    ux = ScaleWidth
    uy = ScaleHeight
    Cls
    If x >= ux Then
        CurrentX = 0
    Else
        CurrentX = Int(ux / 2) - Int(x / 2)
    End If
    If y >= uy Then
        CurrentY = 0
    Else
        CurrentY = Int(uy / 2) - Int(y / 2)
    End If
    Usercontrol.AutoRedraw=True
    UserControl.Print vNewValue
    UserControl.AutoRedraw=False
    tmpCaption = vNewValue
End Property
Eine flache Schaltfläche, die einen Rahmen bekommt, wenn der Mauspfeil auf das Object zeigt, es vertieft sich, wenn das Object angeklickt wird und löst ein Click-Ereignis aus. Es kann mit einer Schrift "beschriftet" werden,wobei auch noch die Hinter- und Vordergrundfarbe eingestellt werden kann. DONE!


Was wir da - als einfaches Beispiel aufgezeigt haben, ist ein sogenanntes selbstzeichnendes Steuerelement. Es benötigt keinerlei "Zutaten", etwa in Form anderer Controls. Möchte man aber ein Steuerelement erstellen, das gar Bilder mit verarbeitet, wäre es sinnlos, sich in den Code für die Umsetzung von Bilddateien zu stürzen, da es dafür ja bekanntlich genug Controls gibt - und: Warum das Rad zwei Mal erfinden? Es ist also möglich, wie in einer Form auch, auf einem UserControl andere Controls einzufügen und deren Funktionalität zu übernehmen. Solch ein Steuerelement, dass andere Steuerelemente enthält, wird konstituierendes Steuerelement genannt. Wesentlich dabei aber ist, dass die Eigenschaften und Methoden, als auch die Ereignisse des "einverleibten" Controls völlig vom UserControl-Object gekapselt werden. Auf die Eigenschaften, Methoden und Ereignisse konstituierter Controls kann von außen nur dann zugegriffen werden, wenn sie "Freigegeben" - also Eigenschaften, Methoden und Ereignisse des Usercontrol-Objects sind.


Sie können aber nur die Controls konstituieren, für die Sie auch eine
Entwicklerlizenz haben - sprich: Die Sie in Ihren Projekten einbinden und weitergeben können/dürfen. Sprich: Damit eine etwaige Lizenzierung zu umgehen - scheitert. Aus den o.g. Ereignissen wird deutlich, dass jedes Control "merkt" ob es sich in einem ActiveX-Designer befindet oder nicht.


Im obigen Beispiel hätten wir auch ein Label einfügen können, das die Schrift ausgibt und in diesem Fall hätte die Caption-Eigenschaft wie folgt ausgesehen:



Public Property Let Caption(Byval vValue As Variant)
Label1.Caption = vValue
End Property
Also wäre in das Usercontrol Caption als Eigenschaft eingefügt worden und über diese Eigenschaften-Prozedur wäre die Caption-Eigenschaft des "einverleibten" Label belegt worden.

Eine runde Schaltfläche?


Na - Was ist ein Usercontrol? - natürlich ein Window.

Private Declare Function CreateEllipticRgn Lib "gdi32" _
   (ByVal x1 As Long, _
    ByVal y1 As Long, _
    ByVal x2 As Long, _
    ByVal y2 As Long) As Long
 
Private Declare Function SetWindowRgn Lib "user32" _
   (ByVal hWnd As Long, _
    ByVal hRgn As Long, _
    ByVal bRedraw As Boolean) As Long
 
Private Sub UserControl_Resize()
   UserControl.ScaleMode = 3
   SetWindowRgn UserControl.hWnd, CreateEllipticRgn(0, 0, _
     ScaleWidth,ScaleHeight), True
   UserControl.ScaleMode = 1
End Sub
Es wird dann wohl Ihrer Phantasie überlassen sein, ob und wie Sie die Rahmen evtl. selbst zeichnen lassen (Circle ... etc). Lassen Sie die Rahmen Zeichnung weg, machen einen schönen blauen Backcolor und schon zappelt ein blauer Ball in Ihrer Application, wenn der Anwender darauf klickt.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Keisrunde Buttons..?141Spleiser28.08.01 21:24
Re: Keisrunde Buttons..?75Spleiser28.08.01 21:41
Re: Keisrunde Buttons..?538unbekannt28.08.01 21:54
Dabei ist das doch Kinderleicht: 707unbekannt29.08.01 20:06
Vielen, Vielen Dank....!!!71Spleiser29.08.01 22:45
Anmerkung: VB@RCHIV:469unbekannt29.08.01 23:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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