Jump to content

USB Monitor (ohne Touch) als Infoscreen


ralle211

Recommended Posts

Posted

Ich habe einen Krämer V700 7" USB Monitor ohne Touch und will diesen als Infobildschirm verwenden.

 

Ich habe getestet:

- Das Tool "Touchscreen" welches gut aussieht, aber ständig abstürzt und viel zu viel Funktionen hat.

- Das Tool "DVBviewerInfo" welches jedoch grafisch nicht das ist was ich suche.

- Diverse andere die auch nicht so das waren was ich suche.

 

Also habe ich angefangen eins in C# mit der DVBViewerService.dll selber zu schreiben.

Soweit klappen die Grundfunktionen. Jedoch weiß ich nicht wie ich die Senderlogos über die DLL bekommen kann. Den Sendernamen habe ich ja ganz einfach auslesen können.

 

Was ich brauen will ist ein Screen 800x480 welcher folgende Daten enthält:

- Netten Background welchen ich shon habe

- Sendername incl. Senderlogo aus DVBViewer Ordner

- aktuelle Sendung mit Fortschrittsanzeige, nächste Sendung

 

Hat jemand eine Beschreibung der DVBViewerServer.dll oder nen Quellcode woran man etwas lernen kann?

Leider sind bei den ganzen von mir getesteten kleinen Tools nie der Quellcode mit dabei gewesen.

 

Meine aktuellen Herausforderungen sind:

- Senderlogo anzeigen.

- das Ganze mit den Threads. Vielleicht steige ich auf ne andere Sprache um.

 

 

Ich bin doch sicher nicht der einzige der sowas programmiert, oder ;)

Posted

Nee, da bist Du sicher nicht der Einzige.

Ich hab vor langer Zeit mal DVBTouch angefangen. Leider liegt das aus Zeitgründen schon länger auf Eis :(

Ist aber für Deine Zwecke auch überdimensioniert.

 

Das Senderlogo musst Du selbst aus dem Unterverzeichnis des DVBViewers laden. Die Pfad erhälst Du über den DataManger der DVBViewer-API.

In VB.Net würde das so gehen:

 

Dim LogoPfad as String
LogoPfad = DVBViewerObj.DataManager.Value("#channellogo")

In deiner Form erstellst Du dir eine PictureBox, in die Du das Senderlogo lädtst:

 

PictureBox.Image = Image.FromFile(LogoPfad)

Das ganze musst Du natürlich nach jedem Senderwechsel aktualisieren.

Posted

Hey vielen dank.

Das mit dem Logo klappt ganz gut.

Jedoch hap ich ein Problem mit dem channelchange Event.

Wenn ich mein Tool laufen lass geht der Event ein paar mal und dann nicht mehr. Ich nutze das Event und nen Timer. Der Timer aktualisiert jede Minute die Anzeige. Das geht auch immer. Den Code poste ich dann gleich mal.

Posted

Hier mal mein erster Wurf.

Wie gesagt, das "channelchange" Event geht nur eine kurze Zeit. Danach reagiert es nicht mehr. Auch im Debug-Mode nicht. Das Timer-Event geht aber dann immer noch.

Die try/catch Teile habe benutze ich weil nicht bei jeden Sender bei mir Infos da sind.

 

Mache ich da was mit den Threads falsch??

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using DVBViewerServer;

namespace DVBviewer_USBepg
{
   public partial class Form1 : Form
   {

       public static DVBViewerServer.IDVBViewer dvb;

       public Form1()
       {
           InitializeComponent();
       }

       public void Form1_Load(object sender, EventArgs e)
       {
           int i = 0;
           string s = "";


           while(Screen.AllScreens[i].Primary!=false)
           {
               i++;
           }
           this.DesktopLocation = Screen.AllScreens[i].Bounds.Location;

           dvb = (DVBViewerServer.IDVBViewer)System.Runtime.InteropServices.Marshal.GetActiveObject("DVBViewerServer.DVBViewer"); 

           DVBViewerEvents dvbVEventsObj = dvb.Events; 

           dvbVEventsObj.OnChannelChange += new DVBViewerServer.IDVBViewerEvents_OnChannelChangeEventHandler(Events_OnChannelChange);

           timer1.Interval = 1000 *(60 - DateTime.Now.Second);
           timer1.Start();
           screen_refresh(0);

       }

       private void Events_OnChannelChange(int ChannelNr) 
       {
           System.Threading.ThreadPool.QueueUserWorkItem(screen_refresh);
      }

       private void timer1_Tick(object sender, EventArgs e)
       {
           screen_refresh(0);
       }

       private void screen_refresh(object dummy)
       {
           MethodInvoker LabelUpdate = delegate
           {

               string slogo;

               lblSender.Text = dvb.CurrentChannel.Name;

               lblUhr.Text = DateTime.Now.TimeOfDay.Hours.ToString() + ":" + DateTime.Now.TimeOfDay.Minutes.ToString();
               if (DateTime.Now.TimeOfDay.Minutes < 10)
               {
                   lblUhr.Text = DateTime.Now.TimeOfDay.Hours.ToString() + ":0" + DateTime.Now.TimeOfDay.Minutes.ToString();
               }
               else
               {
                   lblUhr.Text = DateTime.Now.TimeOfDay.Hours.ToString() + ":" + DateTime.Now.TimeOfDay.Minutes.ToString();
               }

               try { lblEPGnow.Text = dvb.DataManager.get_Value("#TV.Now.start"); }
               catch { lblEPGnow.Text = "Keine Information"; }

               try { lblEPGnext.Text = dvb.DataManager.get_Value("#TV.Next.start"); }
               catch { lblEPGnext.Text = "Keine Information"; }

               try { lblEPGtextNow.Text = dvb.EPGManager.EPGNow.Title.ToString(); }
               catch { lblEPGtextNow.Text = "Keine Information"; }

               try { lblEPGtextNext.Text = dvb.EPGManager.EPGNext.Title.ToString(); }
               catch { lblEPGtextNext.Text = "Keine Information"; }

               try { lblEPGdescription.Text = dvb.EPGManager.EPGNow.Description.ToString(); }
               catch { lblEPGdescription.Text = "Keine Information"; }

               try { lblRest.Text = dvb.DataManager.get_Value("#TV.Now.remain"); }
               catch { lblRest.Text = "--:--"; }

               slogo = dvb.DataManager.get_Value("#channellogo");
               picLogo.Load(slogo);

               try { progressBarEx1.Value = Convert.ToInt16(dvb.DataManager.get_Value("#TV.Now.percentage")); }
               catch { progressBarEx1.Value = 0; }

               timer1.Interval = 1000 *(60 - DateTime.Now.Second);
               this.Refresh(); 
           };
           Invoke(LabelUpdate);
       }
   }
}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...