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 18.05.2001

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

Höhensetzer

Zurück...


Anzeige

Thorsten Dörfler mailto:doerfler.t@bdsw.de/(-hg) mailto:hg_textboxheight@aboutvb.de

Visual Basic verwehrt Ihnen die Möglichkeit, die Höhe einer TextBox unter ein vor der aktuellen Schriftgröße der TextBox bestimmtes Maß zu verringern. Wenn Sie eine geringere Höhe setzen, wird die Höhe wieder automatisch auf diese Vorgabehöhe zurückgesetzt.

Zum einen können Sie diesen Effekt dazu nutzen, eine beim Anlegen in einem Formular zu hoch geratene TextBox wieder auf die Standard-Höhe zurückzusetzen. Sie brauchen lediglich im Eigenschaften-Fenster die Height-Eigenschaft auf 1 zu setzen.

Zum anderen gibt es natürlich einen Weg, eine TextBox in eine individuell gewünschte Höhe zu zwingen. Setzen Sie nämlich die Höhe über die API-Funktion MSDN-Library - API SetWindowPosSetWindowPos, wird die VB-Automatik außer Kraft gesetzt, so lange Sie nicht erneut die Höhe über die Eigenschaft Height der TextBox setzen.

Am besten verpacken Sie den Aufruf in eine Hilfs-Prozedur (TextBoxHeight). Sie können dann ein paar weitere Kleinigkeiten gleich mit erledigen.

So erwartet SetWindowPos die ausdrückliche Angabe, ob das betreffende Steuerelement (Fenster) nach dem Aufruf aktiviert oder deaktiviert sein soll - im Falle eines Steuerelements wie bei der TextBox also, ob es den Fokus erhalten soll oder nicht. Falls nicht, ist das Flag SWP_NOACTIVATE zu setzen. Falls sich der aktuelle Fokus nicht ändern soll, unabhängig davon, ob die TextBox gerade den Fokus inne hat oder ein anderes Steuerelement, ermitteln Sie vor dem Aufruf von SetWindowsPos den aktuellen Fokus-Inhaber mit der API-Funktion MSDN-Library - API GetFocusGetFocus. Ist das von dieser Funktion gelieferte Fenster-Handle ungleich dem der TextBox, so hat diese nicht den Fokus inne, und das Flag SWP_NOACTIVATE wird gesetzt. Sie können aber auch den optionalen Parameter Activate von TextBoxHeight auf True setzen, wenn die TextBox mit dem Aufruf auf jeden Fall den Fokus erhalten soll.

Im ebenfalls optionalen Parameter ScaleMode können Sie angeben, welche Maßeinheit für die Höhenangabe gelten soll. Wenn Sie die Voreinstellung -1 belassen, wird versucht, über die ScaleMode-Einstellung des Containers zu ermitteln. Sollte dies fehlschlagen, werden TWIPS angenommen.

In jedem Fall muss die Höhenangabe in Pixels umgerechnet werden. Sollte das Parent-Objekt der TextBox nicht über die dazu benötigte ScaleY-Methode verfügen, wird für den Fall, dass Sie in ScaleMode explizit Pixels (Konstante vbPixels) gewünscht haben sollten, der Wert im Parameter Height als bereits in Pixels vorliegend betrachtet und verwendet. Anderenfalls wird von der VB-Standard-Maßeinheit TWIPS ausgegangen.

Das Zurücksetzen auf die von automatisch von Visual Basic vorgegebene Höhe der TextBox erreichen Sie, indem sie den (dazu optional deklarierten) Parameter Height weglassen (die weiteren, nachfolgenden Parameter erübrigen sich dann sowieso), oder auf einen Wert kleiner oder gleich 0 setzen.

Private Declare Function SetWindowPos Lib "user32" _
 (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
 ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
 ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetFocus Lib "user32" () As Long

Public Sub TextBoxHeight(TextBox As TextBox, _
 Optional ByVal Height As Single, _
 Optional ByVal Activate As Variant, _
 Optional ByVal ScaleMode As Integer = -1)

  Dim nHeight As Long
  Dim nScaleMode As Integer
  Dim nFlags As Long
  
  Const SWP_NOMOVE = &H2
  Const SWP_NOZORDER = &H4
  Const SWP_NOACTIVATE = &H10
  
  With TextBox
    If Height < 1 Then
      .Height = 1
      Exit Sub
    Else
      If ScaleMode = -1 Then
        On Error Resume Next
        nScaleMode = .Container.ScaleMode
        If Err.Number Then
          nScaleMode = vbTwips
        End If
        On Error GoTo 0
      Else
        nScaleMode = ScaleMode
      End If
      On Error Resume Next
      nHeight = .Parent.ScaleY(Height, nScaleMode, vbPixels)
      If Err.Number Then
        If ScaleMode = vbPixels Then
          nHeight = Height
        Else
          nHeight = Height \ Screen.TwipsPerPixelY
        End If
      End If
      On Error GoTo 0
    End If
    If IsMissing(Activate) Then
      If GetFocus() = .hwnd Then
        nFlags = SWP_NOMOVE Or SWP_NOZORDER
      Else
        nFlags = SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOACTIVATE
      End If
    Else
      If Activate Then
        nFlags = SWP_NOMOVE Or SWP_NOZORDER
      Else
        nFlags = SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOACTIVATE
      End If
    End If
    SetWindowPos .hwnd, 0, 0, 0, .Width \ Screen.TwipsPerPixelX, _
     nHeight, nFlags
  End With
End Sub

Beispiel-Projekt und Modul modTextBoxHeight (textboxheight.zip - ca. 3,3 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