so das Problem mit den Icon hat sich aufgelöst, durch Umstellung des Code, aber nun hab ein anderes Problem.
Es sind viel "Schalter" im alten Menu verankert die ich zur Laufzeit mit o:childFromName( ) abfragen/setzen kann.
Code: Alles auswählen
IF( oMainDlg:childFromName( ID_VIEW ) :isItemchecked( IDV_UIMODE ), ;
aoChild[ CH_WMP ] :uiMode := "full", ;
aoChild[ CH_WMP ] :uiMode := "none" )
ich muss mich bei den ge-doppelten Menu also auch Aktionen weiterleiten zum alten Menu was auch klappt d.h. die Checkbox wird auch optisch gesetzt.
Leider funktioniert es anders-rum nicht ... wenn ich im alten Menu die Checkbox setzte wird die Änderung im neuen Menu nicht angezeigt
Ich denke es hat was mit dem Umbau zu tun wo ich möglichst viel vorhandenen Source Code nicht doppeln wollte sondern in zerlegt habe.
alle vertikalen Popup Menu sind jetzt in einer eigene Routine während die horizontalen verschieden sind.
das alte Menu baut ja auf o:menuBar() auf während das ge-doppelte an der rechten Maustaste hängt
Code: Alles auswählen
FUNCTION CREATEMENUSYSTEM( oMainDlg, aDLGOWNER, aoChild, aoDisplay )
LOCAL oMenuBar := oMainDlg:menuBar() // Menubar
oMenu := XbpImageMenu() :new(oMainDlg) // Parent hier Dialog !
...
SUB_VIEW( oMenu,oMainDlg, aoChild, aoDisplay, aDLGOWNER )
FUNCTION RMENU1( oMainDlg, aoChild, aoDisplay, aDLGOWNER )
LOCAL oMenuBar := oMainDlg:menuBar() // Menubar
oMenu1 := XbpImageMenu() :new() //
oMenu1:create(oMenuBar) // hier als Parent ?
...
oMenu1:addItem( { SUB_VIEW( NIL, oMainDlg, aoChild, aoDisplay, aDLGOWNER ),
STATIC FUNCTION SUB_VIEW( oMenu1,oMainDlg, aoChild, aoDisplay, aDLGOWNER )
IF oMenu1 <> NIL // wenn ich ein Object
oSubMenu := oMenu1 // aus dem alten Menu habe
oSubMenu:setName(ID_VIEW) // = 2
ELSE
oSubMenu := XbpImageMenu() :new( oMenu1 ) // erstelle neue
oSubMenu:title := "~View"
oSubMenu:BarText := "View Control"
oSubMenu:create()
oSubMenu:setName(ID_SUB_VIEW) // = 12
ENDIF
...
oSubMenu:addItem( { "~UiMode Full", { || IF( SP_IsUIMode() , ; // diese sind
oMainDlg:childFromName( ID_VIEW ) :checkItem( IDV_UIMODE, .F. ) , ; // für das
oMainDlg:childFromName( ID_VIEW ) :checkItem( IDV_UIMODE, .T. ) ) , ; // alte Menu
IF( SP_IsUIMode() , ; // nochmal
oSubMenu :checkItem( IDV_UIMODE, .F. ) , ; // für das
oSubMenu :checkItem( IDV_UIMODE, .T. ) ) , ; // ge-doppelte Menu
IF( oMainDlg:childFromName( ID_VIEW ) :isItemchecked( IDV_UIMODE ), ; // jetzt prüfen
aoChild[ CH_WMP ] :uiMode := "full" , ;
aoChild[ CH_WMP ] :uiMode := "none" ) , ;
IF( oMainDlg:childFromName( ID_VIEW ) :isItemchecked( IDV_UIMODE ), ;
SP_IsUIMode( .T. ) , ;
SP_IsUIMode( .F. ) ) } , ;
, ;
XBPMENUBAR_MIA_OWNERDRAW }, CHECK_ON )
ein oMainDlg:childFromName( ID_SUB_* ):checkItem() kann ich nicht verwenden sondern muss mit oSubMenu:checkItem() arbeiten da die ID_SUB_* ja erst im zweiten Durchlauf angelegt werden ...
jemand eine Idee wie man den Code umstellen könnte ?