Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ComboBox max. sichtbare Einträge einstellen (ListRows)

83 views
Skip to first unread message

Uwe Hübner

unread,
Apr 8, 2002, 11:41:38 AM4/8/02
to
Hallo Leute,

in einem VB6-Form (WinNT 4.0, VB 6.0 SP5) habe ich eine einfache
ComboBox. Diese zeigt standardmäßig maximal 8 Einträge gleichzeitig an.
In Access (Access 2000) gibt es die Möglichkeit, diese Anzahl per
ListRows-Eigenschaft (fast) beliebig zu ändern. In VC++ kann diese
Eigenschaft z.T. sogar grafisch per Maus zurechtgezogen werden
(wenigstens in MFC-Dialogressourcen ;-). Gibt es in VB6 auch diese
Möglichkeit? Ein Beispiel per API habe ich zwar gefunden - ca. 30
Codezeilen :-( - geht es wirklich nicht einfacher?

Hoffend auf gute Tips,
Gruß - Uwe.

Andre Wagener

unread,
Apr 8, 2002, 1:57:45 PM4/8/02
to
Hallo Uwe

> Ein Beispiel per API habe ich zwar gefunden - ca. 30
> Codezeilen :-( - geht es wirklich nicht einfacher?

Wenn es nur um eine ComboBox geht leider nein.
Wenn du dies öfter brauchst wurde ich ein Usercontrol
erstellen.

CU Andre

Harald M. Genauck

unread,
Apr 8, 2002, 4:00:12 PM4/8/02
to
Hallo Andre,

Was aber sicher erheblich mehr 30 Zeilen an Aufwand erfordern wird - vor
allem, wenn der Ausklappteil sich wie das Original verhalten soll und
ebenso das "Mutter"-Form nicht deaktiviert, aber trotzdem über diesem steht
und dessen Ränder überragen kann...

Viele Grüße

Harald M. Genauck

ABOUT Visual Basic - das Webmagazin
http://www.aboutvb.de


Andre Wagener

unread,
Apr 8, 2002, 6:37:57 PM4/8/02
to
Hallo Harald

> Was aber sicher erheblich mehr 30 Zeilen an Aufwand erfordern wird - vor
> allem, wenn der Ausklappteil sich wie das Original verhalten soll und
> ebenso das "Mutter"-Form nicht deaktiviert, aber trotzdem über diesem
steht
> und dessen Ränder überragen kann...

Jenachdem wie oft er diese Sache braucht wäre es meiner meinung nach
trotzdem eine gute Alternative.

CU Andre

Uwe Hübner

unread,
Apr 9, 2002, 4:55:14 AM4/9/02
to
Moin Andre und Harald,

>>Was aber sicher erheblich mehr 30 Zeilen an Aufwand erfordern wird - vor
>>allem, wenn der Ausklappteil sich wie das Original verhalten soll und
>>ebenso das "Mutter"-Form nicht deaktiviert, aber trotzdem über diesem
>>
>

> Jenachdem wie oft er diese Sache braucht wäre es meiner meinung nach
> trotzdem eine gute Alternative.


vielen Dank für Eure Antworten. Eigentlich brauche ich dieses Teil nur
in einer einzigen Anwendung, (ein kleines VB-Form, mit dem ich
Funktionen in einer in VC++ programmierten DLL teste/anwende), daher
erscheint mir der Aufwand mit dem Usercontrol dann doch zu gewaltig. (da
mir schon 30 Zeilen zu viel sind ;-)
Weitere Alternativen wären das Erstellen des Forms in VC++ oder Access,
aber je länger ich darüber nachdenke, um so sympathischer erscheinen mir
die "nur" 30 Zeilen. Diese könnte ich sogar mit dem Anweisungsseparator
(:) in eine Zeile schreiben. ;-)

Einen schönen Tag noch,

Gruß - Uwe.


Uwe Hübner

unread,
Apr 12, 2002, 3:12:36 AM4/12/02
to
Hallo Leute,


da inzwischen schon Bedarf angemeldet wurde:

Die ca. 30 Codezeilen habe ich unter folgender Adresse gefunden:
http://www15.brinkster.com/vbnotebook/VBFunction.asp?function=14 (Link
in eine Zeile).
Woher ich diesen Link habe, weiß ich leider nicht mehr.

HTH,
Gruß - Uwe.

Hier der Original-Code (Copyright 2000, J. Frank Carr):

[Zitat]
Enlarge Dropdown area

This routine allows you to make the dropdown area of a combo box larger.

First, in General|Declarations, include the following....

'
' Types for API Calls
'
Private Type POINTAPI x As Long
y As Long
End Type

Private Type RECT Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'
' API Calls
'
Private Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long

Private Declare Function ScreenToClient Lib "user32" _
(ByVal hwnd As Long, lpPoint As
POINTAPI) As Long

Private Declare Function MoveWindow Lib "user32" _
(ByVal hwnd As Long, ByVal x As Long, _
ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal bRepaint
As Long) As Long

..and now the routine....

Public Sub SetComboListAreaSize(frmHost As Form, cboCombo As ComboBox)

Dim pt As POINTAPI
Dim rec As RECT
Dim iItemWidth As Integer
Dim iItemHeight As Integer
Dim iOldScaleMode As Integer
Dim nRet As Long

iOldScaleMode = frmHost.ScaleMode
frmHost.ScaleMode = vbPixels
iItemWidth = cboCombo.Width
iItemHeight = frmHost.ScaleHeight - cboCombo.Top - 5
frmHost.ScaleMode = iOldScaleMode
nRet = GetWindowRect(cboCombo.hwnd, rec)
pt.x = rec.Left
pt.y = rec.Top
nRet = ScreenToClient(frmHost.hwnd, pt)
nRet = MoveWindow(cboCombo.hwnd, pt.x, pt.y, iItemWidth,
iItemHeight, 1)

End Sub

Last Updated On: 10/12/2000
[\Zitat]


Norbert Schiller

unread,
Apr 12, 2002, 6:09:50 AM4/12/02
to
Hallo Uwe,

recht herzlichen Dank.
--
Gruß,
Norbert Schiller
[mailto:nsch...@freenet.de]


0 new messages