MenüItemWidth (für API-Bibliothek)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

MenüItemWidth (für API-Bibliothek)

Beitrag 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.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert