Developer »
C / C++ / Scripten »
cOsdObject aus cOsdMenu heraus erstellen
Brougs78
Location: Tirol (A)
Tuesday, October 5th 2004, 5:03pm
Ich probiere gerade ein wenig mit dem OSD vom VDR herum und hätte dazu eine Frage.
Angenommen ich habe ein Objekt, welches auf cOsdMenu basiert. Dieses wird beim start vom Plugin erstellt. Dadurch wird ja das OSD von diesem Objekt belegt. Ist es dann irgendwie möglich, dass ich aus diesem Menü heraus ein neues Objekt erstelle welches auf cOsdObjekt basiert?
Mit anderen Worten: Kann ich das OSD zuerst freigeben, damit ich dann das neue Objekt erstellen kann?
P.S.: Ist wahrscheinlich ganz einfach, aber ich bin noch ziemlich unerfahren mit der C++-Programmierung.	- -- --- ================================================================ --- -- - HFlor
Location: Wutha-Farnroda
Occupation: Netzwerkadministrator
RE: cOsdObject aus cOsdMenu heraus erstellen
Hallo Brougs78,
Quoted	Original von Brougs78
... Mit anderen Worten: Kann ich das OSD zuerst freigeben, damit ich dann das neue Objekt erstellen kann?	Nein, Dein cOSDObject muß ja solange aktiv bleiben, wie dein Plugin läuft.
Entweder Du nutzt die Funktion AddSubmenu ... oder ein eigenes cControll (Dabei ist es aber fast unmöglich die Kontrolle über den VDR nach dem Ende des cControlls wiederzubekommen ....)
PS: machs doch mal andersrum: was möchtest Du erreichen?	Suche: 6 Richtige für die nächste Lottoziehung
PS: Wer Rechtschreibfehler findet, darf sie behalten!	Go to the top of the page
Danke für die Antwort.
Also gerade ist mir eingefallen, dass das Game-Plugin das genau so löst wie ich das haben möchte ... denke ich zumindest.
Zuerst werden die Spiele ja in einem normalen cOsdMenu angezeigt, die Spiele selbst werden dann aber in einem cOsdObject geöffnet. Und genau so etwas versuche ich auch zu realisieren. D.h. ich möchte zuerst eine Auswahl über eine geskinnte Menüstruktur, welche mir dann allerdings ein Fenster (bzw. halt das ganze OSD) öffnet, wo ich direkten Zugriff darauf habe.
Muss ich mir mal genauer ansehen, wie das gemacht wurde. » Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «	This post has been edited 1 times, last edit by "Brougs78" (Oct 5th 2004, 9:10pm)
LordJaxom
Location: Kind der Kirmes am Kanal
Occupation: System- und Anwendungsprogrammierer
Thursday, October 7th 2004, 5:17pm
Gibt'n ganz einfachen Trick:
In ProcessKey vom cOsdMenu erzeugst Du das neue cOsdObject, und speicherst den Zeiger irgendwo im Plugin-Objekt ab. Dann machst Du return osPlugin; wodurch das cOsdMenu ordentlich beendet und anschliessend der Hauptmenüpunkt nochmal aufgerufen wird.
In MainMenuAction musst du dann halt abfragen, ob das cOsdObject abgelegt wurde, und wenn ja, gibst Du das zurück statt dem cOsdMenu.
Als Graph:
MainMenuAction -> osdObject == NULL? Ja -> return new cOsdMenu
Später in ProcessKey: cMyPlugin::osdObject = new cOsdObject; return osPlugin -> MainMenuAction -> osdObject == NULL? Nein -> return osdObject
EDIT: Umgekehrt gehts übrigens offenbar nicht (Vom Object wieder ins Menu wechseln)	This post has been edited 1 times, last edit by "LordJaxom" (Oct 7th 2004, 5:18pm)
Hi LordJaxom!
Danke für den Tipp. Also so ähnlich ist das im Games-Plugin gelöst. Es gibt einfach eine Variable m für Menü, und wenn diese auf true gesetzt ist, dann wird ein cOsdMenu-Objekt erstellt und ansonsten ein cOsdObjekt. So habe ich das ganze jetzt auch getestet und funktioniert auch soweit.
Der Wechsel zurück auf ein cOsdMenu hat bei mir übrigens auch nicht funktioniert ... warum auch immer.
BTW, wenn man vorher nur ein wenig mit VB bzw. VBA herumprogrammiert hat, dann ist das ein ganz schöner Umstieg ... Gruß,
Monday, October 11th 2004, 5:10pm
Entweder ich stehe auf der Leitung oder ich kapier das ganze noch nicht ganz richtig, aber wie kann ich denn zwischen dem cOsdMenu und cOsdObject eine Variable übergen?
Habe schon mal mit dem "extern"-Parameter gespielt, das hat aber irgendwie nicht gefunzt --> undefined Symbol <variablenname>
Wenn ich die Variable z.B. im Plugin-Objekt als Public definiere und dann einfach die h-Datei inkludiere funzt es leider auch nicht.
Habe auch eine abstrakte Klasse mit der Variable (public und static) definiert und diese den beiden Objekten (cOsdMenu und cOsdObject) vererbt, aber das hat auch wieder ein undefined Symbol gebracht.
Help please.
EDIT: Hab jetzt einfach die Variable im Plugin erstellt und den Pointer im Konstruktor an die zwei OSD-Objekte übergeben. Eigentlich ganz einfach ... hätte ich gleich draufkommen können. Gruß,
» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «	This post has been edited 1 times, last edit by "Brougs78" (Oct 11th 2004, 6:15pm)
Tuesday, October 12th 2004, 11:49pm
EDIT: Hab jetzt einfach die Variable im Plugin erstellt und den Pointer im Konstruktor an die zwei OSD-Objekte übergeben. Eigentlich ganz einfach ... hätte ich gleich draufkommen können. Ich hab dafür in der cPluginBla Klasse eine static Variable definiert, und die Menüklasse als friend... Geht auch Go to the top of the page