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 17.02.2000

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

Randbereiche einer TextBox

Zurück...


Anzeige

(-hg) mailto:hg_textboxrect@aboutvb.de

Die Abstände des Textinhalts zum Außenrand einer TextBox mit der Eigenschaft Multiline gleich True (oder einer RichTextBox) hin können Sie über die API-Nachrichten MSDN Library - API EM_GETRECTEM_GETRECT und MSDN Library - API EM_SETRECTEM_SETRECT ermitteln und festlegen. So können Sie beispielsweise auf der linken Seite eine Marginalspalte einrichten, die auf Mausereignisse reagieren kann - etwa zum Markieren von Zeilen oder Absätzen (solche Extra-Funktionalitäten für eine TextBox müssen Sie natürlich selbst programmieren).

Sie übergeben einer dieser Nachrichten zusammen mit einer benutzerdefinierten Variablen vom Typ Rect der API-Funktion MSDN Library - API SendMessageSendMessage. Bei EM_GETRECT enthält die Rect-Variable das innere Rechteck der TextBox. Ändern Sie diese Werte nach Belieben (auch negative Werte sind möglich) und rufen Sie SendMessage mit EM_SETRECT und übergeben die Rect-Variable mit den neuen Werten. Wenn Sie die Werte nur setzen möchten und Sie die vorherige Größe nicht interessiert, können Sie den Aufruf zur Ermittlung des Rechtecks auch weglassen. Ändern Sie die Größe der TextBox, verfallen die Randeinstellungen - Sie müssen Sie erneut vornehmen.

Mit der Hilfs-Funktion TextBoxMargins legen Sie die Randbereiche der im ersten Parameter übergebenen TextBox fest. Lassen Sie einen der folgenden optionalen Rand-Parameter weg, wird der vorhandene Wert beibehalten. Im letzten Parameter ScaleMode geben Sie an, ob die übergeben Rand-Werte in der Maßeinheit vbPixels (Voreinstellung) oder vbTwips sind.

Public Type Rect
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Declare Function LockWindowUpdate Lib "user32" _
 (ByVal hwndLock As Long) As Long
Private Declare Function GetParent Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" _
 Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
 ByVal wParam As Long, lParam As Any) As Long

Private Const EM_GETRECT = &HB2
Private Const EM_SETRECT = &HB3

Public Sub TextBoxMargins(TextBox As TextBox, _
 Optional ByVal LeftMargin As Variant, _
 Optional ByVal TopMargin As Variant, _
 Optional ByVal RightMargin As Variant, _
 Optional ByVal BottomMargin As Variant, _
 Optional ByVal ScaleMode As Integer = vbPixels)

  Dim nRect As Rect
  
  TextBoxResetRect TextBox
  With TextBox
    SendMessage .hwnd, EM_GETRECT, 0, nRect
    Select Case ScaleMode
      Case vbPixels
        With nRect
          If Not IsMissing(LeftMargin) Then
            .Left = LeftMargin
          End If
          If Not IsMissing(TopMargin) Then
            .Top = TopMargin
          End If
          If Not IsMissing(RightMargin) Then
            .Right = .Right - RightMargin
          End If
          If Not IsMissing(BottomMargin) Then
            .Bottom = .Bottom - BottomMargin
          End If
        End With
      Case vbTwips
        With nRect
          If Not IsMissing(LeftMargin) Then
            .Left = LeftMargin \ Screen.TwipsPerPixelX
          End If
          If Not IsMissing(TopMargin) Then
            .Top = TopMargin \ Screen.TwipsPerPixelY
          End If
          If Not IsMissing(RightMargin) Then
            .Right = .Right - _
             (RightMargin \ Screen.TwipsPerPixelX)
          End If
          If Not IsMissing(BottomMargin) Then
            .Bottom = .Bottom - _
              (BottomMargin \ Screen.TwipsPerPixelY)
          End If
        End With
      Case Else
        Exit Sub
    End Select
    SendMessage .hwnd, EM_SETRECT, 0, nRect
  End With
End Sub

Ein Aufruf der Hilfs-Prozedur TextBoxResetRect stellt die Standard-Einstellungen der Randbereiche wieder her. Da es keine andere Möglichkeit zu geben scheint, dies ebenfalls per API-Aufruf zu erledigen, machen wir uns den Umstand zunutze, dass bei einer Größenänderung der TextBox die Einstellungen automatisch zurückgesetzt werden. Wir setzen die Breite der TextBox kurzzeitig auf 1 und sogleich wieder auf die vorherige Breite zurück. Damit dies nicht sichtbar wird, sperren wir mit dem Aufruf der API-Funktion MSDN Library - API LockWindowUpdateLockWindowUpdate vorübergehend die Aktualisierung des Fensters bzw. Container-Elements, in dem die TextBox enthalten ist. Dessen Fenster-Handle zur Übergabe an LockWindowUpdate ermitteln wir mit der API-Funktion MSDN Library - API GetParentGetParent.

Public Sub TextBoxResetRect(TextBox As TextBox)
  Dim nWidth As Single

  With TextBox
    LockWindowUpdate GetParent(.hwnd)
    nWidth = .Width
    .Width = 1
    .Width = nWidth
    LockWindowUpdate 0
  End With
End Sub

Das im Beispiel-Projekt (siehe Download) enthaltene Modul enthält zusätzlich (auskommentierte) Aufrufe dieser Funktionen, bei denen der Datentyp des Übergabeparameters TextBox als RichTextBox deklariert ist.


Beispiel-Projekt TextBoxRectTest (textboxrect.zip - ca. 3,4 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikel

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