Howto : Fernbedienung, MessageBox, DLLs, sot.ini lesen,Screen positionieren

strammermax

Neuer User
Mitglied seit
6 Nov 2007
Beiträge
72
Punkte für Reaktionen
0
Punkte
0
Hallo WinCE Entwickler,
hier kommt nun ein HowTo für Leute, die schon mehr als “Hello World” auf dem Kasten haben.

Um was gehts?
  • Fernbedienung-Ereignisse abfangen
  • MessageBox
  • toolbox.dll einbinden
  • sot.ini auslesen und schreiben
  • Bildschirm positionieren

Vorraussetzung :

1. Fernbedienungsereignisse abfangen, Message Box verwenden

Zuerst müssen wir festlegen, wer die Ereignisse verwalten soll. Damit sich später nicht 2 Elemente um das plötzlich auftretende Ereignis streiten, mache ich es immer so, das es eine zentrale Verwaltung dafür gibt. Das ist freilich Geschmackssache. Normalerweise bekommt immer der das Ereignis zuerst, der den "Focus" hat. Danach alle parent-Objekte. Auch wenn das Ereignis verbraucht wurde...

Als erstes setzen wir also für das main-Form die Eigenschaft “KeyPreview” auf true (unter Form1 -> rechtsklick -> eigenschaften).

Danach klicken wir auf den gelben Blitz und doppelklicken hier “KeyDown” (auch wenn da schon was steht). Dort können wir nun nach belieben Ereignisse abfangen. Hier eine vollständige Liste aller FernbedienungsCodes :

13 = OK [ enter ]
27 = EXIT [ esc ]
181 = MENU
114 = BACK

38 = ARROW UP
40 = ARROW DOWN
37 = ARROW LEFT
39 = ARROW RIGHT

17 = Rote Taste [ strg ]
46 = grüne Taste [ entf ]
93 = Gelbe Taste [ Context-Menü-Taste ]
182 = blaue Taste
35 = lila Taste ( entspricht PR- )

36 = PR +

48 = Taste 0
49 = Taste 1
50 = Taste 2 usw.
57 = Taste 9

37 = AV
113 = Tools Taste

177 = REV
179 = PLAY
176 = FWD
106 = REC [ * ]
178 = STOP
33 = PAUSE
39 = HOME
109 = INFO [ - ]
38 = GUIDE


Folgendes Code-Beispiel gibt euch die Tastaturdrücke auf dem Bildschirm aus :

Code:
using System;

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

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyValue)
            {
                case 27:
                    Application.Exit();
                    break;

                case 13:
                    MessageBox.Show("Du hast die OK Taste gedrückt!");
                    break;

                case 93:
                    MessageBox.Show("Du hast die gelbe Taste gedrückt!");
                    break;

                default:
                    MessageBox.Show("Tastendruck : " + e.KeyValue);
                    break; // in C# muss hier ein break; stehen
            }
        }
    }
}

Nur beim drücken der EXIT, OK oder der gelben Taste passiert was, ansonsten (default) wird der Tastendruck so ausgegeben.

2. MessageBox

Die MessageBox hat noch einige Überladungen, am besten mal bißchen damit rumspielen.

Wollt ihr eine Abfrage coden, beispielsweise, ob das Programm denn wirklich abgebrochen werden soll, müsste das wie folgt aussehen :
Code:
case 27:
                    if (MessageBox.Show("Wirklich beenden?","Frage",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                        Application.Exit();
                    break;

Visual Studio kaut euch alles 10.000 mal vor. Man muss eigentlich nurnoch ein Objekt nehmen, einen Punkt dahintersetzen und STRG+Leertaste drücken und schon wird einem aallleees lang und breit erklärt ;-)


3. toolbox.dll einbinden

Um die Arbeit etwas zu vereinfachen, habe ich eine DynamicLibary geschrieben, welche ein paar nützliche Funktionen enthält.

Zum einbinden klickst du in der Projektmappe mit der rechten Maustaste auf “Verweise” und dann “Verweis hinzufügen”. Dort gibst du unter “Durchsuchen” die toolbox.dll an, die du aus dem Anhang runtergeladen hast.

screen5.JPG


Es sollte nun so aussehen wie auf “1”. Unter “2” kannst du einstellen, ob die dll im Windows Order (bzw. in dem in PATH angegebenen Verzeichnissen) gesucht werden soll oder sie lokal kopiert werden soll. Letzteres ist zu empfehlen, weil sich diese Datei wohl noch tausendmal ändern wird.

Hier eine Liste der wichtigsten Funktionen :

  • string get_current_dir() - gibt das aktuelle Arbeitsverzeichnis zurück
  • string md5(string text) - gibt den md5 verschlüsselten “text” zurück
  • string ini_get(string name, string ini_file) - mehr dazu unten
  • string ini_set(string name, string value, string ini_file) - s.u.
  • string sotini - s.u.
  • string getPathToSotIni - Liefert den Pfad zur sot.ini zurück
  • und noch unwichtige andere


4. sot.ini lesen und schreiben

Das speichern von Daten ist extrem wichtig, deshalb habe ich eine ini_get und eine ini_set Funktion plus eine gesonderte sotini geschrieben, deren Benutzung ich hier kurz anhand eines Beispiels erläutern will :

Wir erstellen zunächst ein Object der Klasse tools

Code:
toolbox.tools t = new toolbox.tools();

Falls wir schreibfaul sind (ja, sind wir), können wir oben zu den using-Directiven auch ein

Code:
using toolbox;

hinzufügen und brauchen jetzt nurnoch

Code:
tools t = new tools();

Mit t.getPathToSotIni() erhalten wir nun ganz einfach den aktuellen Pfad zur SOT.ini !

Die folgende Funktion zeigt z.B., wie das pageOffset ausgelesen und der Bildschirm dementsprechen angepasst werden kann :

Code:
private void setFormSize()
        {
            tools t = new tools();
            int x1 = int.Parse(t.sotini("offsetX1"));
            int x2 = int.Parse(t.sotini("offsetX2"));
            int y1 = int.Parse(t.sotini("offsetY1"));
            int y2 = int.Parse(t.sotini("offsetY2"));

            this.Left = x1;
            this.Top = y1;
            this.Width = x2 - x1;
            this.Height = y2 - y1;
        }

Diese können wir jetzt beispielsweise in der Form1_Load (die Funktion, die beim Laden des Forms aufgerufen wird (Form1->Eigenschaften->Ereignisse->Load) aufrufen und schon haben wir unser Fenster an die Vorgaben der sot.ini angepasst.

Schreiben kann man per
Code:
t.sotini(title,value);

Den Username für das SotPortal kann man beispielsweise so verändern :
Code:
t.sotini(“username”,”strammermax”);

Die sotini ist nichts weiter als eine kleine Weiterentwicklung der ini_get und ini_set.

t.sotini("offsetX1") ist nichts anderes wie t.ini_get("offsetX1","\\Wo gehts zur sot.ini\\sot.ini");

wobei natürlich "\\Wo gehts zur sot.ini\\sot.ini" durch den Aufruf von t.getPathToSotIni() ersetzt wurde.

Wollt ihr eigene configs schreiben, reicht sowas hier :

Code:
ini_set("meinName","Hase",t.get_current_dir() + "\\config.ini");

string name = ini_get("meinName",t.get_current_dir() + "\\config.ini");


Die fertige Solution habe ich natürlich als Download angehängt!!!

Das wars erstmal dazu. Falls ihr Fragen habt, nur zu!!!
 

Anhänge

  • toolbox.zip
    29.4 KB · Aufrufe: 24
  • test.zip
    67.5 KB · Aufrufe: 20
Zuletzt bearbeitet:
Was soll ich dazu noch sagen ? Meine Hochachtung !

k015.gif
&
n025.gif
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.