Avatar billede bernhof Nybegynder
18. maj 2002 - 17:41 Der er 8 kommentarer og
1 løsning

Bredde af menupunkt

Menuer i VB ikke har nogen property der hedder Width. Hvordan kan jeg (evt. vha. API?) finde bredden på et bestemt menupunkt?
Avatar billede sjh Nybegynder
18. maj 2002 - 22:38 #1
hvad skal du bruge det til?
Avatar billede bernhof Nybegynder
19. maj 2002 - 12:19 #2
Jeg vil gerne have en form til at dukke op lige under et menupunkt... en slags customized popupmenu.

Er der hjælp at hente?
Avatar billede joern Nybegynder
19. maj 2002 - 22:19 #3
Såvidt jeg kan se afhænger bredden på hovedmenuen af de tekster man skriver.
Det er jo dig selv der gør det, eller indlæses menuteksterne fra en fil som brugeren kan redigere i? - Sprogskift el.lign.
Du kan jo placere din 'popup-form' i forhold til enten skærmens eller hovedformens øverste, venstre hjørne.

f.eks. formpopup.left = form1.left + 800

Hvis menu-teksterne kan ændres må du jo tælle tegn og omregne til twips.  Men lidt usikkert bliver det, fordi skriftegn er proportionale (m er bredere end l)

M.v.h.  Jørn

M.v.h.  Jørn
Avatar billede bernhof Nybegynder
20. maj 2002 - 14:34 #4
Ja, jeg kunne benytte TextWidth(), men der er et lille mellemrum mellem teksterne i menuerne, som ikke bliver regnet med, og jeg vil ikke bare hardcode et tal, som du foreslår.
Da menupunkternes skrifttype kan variere fra bruger til bruger, vil TextWidth heller ikke altid være brugbar.

Hvis jeg på en eller anden måde kunne få fat på et menupunkts hWnd, kunne jeg benytte en funktion som GetWindowRect til at hente bredde osv... men jeg ved ikke hvordan jeg skal gøre det?!

Jeg sætter point op. Måske kan det vække lidt opsigt...

Please help! :(
Avatar billede sjh Nybegynder
20. maj 2002 - 14:43 #5
kan du ikke bruge:

    'Get the handle of the form's menu
    hMenu = GetMenu(Me.hWnd)
    'Get the handle of the form's submenu
    hSubMenu = GetSubMenu(hMenu, 0)

http://www.allapi.net/apilist/example.php?example=Bitmap+Menu
Avatar billede bernhof Nybegynder
20. maj 2002 - 15:12 #6
hmm .. er det menuens hWnd man får vha. GetMenu og GetSubMenu?
Avatar billede bernhof Nybegynder
20. maj 2002 - 15:38 #7
Woohoo, jeg fandt ud af det! :)
Man kan sammen med den funktion sjh nævnte (GetMenu) og funktionen GetMenuItemRect få fat på menuens fire hjørner!
Tusind tak for dit input, sjh! Læg venligst et svar, så du kan få dine velfortjente point! :)

.. og her er koden:

'I et modul:

Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function GetMenuItemRect Lib "user32" ( _
  ByVal hwnd As Long, _
  ByVal hMenu As Long, _
  ByVal uItem As Long, _
  lprcItem As RECT _
) As Long

Public Type RECT
    vLeft As Long
    vTop As Long
    vRight As Long
    vBottom As Long
End Type

'I en form:

Private Sub Form_Load()

  Dim vTemp As RECT, retvar As Variant, hMenu As Long
  hMenu = GetMenu(Form1.hwnd)
  retvar = GetMenuItemRect(Form1.hwnd, hMenu, 1, vTemp)
   
  MsgBox vTemp.vBottom
 
End Sub

'slut

/Mikbj
Avatar billede sjh Nybegynder
20. maj 2002 - 15:55 #8
Svar
Avatar billede joern Nybegynder
20. maj 2002 - 17:35 #9
Sejt

m.v.h. Jørn
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester