Kann man von XbpMenuBar() auch eine Klasse ableiten?
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Kann man von XbpMenuBar() auch eine Klasse ableiten?
Liebe Xbase-Gurus!
Ich bin grad am Genfersee in den Ferien (Montreux-JazzFestival)
und hab hier feudal Zeit, spasseshalber Klassen abzuleiten...
Leider gelingt mir das nicht von XbpMenuBar().
Geht das?
Wie geht das?
Ich hab folgende Ableitung:
CLASS MetaBar FROM XBPMENUBAR
EXPORTED:
VAR aItem
VAR aoMenu
METHOD Init
ENDCLASS
METHOD MetaBar:Init
/*
BASIC USERS GUIDE
Seite 183:
CAST
*/
self:XBPMENUBAR:init()
self:aItem:={}
self:aoMenu:={}
RETURN self
Nach der Erzeugung hänge ich zwei Items an:
oMenuBar:ADDITEM({"Menu100",NIL})
oMenuBar:ADDITEM({"Menu200",NIL})
Ein "tracen" nach der Erzeugung der Bar
ergibt in allen Varianten:
oMenuBar:numItems()=2
oMenuBar:getItem(1)={"Menu100",NIL,NIL,NIL}
oMenuBar:getItem(2=={"Menu200",NIL,NIL,NIL}
Anlässlich der Erzeugung ergeben sich folgende
Resultate:
oMenuBar:=SetAppWindow():menuBar():
Die Items werden angezeigt
oMenuBar:=SetAppWindow():metaBar()
Methode für dieses Objekt unbekannt (ist mir klar)
oMenuBar:=MetaBar():new()
Die Items werden nicht angezeigt
oMenuBar:=MetaBar(new)(SetAppWindow())
Die Items werden nicht angezeigt
Weitere Möglichkeiten sind mir bisher nicht
eingefallen, um zu einer Möglichkeit zu kommen,
in der die beiden Items auch in der abgeleiteten
Klasse MetaBar angezeigt werden.
Kann jemand helfen?
Les meilleurs salutations et beaucoup de
soleil pour tous de Villeneuve...
(heisst hoffentlich das was ich ausdrücken
wollte...)
Grilli
Ich bin grad am Genfersee in den Ferien (Montreux-JazzFestival)
und hab hier feudal Zeit, spasseshalber Klassen abzuleiten...
Leider gelingt mir das nicht von XbpMenuBar().
Geht das?
Wie geht das?
Ich hab folgende Ableitung:
CLASS MetaBar FROM XBPMENUBAR
EXPORTED:
VAR aItem
VAR aoMenu
METHOD Init
ENDCLASS
METHOD MetaBar:Init
/*
BASIC USERS GUIDE
Seite 183:
CAST
*/
self:XBPMENUBAR:init()
self:aItem:={}
self:aoMenu:={}
RETURN self
Nach der Erzeugung hänge ich zwei Items an:
oMenuBar:ADDITEM({"Menu100",NIL})
oMenuBar:ADDITEM({"Menu200",NIL})
Ein "tracen" nach der Erzeugung der Bar
ergibt in allen Varianten:
oMenuBar:numItems()=2
oMenuBar:getItem(1)={"Menu100",NIL,NIL,NIL}
oMenuBar:getItem(2=={"Menu200",NIL,NIL,NIL}
Anlässlich der Erzeugung ergeben sich folgende
Resultate:
oMenuBar:=SetAppWindow():menuBar():
Die Items werden angezeigt
oMenuBar:=SetAppWindow():metaBar()
Methode für dieses Objekt unbekannt (ist mir klar)
oMenuBar:=MetaBar():new()
Die Items werden nicht angezeigt
oMenuBar:=MetaBar(new)(SetAppWindow())
Die Items werden nicht angezeigt
Weitere Möglichkeiten sind mir bisher nicht
eingefallen, um zu einer Möglichkeit zu kommen,
in der die beiden Items auch in der abgeleiteten
Klasse MetaBar angezeigt werden.
Kann jemand helfen?
Les meilleurs salutations et beaucoup de
soleil pour tous de Villeneuve...
(heisst hoffentlich das was ich ausdrücken
wollte...)
Grilli
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
ich sehe zwar o:Init() aber kein o:Create() ?GrillenHirni hat geschrieben:Leider gelingt mir das nicht von XbpMenuBar().
Geht das?
Wie geht das?
Ich hab folgende Ableitung:Code: Alles auswählen
CLASS MetaBar FROM XBPMENUBAR EXPORTED: METHOD Init ENDCLASS METHOD MetaBar:Init self:XBPMENUBAR:init() RETURN self
Code: Alles auswählen
METHOD MetaBar:Create(oParent,aPresParam,lVisible)
self:XBPMENUBAR:Create(Create(oParent,aPresParam,lVisible)
RETURN self
es würde dir also eine eigene MenuBar Class nicht viel nützen wenn du keine eigene Crt / Dialog Class hast.Normalerweise werden Xbase Parts durch die Methoden :new() und :create() erzeugt. Bei einem Menubar gibt es eine zusätzlich, komfortablere Möglichkeit, ein XbpMenuBar-Objekt zu generieren. Dies hängt mit der Tatsache zusammen, daß ein Menubar immer in einem Fenster installiert sein muß. Aus diesem Grund haben die Klassen XbpCrt und XbpDialog beide die Methode :menuBar() , die einen fertiges XbpMenuBar-Objekt zurückgibt, das bereits im jeweiligen Fenster installiert ist.
Frage : warum wolltest du eine Class daraus machen ?
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Jimmy!
Danke Dir herzlich für Deinen wertvollen Hinweis!
Die Items werden jetzt angezeigt!
Ich bin Anfänger und versuche, zur Laufzeit in der
MenuStruktur eventuelle SubMenüs aoMenus gegen
aItems auszuwechseln (und zurück).
Der Hintergrund ist, dass ich vor jedem Zugang
zu einem Menu unter Umständen eine PrüfFunktion
aufrufen möchte.
Wenn die Items keine SubMenüs enthalten, ist es
möglich, über den CallBack-Slot itemSelected(..)
in einen MenuDispatcher abzuleiten. Dort könnte
ich zur Laufzeit prüfen, ob ein ausgewähltes SubMenü
für den Anwender verfügbar sein darf oder nicht
und gegebenenfalls anschliessend das SubMenü
wieder als Item einsetzen.
Einer der Ansätze ist, dass ich gegebenenfalls
ein SubMenu in einem entsprechenden Slot von
einem Menu mitführen möchte - möglicherweise
enthält das Menu als Items auch mehrere SubMenüs:
oMenu:aaItem
oMenu:aoSubMenu
Daran bastle ich aber noch und bin nicht sicher,
ob es schliesslich zum funktionieren kommt.
Die Ableitung vom XbpMenu() war natürlich kein Problem,
aber bei der Ableitung von XbpMenuBar() hast Du mir gerade
sehr geholfen.
Vielen Dank!
Grilli
Danke Dir herzlich für Deinen wertvollen Hinweis!
Die Items werden jetzt angezeigt!
Ich bin Anfänger und versuche, zur Laufzeit in der
MenuStruktur eventuelle SubMenüs aoMenus gegen
aItems auszuwechseln (und zurück).
Der Hintergrund ist, dass ich vor jedem Zugang
zu einem Menu unter Umständen eine PrüfFunktion
aufrufen möchte.
Wenn die Items keine SubMenüs enthalten, ist es
möglich, über den CallBack-Slot itemSelected(..)
in einen MenuDispatcher abzuleiten. Dort könnte
ich zur Laufzeit prüfen, ob ein ausgewähltes SubMenü
für den Anwender verfügbar sein darf oder nicht
und gegebenenfalls anschliessend das SubMenü
wieder als Item einsetzen.
Einer der Ansätze ist, dass ich gegebenenfalls
ein SubMenu in einem entsprechenden Slot von
einem Menu mitführen möchte - möglicherweise
enthält das Menu als Items auch mehrere SubMenüs:
oMenu:aaItem
oMenu:aoSubMenu
Daran bastle ich aber noch und bin nicht sicher,
ob es schliesslich zum funktionieren kommt.
Die Ableitung vom XbpMenu() war natürlich kein Problem,
aber bei der Ableitung von XbpMenuBar() hast Du mir gerade
sehr geholfen.
Vielen Dank!
Grilli
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Ich würde da lieber nach einem Schema die Menüitems disablen, wenn ein Benutzer die nicht auswählen können soll.
Ist einfacher und der Benutzer sieht, was eigentlich alles möglich wäre - wenn er die Rechte hätte
Ist einfacher und der Benutzer sieht, was eigentlich alles möglich wäre - wenn er die Rechte hätte
Viele Grüße
Wolfgang
Wolfgang
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Wolfgang!
Ich mach dann das so wie Du willst und wenn Du es besser findest,
wenn die SubMenus gedisablet werden, dann mach ich das,
wenn Du mir sagst, wann genau und wo ich zur Laufzeit
mit meiner PrüfFunktion (die irgendetwas prüft - beispielsweise,
ob bestimmte Dateien geöffnet werden können) ich eingreifen
kann...
Die ganze MenuStruktur wird ja nach dem Programmstart
aufgebaut - Du hast als Items in den Menus Funktionsaufrufe,
oder ihrerseits wieder SubMenus.
Wenn der Anwender ein Menu oder SubMenu anwählt, soll
die PrüfFunktion aufgerufen werden.
Herzliche Grüsse
Grilli
Ich mach dann das so wie Du willst und wenn Du es besser findest,
wenn die SubMenus gedisablet werden, dann mach ich das,
wenn Du mir sagst, wann genau und wo ich zur Laufzeit
mit meiner PrüfFunktion (die irgendetwas prüft - beispielsweise,
ob bestimmte Dateien geöffnet werden können) ich eingreifen
kann...
Die ganze MenuStruktur wird ja nach dem Programmstart
aufgebaut - Du hast als Items in den Menus Funktionsaufrufe,
oder ihrerseits wieder SubMenus.
Wenn der Anwender ein Menu oder SubMenu anwählt, soll
die PrüfFunktion aufgerufen werden.
Herzliche Grüsse
Grilli
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Dann setzte doch einfach für jeden Menüpunkt die gleiche Funktion, z.B. DoMenueFkt(nNr), wobei natürlich die Nummer nNr je nach Menüpunkt variert. In dieser Funktion rufst du deine Prüfroutine je nach Nummer auf, wenn diese .T. zurückgibt, führst du deine Funktion aus, ansonsten gibst du eine Meldung aus, warum nicht.
Hat den Vorteil, dass du am Menü nichts ändern musst.
Also z.B.
Hat den Vorteil, dass du am Menü nichts ändern musst.
Also z.B.
Code: Alles auswählen
function DoMenuFkt(nNr)
if MeinePruefung(nNr)=.F.
** Fehlerausgabe
return .F.
endif
do case
case nNr=1
MeineFunktion1()
case nNr=2
MeineFunktion2()
...
endcase
return .T.
Viele Grüße
Wolfgang
Wolfgang
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
hi,
alternative kann man auch mit o:checkItem() / o:isItemChecked() arbeiten
für XbpMenu, dem vertikalen Menu, gibt Ownerdraw und dort das Attribut XBP_DRAWSTATE_DISABLED
Tip : verwende o:setName( xyz ) bei jedem horizontalem Menu-Item dann kannst du es mit o:childFromName( xyz ):checkItem( ...) abfragen
bei XbpMenuBar(), dem Horizontalem Menu, gibt es die Methode o:disableItem() / o:enableItem().GrillenHirni hat geschrieben:...wenn die SubMenus gedisablet werden, dann mach ich das,
wenn Du mir sagst, wann genau und wo ich zur Laufzeit
mit meiner PrüfFunktion (die irgendetwas prüft - beispielsweise,
ob bestimmte Dateien geöffnet werden können) ich eingreifen
kann...
alternative kann man auch mit o:checkItem() / o:isItemChecked() arbeiten
für XbpMenu, dem vertikalen Menu, gibt Ownerdraw und dort das Attribut XBP_DRAWSTATE_DISABLED
Tip : verwende o:setName( xyz ) bei jedem horizontalem Menu-Item dann kannst du es mit o:childFromName( xyz ):checkItem( ...) abfragen
ein Menu kannst du jederzeit aufbauen und den Status zur Laufzeit verändernGrillenHirni hat geschrieben:Die ganze MenuStruktur wird ja nach dem Programmstart
aufgebaut - Du hast als Items in den Menus Funktionsaufrufe,
oder ihrerseits wieder SubMenus.
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Wolfgang
Danke für den Tipp...
Wenn es sich bei dem betreffenden Item um ein Menu mit
Funktionsaufrufen handelt, funktioniert es.
Mir ist bei dem Ansatz unklar, was ich in einer beliebig verschachtelten
Menustruktur bei den SubMenus mache...
Wenn der Anwender das Menu anwählt, sollte zur Laufzeit eine
Prüffunktion aufgerufen werden können, von deren RückgabeWert der
Zugriff auf ein SubMenu abhängt...
Herzliche Grüsse
Grilli
Danke für den Tipp...
Wenn es sich bei dem betreffenden Item um ein Menu mit
Funktionsaufrufen handelt, funktioniert es.
Mir ist bei dem Ansatz unklar, was ich in einer beliebig verschachtelten
Menustruktur bei den SubMenus mache...
Wenn der Anwender das Menu anwählt, sollte zur Laufzeit eine
Prüffunktion aufgerufen werden können, von deren RückgabeWert der
Zugriff auf ein SubMenu abhängt...
Herzliche Grüsse
Grilli
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Jimmy...
Da ich noch Anfänger bin, ist es noch knifflig,
die Ableitung aus dem horizontalen Menu im
richtigen Moment und an der richtigen Stelle
einzusetzen.
Es stehen ja verschiedene Methoden und
Callback-Slots zur verfügung, aber wann
zur Laufzeit und wo ableiten, um das betreffende
Menu zu enabeln, disabeln, show. hide oder was
auch immer?
Den einen Ansatz habe ich mit itemSelected(..)
versucht.
Das funktioniert, wenn ich in dem Menu
als Items nur Captions habe - wenn die
Items ihrerseits oSubMenus beinhalten,
wird itemSelect(..) nicht ausgeführt - ich
komme einfach aus der MenuStruktur
nicht mehr raus.
Die AusgangsLage ist, dass ich mit einem
selbstgeschriebenen ProjektTool arbeite,
welches den Code für die MenuFunktionen
ausgibt - pro MenuFunktion eine
ProgrammDatei.
Zum Glück werde ich von meinem persönlichen
Xbase-Guru betreut! Der sagt auch, dass
es in der Vertikalen mit OwnerDraw gelöst
werden muss...
Ich hab mir darum das betreffende Beispiel
von Alaska angeguckt. Bei dieser Gelegenheit
ist mir meine vorletzte HirnZelle verglüht...
Danke für Deine Tipps!
Grilli
Da ich noch Anfänger bin, ist es noch knifflig,
die Ableitung aus dem horizontalen Menu im
richtigen Moment und an der richtigen Stelle
einzusetzen.
Es stehen ja verschiedene Methoden und
Callback-Slots zur verfügung, aber wann
zur Laufzeit und wo ableiten, um das betreffende
Menu zu enabeln, disabeln, show. hide oder was
auch immer?
Den einen Ansatz habe ich mit itemSelected(..)
versucht.
Das funktioniert, wenn ich in dem Menu
als Items nur Captions habe - wenn die
Items ihrerseits oSubMenus beinhalten,
wird itemSelect(..) nicht ausgeführt - ich
komme einfach aus der MenuStruktur
nicht mehr raus.
Die AusgangsLage ist, dass ich mit einem
selbstgeschriebenen ProjektTool arbeite,
welches den Code für die MenuFunktionen
ausgibt - pro MenuFunktion eine
ProgrammDatei.
Zum Glück werde ich von meinem persönlichen
Xbase-Guru betreut! Der sagt auch, dass
es in der Vertikalen mit OwnerDraw gelöst
werden muss...
Ich hab mir darum das betreffende Beispiel
von Alaska angeguckt. Bei dieser Gelegenheit
ist mir meine vorletzte HirnZelle verglüht...
Danke für Deine Tipps!
Grilli
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Na die Verschachtelung baust du ja ganz normal nach deinen Bedürfnissen auf, aber irgendwo ist ja bei jedem SubMenu wieder Schluß, und da ist dann wieder ein Menüpunkt, der die Funktion mit Parameter aufruft.
Hier würdest du bei jedem Menu xxx deine Funktion mit Parameter Nr. aufrufen.
Code: Alles auswählen
- Submenu0
- Menu11
- Submenu1
- Menu 111
- Menu 112
- Submenu 2
- Menu 121
- Submenu 3
- Menu 131
- SubMenu 4
- Menu 141
- Menu 141
- Menu 113
- Menu 12
Viele Grüße
Wolfgang
Wolfgang
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
hier mal eine Beispiel ( mit Ownerdraw )GrillenHirni hat geschrieben:Es stehen ja verschiedene Methoden und Callback-Slots zur verfügung, aber wann
zur Laufzeit und wo ableiten, um das betreffende Menu zu enabeln, disabeln, show. hide oder was
auch immer?
Code: Alles auswählen
FUNCTION CREATEMENUSYSTEM( oMainDlg, ... )
LOCAL oMenu
LOCAL oMenuBar := oMainDlg:menuBar()
...
oMenuBar:measureItem := { | nItem, aDims, oSelf | MeasureMenubarItem( nItem, aDims, oSelf ) }
oMenuBar:drawItem := { | oPS, aInfo, oSelf | DrawMenubarItem( oPS, aInfo, oSelf, ...) }
...
// 1st MenuItem horizontal
oMenu := XbpImageMenu() :new(oMainDlg)
oMenu:title := "~File"
oMenu:BarText := "File Menu"
oMenu:create()
oMenu:setName( ID_FILE )
// vertikales Menu
SUB_FILE( oMenu,oMainDlg, ...)
...
// 2nd MenuItem horizontal
oMenu := XbpImageMenu() :new(oMainDlg)
oMenu:title := "~View"
oMenu:BarText := "View Control"
oMenu:create()
oMenu:setName( ID_VIEW )
// vertikales Menu
SUB_VIEW( oMenu,oMainDlg, ...)
...
//
// ownerdraw menu
// while using XBPMENUBAR_MIA_OWNERDRAW we do not have
// XBPMENUBAR_MIA_CHECKED any more. so we have to pre-
// select here manuell
//
// these a for "normal" bitmap to show
//
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_OPENPLAYLIST , .T. )
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_SAVEASPLAYLIST, .T. )
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_OPENMEDIA , .T. )
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_OPENURL , .T. )
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_READALLMP3 , .T. )
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_DUPEMP3 , .T. )
oMainDlg:childFromName( ID_FILE ) :checkItem( IDF_ENDE , .T. )
oMainDlg:childFromName( ID_VIEW ) :checkItem( IDV_MEDIALIB, .T. )
...
das oMenu:setName( ID_ ... ) sorgt nun dafür das du ( auch später ) an dein horizontales MenuItem kommst.
mit :checkItem( IDF_ ... , .T. / .F. ) wird das Icon ( und damit das vertikale MenuItem ) On / Off geschaltet.
redest du von dem Beispiel c:\ALASKA\XPPW32\Source\samples\basics\OWNERDRW\OWNERDRW.prg und der ZeileGrillenHirni hat geschrieben:Den einen Ansatz habe ich mit itemSelected(..) versucht.
Das funktioniert, wenn ich in dem Menu als Items nur Captions habe - wenn die Items ihrerseits oSubMenus beinhalten, wird itemSelect(..) nicht ausgeführt - ich komme einfach aus der MenuStruktur
nicht mehr raus.
Code: Alles auswählen
oHMenu:addItem( {oSMenu,,, XBPMENUBAR_MIA_OWNERDRAW}, 122 )
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Wolfgang -
ich hätte nicht gedacht, dass die Lösung so einfach
sein könnte und muss Deinen Ansatz dann mal
ausprobieren.
Bis dahin zweifle ich noch daran, dass ich zum Zeitpunkt,
wo der Anwender beispielsweise ein SubMenu auswählt,
in die PrüfFunktion komme...
Zitat:
"Hier würdest du bei jedem Menu xxx deine Funktion mit Parameter Nr. aufrufen"
Der Aufruf der Funktion würde so aussehen:
DoMenueFkt(nNr) ?
Wenn ich an ein Menu ein SubMenus anhänge, habe ich Dich ungefähr
so verstanden:
oMenu:ADDITEM({oSubMenu1,NIL})
oMenu:ADDITEM({"Funktion "+RTRIM(STR(nNr)),DoMenueFkt(nNr)})
oMenu:ADDITEM({oSubMenu2,NIL})
oMenu:ADDITEM({"Funktion "+RTRIM(STR(nNr)),DoMenueFkt(nNr)})
- von mir aus der Funktionsaufruf mit einem entsprechenden CodeBlock...
Wo und wie bringe ich aber im Fall
oMenu:ADDITEM({oSubMenu xy,NIL})
den Funktionsaufruf unter, dass diese über den Zugriff auf das
SubMenu xy entscheiden kann und gegebenenfalls anschliessend
dem Anwender das SubMenu xy anbietet?
Herzliche Grüsse
Grilli
ich hätte nicht gedacht, dass die Lösung so einfach
sein könnte und muss Deinen Ansatz dann mal
ausprobieren.
Bis dahin zweifle ich noch daran, dass ich zum Zeitpunkt,
wo der Anwender beispielsweise ein SubMenu auswählt,
in die PrüfFunktion komme...
Zitat:
"Hier würdest du bei jedem Menu xxx deine Funktion mit Parameter Nr. aufrufen"
Der Aufruf der Funktion würde so aussehen:
DoMenueFkt(nNr) ?
Wenn ich an ein Menu ein SubMenus anhänge, habe ich Dich ungefähr
so verstanden:
oMenu:ADDITEM({oSubMenu1,NIL})
oMenu:ADDITEM({"Funktion "+RTRIM(STR(nNr)),DoMenueFkt(nNr)})
oMenu:ADDITEM({oSubMenu2,NIL})
oMenu:ADDITEM({"Funktion "+RTRIM(STR(nNr)),DoMenueFkt(nNr)})
- von mir aus der Funktionsaufruf mit einem entsprechenden CodeBlock...
Wo und wie bringe ich aber im Fall
oMenu:ADDITEM({oSubMenu xy,NIL})
den Funktionsaufruf unter, dass diese über den Zugriff auf das
SubMenu xy entscheiden kann und gegebenenfalls anschliessend
dem Anwender das SubMenu xy anbietet?
Herzliche Grüsse
Grilli
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Jimmy -
da staune ich grad ganz schön, was mit
Ownerdraw möglich ist!
Am liebsten würde ich mir einen Hammer
an den Kopf schlagen und dann die Technik
sofort beherschen...
Ich fang aber mal mit einer langsameren
Methode an, mir die Technik anzueignen -
das wird ein längerfristiges Projekt...
Auch den Zugriff über setName() werd
ich ausprobieren - bisher war die Art des
Zugriffs auf das Menu weniger das Problem,
sondern eher die Gelegenheit, zur Laufzeit
nach AusWahl eines SubMenus auf dieses
zuzugreifen.
Guten Morgen!
Grilli
da staune ich grad ganz schön, was mit
Ownerdraw möglich ist!
Am liebsten würde ich mir einen Hammer
an den Kopf schlagen und dann die Technik
sofort beherschen...
Ich fang aber mal mit einer langsameren
Methode an, mir die Technik anzueignen -
das wird ein längerfristiges Projekt...
Auch den Zugriff über setName() werd
ich ausprobieren - bisher war die Art des
Zugriffs auf das Menu weniger das Problem,
sondern eher die Gelegenheit, zur Laufzeit
nach AusWahl eines SubMenus auf dieses
zuzugreifen.
Guten Morgen!
Grilli
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
da ist noch das Theme ( iTunes Design ) verändertGrillenHirni hat geschrieben:da staune ich grad ganz schön, was mit Ownerdraw möglich ist!
deshalb der Tip mit SetName() -> o:childFromNameGrillenHirni hat geschrieben:Auch den Zugriff über setName() werd ich ausprobieren - bisher war die Art des Zugriffs auf das Menu weniger das Problem, sondern eher die Gelegenheit, zur Laufzeit nach AusWahl eines SubMenus auf dieses zuzugreifen.
Code: Alles auswählen
Function irgendwo()
LOCAL oMainDlg := GetApplication():mainForm
// Menüeintrag mit einer Checkmarke versehen -> enable/disable
oMainDlg:childFromName( ID_VIEW ) :checkItem( IDV_MEDIALIB, .T. oder .F.)
RETURN NIL
Code: Alles auswählen
PROCEDURE irgendwas()
LOCAL oPopMenu := SUB_FILE()
oXbPart:rbDown := {| aPos, uNIL, oSelf | oPopMenu:popUp(oXbPart,aPos) }
oder
oBrowse:itemRbDown := {| aMousePos, aRowCol, oSelf | oPopMenu:popUp(oXbPart,Mouse) }
...
RETURN
FUNCTION SUB_FILE( oMenu1, ... )
LOCAL oSubMenu
LOCAL cFile
IF oMenu1 <> NIL
oSubMenu := oMenu1
oSubMenu:setName(ID_FILE)
ELSE
oSubMenu := XbpImageMenu() :new( oMenu1 )
oSubMenu:title := "~File"
oSubMenu:BarText := "File Menu"
oSubMenu:create()
oSubMenu:setName(ID_FILE)
ENDIF
oSubMenu:AddItem( { "Open ~Playlist", { || cFile := OpenPList( oMainDlg, ... )};
,,XBPMENUBAR_MIA_OWNERDRAW }, 2028 )
...
oSubMenu:AddItem( { cText , {|| Msgbox("hi") },,XBPMENUBAR_MIA_OWNERDRAW }, nResourceID )
...
oSubMenu:checkItem( IDF_OPENPLAYLIST , .T. )
RETURN oSubMenu
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 18. Jul 2013 11:56
- Kontaktdaten:
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
Hallo Jimmy!
In dem gezeigten Menu oben hat es ganz rechts unten einen
Item - der heisst "Und plötzlich überholt Dich ein Subaru..."
Genauso hab ich mich gefühlt, wo ich das gesehen hab: wie
von einem Subaru überholt...
Die Resultate sind genial - der Ansatz wahrscheinlich auch -
ich beantrage im Büro ein SabbathJahr und verziehe mich
in eine Waldhütte zum ownerdrawen...
Grilli
In dem gezeigten Menu oben hat es ganz rechts unten einen
Item - der heisst "Und plötzlich überholt Dich ein Subaru..."
Genauso hab ich mich gefühlt, wo ich das gesehen hab: wie
von einem Subaru überholt...
Die Resultate sind genial - der Ansatz wahrscheinlich auch -
ich beantrage im Büro ein SabbathJahr und verziehe mich
in eine Waldhütte zum ownerdrawen...
Grilli
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Kann man von XbpMenuBar() auch eine Klasse ableiten?
siehe https://www.youtube.com/watch?v=LPHZ0ZQrlY8GrillenHirni hat geschrieben:"Und plötzlich überholt Dich ein Subaru..."
Der Snapshop von den Menus ist von meinem Xbase++ ActiveX Player (WMP.OCX)
da sich das Programm auch per "Fernbedienung" steuern lässt hab ich die Menuesteuerrung so konstruiert das ich schnell per Hotkey Menuepunkte abrufen kann welche die Befehle enthält.
siehe dazu auch den Tip in der Wissensbasis http://www.xbaseforum.de/viewtopic.php?f=16&t=8302
gruss by OHR
Jimmy
Jimmy