hi,
ein normales Menu ist ja in der Menu Leiste (horizontal). alternative gibt es Popup Menus (vertikal).
nun wollte ich das normal Ownerdraw Menu als Popup Menu doppeln was soweit funktioniert aber :
jetzt sind beim normalen Menu die Icons "weg" und nur im ge-doppelten Menu vorhanden ...
jemand eine Idee woran das liegen könnte ?
der Aufruf des ge-doppelte Menu steht im Source Code erst hinter dem normalen CreateMenu()
doppel Menu [erledigt]
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: doppel Menu
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.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ängtein 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 ?
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" )
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 )
jemand eine Idee wie man den Code umstellen könnte ?
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 237
- Registriert: Do, 14. Aug 2008 14:59
- Wohnort: Straelen
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 3 Mal
Re: doppel Menu
Hallo Jimmy,
ich würde in der oMainDlg für jeden Menu-Schalter eine Instanzvariable, z.B. ::ID_View, einführen.
Im Kontextmenu könntest du dann problemlos über den oMainDlg:ID_View auf den gesetzten Inhalt zugreifen.
ich würde in der oMainDlg für jeden Menu-Schalter eine Instanzvariable, z.B. ::ID_View, einführen.
Im Kontextmenu könntest du dann problemlos über den oMainDlg:ID_View auf den gesetzten Inhalt zugreifen.
Viele Grüße
Dieter
Was man nicht versteht, besitzt man nicht.
Dieter
Was man nicht versteht, besitzt man nicht.
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: doppel Menu
hi,
bei einen PopUp Menu, wo man kein horizontales Menu hat, benötigt man ja nicht o:MenuBar() und damit funktioniert o:childFromName() dann nicht ?!
es scheint auch so als wenn sich ein Pop-Up Menu nicht "skinnen" lässt ... ( weil xtpSkinApplyMetrics,xtpSkinApplyMenus fehlt ? )
mit folgender Konstruktion hab nun Erfolg:Zuerst wie gehabt aber statt oMenuBar nehme ich oMainDlg als Parent für XbpMenu() (wie beim PopUp).
Rückgabe Wert ist oMenuBar (!)
Ich reiche nun oMenuBar als Parent weiter an das 2nd Menue und hänge "die" an das obere Menu an.
ich habe also im Prinzip die beiden Menu vertauscht d.h. das obere Menu sind nur PopUp-Menus als Anzeige.
jetzt scheint sowohl o:childFromName() als auch die Anzeige(n) mit der SP_*() Schaltern zu stimmen. p.s. alles mit Ownerdraw
ich verwende ja o:SetName() womit ich die oMainDlg:childFromName( xxx ) auch finde WENN diese (irgendwo) als Parent o:MenuBar() haben.Dieter hat geschrieben:ich würde in der oMainDlg für jeden Menu-Schalter eine Instanzvariable, z.B. ::ID_View, einführen.
Im Kontextmenu könntest du dann problemlos über den oMainDlg:ID_View auf den gesetzten Inhalt zugreifen.
bei einen PopUp Menu, wo man kein horizontales Menu hat, benötigt man ja nicht o:MenuBar() und damit funktioniert o:childFromName() dann nicht ?!
es scheint auch so als wenn sich ein Pop-Up Menu nicht "skinnen" lässt ... ( weil xtpSkinApplyMetrics,xtpSkinApplyMenus fehlt ? )
mit folgender Konstruktion hab nun Erfolg:
Code: Alles auswählen
oMenu1 := CreateMenuSystem( oDlg, aDLGOWNER, aoChild, aoDisplay )
//
// a Pop-Up menue on RbDown
//
oMenu2 := RMENU1( oDlg, aoChild, aoDisplay, aDLGOWNER ,oMenu1)
oLogo:RbDown := { | mp1, mp2, obj | oMenu2:PopUp( obj, mp1, 2, ;
XBPMENU_PU_DEFAULT + XBPMENU_PU_MOUSE_RBDOWN ) }
Rückgabe Wert ist oMenuBar (!)
Ich reiche nun oMenuBar als Parent weiter an das 2nd Menue und hänge "die" an das obere Menu an.
ich habe also im Prinzip die beiden Menu vertauscht d.h. das obere Menu sind nur PopUp-Menus als Anzeige.
jetzt scheint sowohl o:childFromName() als auch die Anzeige(n) mit der SP_*() Schaltern zu stimmen. p.s. alles mit Ownerdraw
gruss by OHR
Jimmy
Jimmy