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 11.06.2001

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

Combo-Höhensetzer

Zurück...


Anzeige

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

Visual Basic verwehrt Ihnen die Möglichkeit, die Höhe einer ComboBox bzw. die Höhe des Eingabefeldes zu ändern - sie ist immer abhängig von der gewählten Schriftgröße. Allerdings lässt sich die Höhe zur Laufzeit über die Nachricht MSDN-Library - API CB_SETITEMHEIGHTCB_SETITEMHEIGHT und die API-Funktion MSDN-Library - API SendMessageSendMessage setzen.

Am besten verpacken Sie den Aufruf in eine Hilfs-Funktion (ComboHeight). Sie können dann ein paar weitere Kleinigkeiten gleich mit erledigen und erhalten die vorhergehende Höhe als Rückgabewert, so dass Sie später die ursprüngliche Höhe jederzeit wieder herstellen können.

Sie übergeben im ersten Parameter die betreffende ComboBox und im zweiten Parameter die gewünschte Höhe. Im weiteren 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 ComboBox 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.

Da sich die an die Funktion SendMessage zu übergebende Höhe direkt auf die Höhe des Eingabefeldes ohne den Rahmen der ComboBox bezieht, ist von der zuvor errechneten Pixelhöhe noch die Differenz abzuziehen. Um den Betrag dieser Differenz zu ermitteln, muss zunächst die tatsächliche Höhe der ComboBox ermittelt werden.

Dazu werden vor der Änderung durch einen Aufruf von SendMessage mit der Nachricht MSDN-Libraray - API CB_GETITEMHEIGHTCB_GETITEMHEIGHT die Höhe des Eingabefeldes und mittels der API-Funktion MSDN-Library - API GetWindowRectGetWindowRect das Rechteck der ComboBox ermittelt. Die Höhe der ComboBox in Pixels ergibt sich aus der Differenz der Elemente Bottom und Top des Rechtecks. Die abzuziehende Differenz zur Setzung der Höhe des Eingabefeldes ergibt sich dann aus der Differenz der ermittelten Eingabefeldhöhe und der Höhe der ComboBox.

Damit Sie die Höhe der ComboBox gegebenenfalls wieder auf die ursprüngliche Höhe zurück setzen können, gibt die Funktion ComboHeight die zu Beginn ermittelte Höhe zurück - wieder dem ScaleMode entsprechend umgerechnet.

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

Private Declare Function GetWindowRect Lib "user32" _
 (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SendMessageLong Lib "user32" _
 Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
 ByVal wParam As Long, ByVal lParam As Long) As Long

Public Function ComboHeight(Combo As ComboBox, _
 ByVal Height As Single, Optional ByVal ScaleMode = -1) _
 As Single

  Dim nHeight As Long
  Dim nScaleMode As Integer
  Dim nHeightDiff As Long
  Dim nRect As RECT
  Dim nOldHeight As Long
  Dim nOldComboHeight As Long
  
  Const CB_GETITEMHEIGHT = &H154
  Const CB_SETITEMHEIGHT = &H153
  
  With Combo
    GetWindowRect .hwnd, nRect
    nOldHeight = SendMessageLong(.hwnd, CB_GETITEMHEIGHT, -1, 0)
    nOldComboHeight = nRect.Bottom - nRect.Top
    nHeightDiff = nOldComboHeight - nOldHeight
    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
        ComboHeight = nOldComboHeight
      Else
        nHeight = Height \ Screen.TwipsPerPixelY
        ComboHeight = nOldComboHeight * Screen.TwipsPerPixelY
      End If
    Else
      ComboHeight = _
       .Parent.ScaleY(nOldComboHeight, vbPixels, nScaleMode)
    End If
    On Error GoTo 0
    SendMessageLong .hwnd, CB_SETITEMHEIGHT, -1, _
     nHeight - nHeightDiff
  End With
End Function

Modul modComboHeight (modComboHeight.bas - ca. 2 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