listrows property

J

jim C.

Im creating a userform that list a multicolumn range in a
combobox. This user form will be used on different
computers with different resolutions. I use windows api's
to add maximize button to form. I would like tto put the
combobox at the top of the form and use the maximum amount
of screen space to dispay listrows. is there a way to
make the list rows property relative to screen size or
userform size. right now i am trying "if then" with
different resolutions ie: if resolution is 800X600 then
listrows = 32 so on and so forth... any help would be
appreciated.
 
B

Bob Phillips

Jim,

I haven't tried myself but I would have thought this is very simple to do.
Have you tried to just set it according to your algorithm in the Userform
initialise or activate event code, such as

Combobox1.ListRow = 32

or within a Case statement when you have determined your userform size with
a test based upon that size.

Is that helpful, or have I missed the crux of the question?
 
J

jim c.

when designing my userform, I was using 1024x768 screen
resolution. then it dawned on me that there will be
people using the form at 800x600. which of course changes
everything... rookie mistake. lol i was hoping there was
an easier way then testing each resolution and using case
statements. thank you for your help.
 
O

Orlando Magalhães Filho

Hi Jim c.

Try get from register. Put this code on standard module and run the test.

Public Const vStr As Long = 255
Public Const REG_BINARY = 3&
Public Const REG_DWORD = 4&
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA"
_
(ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
ByRef lpType As Long, _
ByVal lpData As String, _
ByRef lpcbData As Long) As Long ' Note that if you declare the lpData
_
'parameter as String, you must pass
it By Value.
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002


'Get Registry Value, Arguments:
'1 - Reg Key (Ex.: HKEY_LOCAL_MACHINE),
'2 - Reg SubKey (Ex.: "Software\Microsoft\Windows\CurrentVersion"),
'3 - Name of Value (Ex.:"ProgramFilesDir" or "" for default)
Function GetRegValue(Key As Long, SubKey As String, ValueName As String) As
String
Dim RetStr As String * vStr 'Fixed-length strings
Dim fctRet As Long
Dim OpenKeyHdl As Long
Dim vType As Long
Dim vLen As Long
Dim i As Integer

GetRegValue = "Error"
vLen = vStr
fctRet = RegOpenKey(Key, SubKey, OpenKeyHdl)
If fctRet <> 0 Then Exit Function

fctRet = RegQueryValueEx(OpenKeyHdl, ValueName, 0&, vType, RetStr, vLen)
RegCloseKey OpenKeyHdl
If fctRet <> 0 Then Exit Function

If vType = REG_BINARY Then
GetRegValue = ""
For i = 1 To vLen
GetRegValue = GetRegValue _
& IIf(Len(Hex(Asc(Mid(RetStr, i, 1)))) = 1, "0", "") _
& Hex(Asc(Mid(RetStr, i, 1))) & " "
Next
Exit Function
End If

If vType = REG_DWORD Then
GetRegValue = "0x"
For i = 4 To 1 Step -1
GetRegValue = GetRegValue _
& IIf(Len(Hex(Asc(Mid(RetStr, i, 1)))) = 1, "0", "") _
& Hex(Asc(Mid(RetStr, i, 1)))
Next
Exit Function
End If

GetRegValue = Left(RetStr, vLen - 1)
End Function

Private Sub TestGet()
'Test Screen resolution
MsgBox
Application.WorksheetFunction.Clean(GetRegValue(HKEY_LOCAL_MACHINE,
"Config\0001\Display\Settings", "Resolution"))
End Sub


HTH

---
Orlando Magalhães Filho

(So that you get best and rapid solution and all may benefit from the
discussion, please reply within the newsgroup, not in email)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top