Seite 1 von 1

MenüItemWidth (für API-Bibliothek)

Verfasst: 30.07.2013 23:48
von Daffy0815
@RSBasic

Habe mir gerade mal deine API-Bibliothek angesehen.
Wie ich gesen habe, haben Routinen zu MenuTitleWith und Co. da Einzug gehalten.

Das Gleiche geht auch mit den MenuItems!

Hier der abgewandelte Code mit Beispiel zur eventuellen Aufnahme.

Code: Alles auswählen

EnableExplicit

Declare.i _MenuItemWidth(WindowID.i, MenuID.i, MenuItemNumber.i)
Declare.i _MenuItemsWidth(WindowID.i, MenuID.i)

#WindowNumber = 1
#MenuNumber = 1


If OpenWindow(#WindowNumber, 0, 0, 400, 70, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateMenu(#MenuNumber, WindowID(#WindowNumber))
    MenuItem(0, "Datei")
    MenuItem(1, "Bearbeiten")
    MenuItem(2, "Hilfe")
  EndIf
  
  ResizeWindow(#WindowNumber,#PB_Ignore,#PB_Ignore, _MenuItemsWidth(WindowID(#WindowNumber), MenuID(#MenuNumber)), #PB_Ignore)
 
  Debug "Breite von MenuItem ''Datei'': " + _MenuItemWidth(WindowID(#WindowNumber), MenuID(#MenuNumber), 0)
  Debug "Breite von MenuItem ''Bearbeiten'': " + _MenuItemWidth(WindowID(#WindowNumber), MenuID(#MenuNumber), 1)
  Debug "Breite von MenuItem ''Hilfe'': " + _MenuItemWidth(WindowID(#WindowNumber), MenuID(#MenuNumber), 2)
  Debug "Breite aller MenuItems: " + _MenuItemsWidth(WindowID(#WindowNumber), MenuID(#MenuNumber))
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Procedure _MenuItemWidth(WindowID.i, MenuID.i, MenuItemNumber.i)
  Protected WinRect.rect
  Protected MenuRect.rect
  Protected MenuItemXPos.i
  Protected MenuItemWidth.i
 
  GetWindowRect_(WindowID.i, WinRect.rect) 
  GetMenuItemRect_(WindowID.i, MenuID.i, MenuItemNumber.i, MenuRect.rect)
 
  MenuItemXPos.i = MenuRect.rect\Left - WinRect.rect\Left
  MenuItemWidth.i = MenuRect.rect\Right - MenuRect.rect\Left
 
  ProcedureReturn MenuItemWidth.i
EndProcedure

Procedure _MenuItemsWidth(WindowID.i, MenuID.i)
  Protected MenuItemCounter.i
  Protected MenuItems.i
  Protected MenuItemsWidth.i
 
  MenuItems.i = GetMenuItemCount_(MenuID.i)-1
 
  For MenuItemCounter.i = 0 To MenuItems.i
    MenuItemsWidth.i + _MenuItemWidth(WindowID.i, MenuID.i, MenuItemCounter.i)
  Next
 
  ProcedureReturn MenuItemsWidth.i * 1.05834
EndProcedure
Gruß

Daffy

PS. Habe noch jede Menge Proceduren zu anderen Problemen.