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 21.07.2000

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

Alternatives Label

Zurück...


Anzeige

(-hg) mailto:hg_drawstatustext@aboutvb.de

Sie können zwar ein Label-Steuerelement mit einem Rahmen versehen, indem Sie dessen BorderStyle-Eigenschaft auf 1 setzen. Aber dann erhalten Sie nur einen relativ "dicken" Rahmen, der nicht sonderlich elegant aussieht. Eleganter sieht ein Rahmen um einen Text aus, wie Sie ihn etwa in Statuszeilen sehen.

Mittel der API-Funktion MSDN Library - API DrawStatusTextDrawStatusText aus der ComCtl32.DLL können Sie solche Text-Anzeigeflächen einschließlich des Textes selbst zeichnen. Und im Gegensatz zum Label-Steuerelement kann der Rahmen hierbei auch erhaben sein. Ein weiterer Vorteil ist, dass der Text ohne weitere Berechnungen immer an der gleichen Position erscheint, wenn Sie zwischen flacher, versenkter und erhabener Darstellung wechseln möchten.


Ein Text mit einem eleganten versenkten oder erhabenen Rahmen

Die Prozedur DrawStatusRect kapselt den Aufruf der API-Funktion. Sie übergeben ihr das Objekt, in dem gezeichnet werden soll. Es muss mindestens die Eigenschaften hDC und ScaleMode sowie die Methoden ScaleX und ScaleY bieten. Lassen Sie die Angabe von Breite oder Höhe in den optionalen Parametern Width oder Height weg, werden die Höhe und die Breite unter Zugabe eines kleinen Freiraums automatisch berechnet. Dazu muss das Objekt zusätzlich über die Methoden TextWidth und TextHeight verfügen. Die Visual Basic-Objekte Form, PictureBox, UserControl, PropertyPage und UserDocument erfüllen alle diese Voraussetzungen. Die Umrechnung in Pixels für den Aufruf der API-Funktion erfolgt ebenfalls automatisch - Sie können die ScaleMode-Eigenschaft beliebig einstellen und die Positions- und Größenangaben in dieser Maßeinheit übergeben.

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Declare Sub DrawStatusTextAPI Lib "comctl32.dll" _
 Alias "DrawStatusTextA" (ByVal hDC As Long, DrawRect As RECT, _
 ByVal Text As String, ByVal Flags As Long)
Private Declare Sub InflateRect Lib "user32" _
 (lpRect As RECT, ByVal x As Long, ByVal y As Long)

Public Enum dstModeConstants
  dstSunken
  dstFlat = &H100
  dstRaised = &H200
End Enum

Public Sub DrawStatusText(Obj As Object, Text As String, _
 ByVal Left As Single, ByVal Top As Single, _
 Optional ByVal Width As Single, _
 Optional ByVal Height As Single, _
 Optional Mode As dstModeConstants, _
 Optional ByVal EraseRect As Boolean)

  Dim nWidth As Single
  Dim nHeight As Single
  Dim nRect As RECT
  Dim nRect2 As RECT
  
  With Obj
    If Width <= 0 Then
      nWidth = .TextWidth(Text) + .ScaleX(8, .ScaleMode, vbPixels)
    Else
      nWidth = Width
    End If
    If Height <= 0 Then
      nHeight = .TextHeight(Text) + .ScaleY(5, .ScaleMode, vbPixels)
    Else
      nHeight = Height
    End If
    nRect.Left = .ScaleX(Left, .ScaleMode, vbPixels)
    nRect.Top = .ScaleX(Top, .ScaleMode, vbPixels)
    nRect.Right = nRect.Left + .ScaleX(nWidth, .ScaleMode, vbPixels)
    nRect.Bottom = nRect.Top + .ScaleY(nHeight, .ScaleMode, vbPixels)
    If EraseRect Then
      If Mode = dstFlat Then
        LSet nRect2 = nRect
        InflateRect nRect2, 2, 2
        DrawStatusTextAPI .hDC, nRect2, "", dstFlat
      End If
    End If
    DrawStatusTextAPI .hDC, nRect, Text, Mode
  End With
End Sub

Im letzten optionalen Parameter EraseRect geben Sie an, ob vor dem Zeichnen mit der Einstellung dstFlat ein eventuell bereits an der gleichen Stelle vorhandener Rahmen gelöscht werden soll. Denn in dieser Einstellung wird nur eine um rundherum 1 Pixel kleinere Fläche gezeichnet. Dahinter steckt wohl ursprünglich die Absicht, dass Sie den Text wechseln können, ohne dass der Rahmen jedes Mal neugezeichnet werden muss.

Natürlich können Sie mit dieser Funktion auch ohne weiteres leere versenkte oder erhabene Rahmen zeichnen, wenn Sie einen leeren String übergeben.


Beispiel-Projekt und Modul modDrawStatusText (drawstatustext.zip - ca. 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