- 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?
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 :
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 :
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.
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 :
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
Falls wir schreibfaul sind (ja, sind wir), können wir oben zu den using-Directiven auch ein
hinzufügen und brauchen jetzt nurnoch
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 :
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
Den Username für das SotPortal kann man beispielsweise so verändern :
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 :
Die fertige Solution habe ich natürlich als Download angehängt!!!
Das wars erstmal dazu. Falls ihr Fragen habt, nur zu!!!
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 :
- Hello World HowTo http://www.ip-phone-forum.de/showthread.php?t=167215
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.
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
Zuletzt bearbeitet: