Code: Alles auswählen
PROCEDURE CreateMenuSystem( oDlg )
LOCAL oFMenu, oHMenu, oSMenu, oMbar, oS1Menu
// Erzeugen des Menuesystems der Anwendung mit
// von XbpImageMenu-Objekten. Die von XbpMenu
// abgeleitete Klasse implementiert die fuer
// das Owner-Drawing in Menues noetige
// Logik sowie die Ereignisbearbeitung.
//
// "Datei"-Popup-Menue
oFMenu := XbpImageMenu():new()
oFMenu:BarText:= "File Menu"
oFMenu:title := "~File"
oFMenu:create( oDlg )
oFMenu:addItem( {"~Open..."+Chr(9)+"Ctrl+O",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW } )
oFMenu:addItem( {"~Save"+Chr(9)+"Ctrl+S",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW } )
oFMenu:addItem( {NIL,;
{|| NIL}, XBPMENUBAR_MIS_SEPARATOR, XBPMENUBAR_MIA_OWNERDRAW } )
oFMenu:addItem( {"~Properties",;
{|| MsgBox("Settings")},, XBPMENUBAR_MIA_OWNERDRAW },;
121 )
oFMenu:addItem( {NIL,;
{|| NIL}, XBPMENUBAR_MIS_SEPARATOR, XBPMENUBAR_MIA_OWNERDRAW } )
oFMenu:addItem( {"~Quit"+Chr(9)+"Alt+F4",;
{|| PostAppEvent(xbeP_Quit)},, XBPMENUBAR_MIA_OWNERDRAW },;
120 )
// "Hilfe -> Hilfeartikel"-Untermenue
oSMenu := XbpImageMenu():new():create( oDlg )
oSMenu:title := "~Help Articles"
oSMenu:addItem( {"Article ~1..."+Chr(9)+"Ctrl+1",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW },;
123 )
oSMenu:addItem( {"Article ~2..."+Chr(9)+"Ctrl+2",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW },;
123 )
oSMenu:addItem( {"Article ~3..."+Chr(9)+"Ctrl+3",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW },;
123 )
oS1Menu := XbpImageMenu():new():create( oDlg )
oS1Menu:title := "~Help Test"
oS1Menu:addItem( {"Test 1..."+Chr(9)+"Ctrl+4",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW },;
123 )
oS1Menu:addItem( {"Test 2..."+Chr(9)+"Ctrl+5",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW },;
123 )
oS1Menu:addItem( {"Test 3 ..."+Chr(9)+"Ctrl+6",;
{|| NIL},, XBPMENUBAR_MIA_OWNERDRAW },;
123 )
// "Hilfe"-Popup-Menue
oHMenu := XbpImageMenu():new()
oHMenu:BarText:= "Help"
oHMenu:title := "~Help"
oHMenu:create( oDlg )
oHMenu:addItem( {"~Test",;
{|| MsgBox("Test")},, XBPMENUBAR_MIA_OWNERDRAW },;
121 )
oHMenu:addItem( {oSMenu,,, XBPMENUBAR_MIA_OWNERDRAW}, 122 )
oHMenu:addItem( {oS1Menu,,, XBPMENUBAR_MIA_OWNERDRAW}, 122 )
oHMenu:addItem( {NIL,;
{|| NIL}, XBPMENUBAR_MIS_SEPARATOR, XBPMENUBAR_MIA_OWNERDRAW } )
oHMenu:addItem( {"~About",;
{|| MsgBox("About")},, XBPMENUBAR_MIA_OWNERDRAW },;
121 )
// Hinzufuegen der Popup-Menues zur
// Menuezeile
oMbar := oDlg:menuBar()
oMbar:measureItem := {|nItem,aDims,self| MeasureMenubarItem(oDlg,self,nItem,aDims) }
oMbar:drawItem := {|oPS,aInfo,self | DrawMenubarItem(oDlg,self,oPS,aInfo) }
oMbar:addItem( {oFMenu,,, XBPMENUBAR_MIA_OWNERDRAW} )
oMbar:addItem( {oHMenu,,, XBPMENUBAR_MIA_OWNERDRAW} )
RETURN
wird ein Teil des Aufklapp-Menüs beim „einklappen“ nicht überpaintet.
Versuche, den betreffenden Bereich "manuell" mit einer GraBox() zu überpainten, blieben erfolglos.
Ich habe die Vermutung, dass der Bezugspunkt des übergebenen Presentation-Space fehlerhaft ist, die Dimension des PS indes aber stimmt.
Oder gibt es eine Lösung?
Gruß,
Olaf