Deklaration: Declare Function DrawText Lib "user32" _ Alias "DrawTextA" ( _ ByVal hDC As Long, _ lpStr As String, _ ByVal nCount As Long, _ lpRect As RECT, _ ByVal wFormat As Long) As Long Beschreibung: Parameter:
wFormat Konstanten: Const DT_BOTTOM = &H8 ' Der Text wird am unterem Rand ausgerichtet (Nur in Verbindung mit DT_SINGLELINE) Const DT_CALCRECT = &H400 ' Die Funktion füllt die RECT-Struktur mit den Koordinaten, die für das ' Zeichnen des Textes benötigt werden, zeichnet den Text aber nicht Const DT_CENTER = &H1 ' Der Text wird horizontal zentriert Const DT_EDITCONTROL = &H2000 ' Zeichnet den Text, wie es eine Textbox tun würde, nur teilweise sichtbare ' Zeilen bei zu knapp berechneten übergebenen Koordinaten werden nicht gezeichnet Const DT_END_ELLIPSIS = &H8000 ' Der übergebene Puffer mit dem zu zeichnenden Text wird mit dem Text ' gefüllt, der nicht in angegebenen Koordinaten dargestellt werden kann (Nur ' in Verbindung mit DT_MODIFYSTRING) Const DT_EXPANDTABS = &H40 ' Zeichnet TAB-Zeichen mit 8 Leerzeichen (Nicht in Verbindung mit ' DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS und DT_END_ELLIPSIS) Const DT_EXTERNALLEADING = &H200 ' Fügt jeder Zeile die Höhe der Externen Führung hinzu Const DT_HIDEPREFIX = &H100000 ' (Windows 2000/XP) Zeichnet die auf einem &-Zeichen folgenden Unterstriche ' nicht, die &-Zeichen werden aber wie bisher ausgeblendet Const DT_INTERNAL = &H1000 ' Benutzt die Systemschriftart um die benötigten Koordinaten zu berechnen Const DT_LEFT = &H0 ' Der Text wird links ausgerichtet Const DT_MODIFYSTRING = &H10000 ' Der übergebene Puffer wird mit den Wörtern oder Zeichen gefüllt die aus ' Platzmangel nicht gezeichnet werden konnten (Nur in Verbindung mit ' DT_END_ELLIPSIS oder DT_PATH_ELLIPSIS) Const DT_NOCLIP = &H100 ' Der Text wird an den angegebenen Koordinaten nicht abgeschnitten falls der ' Platz nicht ausreichend ist Const DT_NOFULLWIDTHCHARBREAK = &H80000 ' (Windows 98, ME, NT, 2000, XP) Es werden Doppelzeichen für Zeilenumbrüche ' verwendet (nicht in Verbindung mit DT_WORDBREAK) Const DT_NOPREFIX = &H800 ' Zeichnet die auf einem &-Zeichen folgendenden Unterstriche nicht, die ' &-Zeichen werden normal angezeigt Const DT_PATH_ELLIPSIS = &H4000 ' Ersetzt Buchstaben in der Mitte des übergebenen Strings damit er in den ' Koordinaten gezeichnet werden kann (nur in Verbindung mit DT_MODIFYSTRING) Const DT_PREFIXONLY = &H200000 ' (Windows 2000, XP) Zeichnet bei Verwendung von &-Zeichen nur die Unterstriche Const DT_RIGHT = &H2 ' Der Text wird rechts ausgerichtet Const DT_RTLREADING = &H20000 ' Der Text wird von Rechts nach Links gezeichnet wenn ein Hebräischer Font gesetzt ist Const DT_SINGLELINE = &H20 ' Der Text wird in einer einzelnen Zeile gezeichnet, VBCrLf-Zeichen werden ignoriert Const DT_TABSTOP = &H80 ' Setzt die Anzahl der Leerzeichen für ein Tab-Zeichen, die Bits 8 bis 15 ' erwarten die Anzahl der Leerstellen Const DT_TOP = &H0 ' Der Text wird oben ausgerichtet Const DT_VCENTER = &H4 ' Der Text wird vertikal zentriert (nur in Verbindung mit DT_SINGLELINE) Const DT_WORDBREAK = &H10 ' Ist eine Zeile zu lange für die angegebenen Koordinaten, so wird zwischen ' den benötigten Wörtern ein VBCrLf-Zeichen eingefügt Const DT_WORD_ELLIPSIS = &H40000 ' Der übergebene Puffer wird mit den Wörtern gefüllt die in den angegebenen ' Koordinaten aus Platzgründen nicht dargestellt werden konnten Rückgabewert: Beispiel: Private Declare Function DrawCaption Lib "user32" ( _ ByVal hWnd As Long, _ ByVal hDC As Long, _ pcRect As RECT, _ ByVal uFlags As Long) As Long Private Declare Function DrawEdge Lib "user32" ( _ ByVal hDC As Long, _ qrc As RECT, _ ByVal edge As Long, _ ByVal grfFlags As Long) As Long Private Declare Function DrawFocusRect Lib "user32" ( _ ByVal hDC As Long, _ lpRect As RECT) As Long Private Declare Function DrawFrameControl Lib "user32" ( _ ByVal hDC As Long, _ lpRect As RECT, _ ByVal uType As Long, _ ByVal uState As Long) As Long Private Declare Function DrawText Lib "user32" _ Alias "DrawTextA" ( _ ByVal hDC As Long, _ lpStr As String, _ ByVal nCount As Long, _ lpRect As RECT, _ ByVal wFormat As Long) As Long Private Declare Function SetRect Lib "user32" ( _ lpRect As RECT, _ ByVal X1 As Long, _ ByVal Y1 As Long, _ ByVal X2 As Long, _ ByVal Y2 As Long) As Long Private Declare Function PtInRect Lib "user32.dll" ( _ lpRect As RECT, _ ByVal x As Long, _ ByVal y As Long) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' DrawText wFormat-Konstanten Private Const DT_CENTER = &H1 ' Der Text wird horizontal Zentriert Private Const DT_SINGLELINE = &H20 ' Der Text wird in einer einzelnen Zeile ' gezeichnet, VBCrLf-Zeichen werden ignoriert Private Const DT_VCENTER = &H4 ' Der Text wird vertikal Zentriert (nur in ' Verbindung mit DT_SINGLELINE) ' DrawFrameControl uState-Konstanten Private Const DFCS_BUTTONPUSH = &H10 ' (DFC_BUTTON) Standard Button Private Const DFCS_CAPTIONCLOSE = &H0 ' (DFC_CAPTION) Schließensymbol der Titelleiste Private Const DFCS_FLAT = &H4000 ' Das Objekt ist flach Private Const DFCS_PUSHED = &H200 ' Das Objekt ist gedrückt ' DrawFrameControl uType-Konstanten Private Const DFC_BUTTON = 4 ' Standard Button Private Const DFC_CAPTION = 1 ' Titelleiste ' DrawEdge grfFlags-Konstanten Private Const BF_TOP = &H2 ' Der obere Rahmen wird gezeichnet Private Const BF_RIGHT = &H4 ' Der rechte Rahmen wird gezeichnet Private Const BF_LEFT = &H1 ' Der linke Rahmen wird gezeichnet Private Const BF_BOTTOM = &H8 ' Der untere Rahmen wird gezeichnet Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM) ' Es werden alle Seiten des Rahmens gezeichnet ' DrawEdge edge-Konstanten Private Const BDR_RAISEDOUTER = &H1 ' Der äußere Rahmen steigt an Private Const BDR_SUNKENINNER = &H8 ' Der innere Rahmen sinkt ab Private Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER) ' Eine Kombination aus BDR_RAISEDOUTER und BDR_SUNKENINNER ' DrawCaption uFlags-Konstanten Private Const DC_ACTIVE = &H1 ' Zeichnet eine aktive Titelleiste Private Const DC_GRADIENT = &H20 ' (ab Windows 98) Benutz den Verlauf für ' die Titelleiste Private Const DC_ICON = &H4 ' Zeichnet das Icon in der Titelleiste (VB macht ' da einen Strich durch, wenn das Fenster keinen Rahmen hat) Private Const DC_TEXT = &H8 ' Zeichnet den Text für die Titelleiste Dim TitelBar As RECT, TBClose As RECT, CloseState As Long, WorkArea As RECT Dim CMDButton As RECT, ButtonState As Long, CMDHaveFocus As Boolean, _ FoucsRect As RECT ' Fensterbereiche festlegen ' (Eigenschaft setzen nicht vergessen: Me.BorderStyle = 0 und ' Me.ShowInTaskbar = True) Private Sub Form_Load() Dim Retval As Long Me.ScaleMode = vbPixels ' Titelleiste setzen Retval = SetRect(TitelBar, 0, 0, Me.ScaleWidth, 18) ' Titelleistenbutton setzen Retval = SetRect(TBClose, Me.ScaleWidth - 18, 2, Me.ScaleWidth - 2, 16) ' Arbeitsbereich setzen Retval = SetRect(WorkArea, 0, 18, Me.ScaleWidth - 1, Me.ScaleHeight) ' Commandbutton setzen Retval = SetRect(CMDButton, (Me.ScaleWidth / 2) - 80, (Me.ScaleHeight _ / 2) - 30, Me.ScaleWidth / 2, Me.ScaleHeight / 2) ' Fokusrechteck des Commandbutton setzen Retval = SetRect(FoucsRect, (Me.ScaleWidth / 2) - 78, (Me.ScaleHeight _ / 2) - 28, Me.ScaleWidth / 2 - 2, Me.ScaleHeight / 2 - 2) End Sub ' Zeichnen der Objekte Private Sub Form_Paint() Dim Retval As Long ' Titelleiste zeichnen Retval = DrawCaption(Me.hWnd, Me.hDC, TitelBar, DC_ACTIVE Or _ DC_GRADIENT Or DC_ICON Or DC_TEXT) ' Titelleisten Button zeichnen Retval = DrawFrameControl(Me.hDC, TBClose, DFC_CAPTION, _ DFCS_CAPTIONCLOSE Or CloseState) ' Arbeitsbereich zeichnen Retval = DrawEdge(Me.hDC, WorkArea, EDGE_BUMP, BF_RECT) ' Commandbutton zeichnen Retval = DrawFrameControl(Me.hDC, CMDButton, DFC_BUTTON, _ DFCS_BUTTONPUSH Or ButtonState) ' Text des Commandbuttons Zeichnen Retval = DrawText(Me.hDC, ByVal "Command1", Len("Command1"), _ CMDButton, DT_CENTER Or DT_VCENTER Or DT_SINGLELINE) ' Focus zeichnen ? If CMDHaveFocus Then Retval = DrawFocusRect(Me.hDC, FoucsRect) End If End Sub ' Buttonveräderungen anzeigen Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As _ Single, y As Single) Select Case 1 Case PtInRect(CMDButton, x, y) If ButtonState = 0 Then ButtonState = DFCS_FLAT Me.Refresh End If Case PtInRect(TBClose, x, y) If CloseState = 0 Then CloseState = DFCS_FLAT Me.Refresh End If Case Else If ButtonState = DFCS_FLAT Then ButtonState = 0 Me.Refresh End If If CloseState = DFCS_FLAT Then CloseState = 0 Me.Refresh End If End Select End Sub ' Klick eines Buttons simulieren Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As _ Single, y As Single) Select Case 1 Case PtInRect(CMDButton, x, y) ButtonState = DFCS_PUSHED Me.Refresh Case PtInRect(TBClose, x, y) CloseState = DFCS_PUSHED CMDHaveFocus = False Me.Refresh End Select End Sub ' Ereignis beim Klicken eines Buttons auslösen Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, _ y As Single) Select Case 1 Case PtInRect(CMDButton, x, y) ButtonState = 0 CMDHaveFocus = True Me.Refresh MsgBox "Sie haben Command1 gedrückt" Case PtInRect(TBClose, x, y) CloseState = 0 Me.Refresh Unload Me Case Else ButtonState = 0 CloseState = 0 Me.Refresh End Select End Sub Diese Seite wurde bereits 14.674 mal aufgerufen. |
TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... Buchempfehlung Tipp des Monats ![]() LonelySuicide666 System-Namen gedrückter Tasten ermitteln Ein Beispiel, wie sich der System-Name einer gedrückten Taste ermitteln lässt. Neu! sevEingabe 3.0 ![]() Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||||||
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. |