Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: VDR Portal. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Dienstag, 5. Oktober 2004, 17:03

cOsdObject aus cOsdMenu heraus erstellen

Hi!

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?

Gruß,
Brougs78

P.S.: Ist wahrscheinlich ganz einfach, aber ich bin noch ziemlich unerfahren mit der C++-Programmierung.
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

HFlor

Meister

Beiträge: 1 798

Wohnort: Wutha-Farnroda

Beruf: Netzwerkadministrator

  • Nachricht senden

2

Dienstag, 5. Oktober 2004, 19:46

RE: cOsdObject aus cOsdMenu heraus erstellen

Hallo Brougs78,

Zitat

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 ....)

Hardy

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!

3

Dienstag, 5. Oktober 2004, 21:09

Hi!

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.

Gruß,
Brougs78
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Brougs78« (5. Oktober 2004, 21:10)


LordJaxom

Meister

Beiträge: 2 115

Wohnort: Kind der Kirmes am Kanal

Beruf: System- und Anwendungsprogrammierer

  • Nachricht senden

4

Donnerstag, 7. Oktober 2004, 17:17

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)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LordJaxom« (7. Oktober 2004, 17:18)


5

Donnerstag, 7. Oktober 2004, 19:29

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 ... :D

Gruß,
Brougs78
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

6

Montag, 11. Oktober 2004, 17:10

Hi!

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.

?( :rolleyes: ?( 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. :O

Gruß,
Brougs78
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Brougs78« (11. Oktober 2004, 18:15)


LordJaxom

Meister

Beiträge: 2 115

Wohnort: Kind der Kirmes am Kanal

Beruf: System- und Anwendungsprogrammierer

  • Nachricht senden

7

Dienstag, 12. Oktober 2004, 23:49

Zitat

Original von Brougs78
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.

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. :O


Ich hab dafür in der cPluginBla Klasse eine static Variable definiert, und die Menüklasse als friend... Geht auch :]

Immortal Romance Spielautomat