KeyCommander: Plugins schreiben
3. Erstellen einer neuen Action
Sollte Visual Studio beim Erstellen des Projekts automatisch eine leere Klasse Class1 erstellt haben, kannst du diese für deine neue Action verwenden, ansonsten füge eine neue Klasse hinzu. Die Klasse nennen wir z. B. KCActionTest und leiten sie von KeyCommander.KCAction ab. Dafür schreiben wir am besten in den using-Bereich:
using KeyCommander;
Die Klasse sieht dann so aus:
using System;
using System.Collections.Generic;
using System.Text;
using KeyCommander;
namespace KeyComTestActions
{
public class KCActionTest : KCAction
{
}
}
So, wir haben jetzt eine neue, leere Action-Klasse, die aber noch nichts macht und sich auch nicht kompilieren ließe Download Hongmi Note 7 Global Rom. Denn die KCAction-Klasse bringt ein bestimmtes Protokoll mit sich, die alle abgeleiteten Klassen einhalten müssen:
- die Funktion DoAction() muss in jeder abgeleiteten Klasse deklariert werden, da sie als abstrakt gekennzeichnet wird. Der Grund dafür ist, dass diese Funktion aufgerufen wird, wenn die Action aufgerfuen wird, d.h. das tut, wofür sie geschrieben wurde. Eine Action ohne auszuführenden Code ergäbe keinen Sinn Download hexdump.
- Die Funktion ToString(Language lang) ist ebenfalls als abstrakt deklariert und muss von jeder abgeleiteten Klasse überschrieben werden. Die Methode wird für eine kurze Beschreibung in der Auflistung verwendet, wobei der Parameter lang dazu verwendet werden kann, eine Sprachabhängige Beschreibung zurückzugeben 원고지.
- Die virtuelle Methode GetImage() kann auch überschrieben werden, um das angezeigte Symbol eine Action in der Auflistung anzupassen. Sie muss einfach ein System.Drawing.Image mit einer Größe von 32 x 32 Pixeln wiedergeben, das auch dynamisch erstellt werden kann.
- Die statische Funktion InitActionClass() kann deklariert werden, um beim Laden der Klasse benutzerdefinierten Code auszuführen, z. B. das Laden einer Resource oder auch das Hinzufügen eines TypeHandlers, worauf wir später zu sprechen kommen.
Die Funktion DoAction()
Beginnen wir am Besten mit der Implementierung der Funktion DoAction():
public override void DoAction()
{
// hier den auszuführenden code reinschreiben
...
//
}
Alles, was in dieser Funktion steht, wird ausgeführt, sobald die Action an der Reihe ist. Ist der Code zu ende ausgeführt, wird die Nächste Action des Events abgearbeitet. Alle Events arbeiten in verschiedenen Threads, somit werden Actions, die einem anderen Event zugehören, nicht blockiert.
Wir lassen die Action in zur Veranschaulichung eine MessageBox. Dazu muss ein Verweis, falls nicht vorhanden, auf System.Windows.Forms hinzugefügt werden. Unsere Funktion sieht dann beispielsweise so aus:
public override void DoAction()
{
MessageBox.Show("Action wird ausgeführt!");
}
Die Funktion ToString lassen wir folgendes zurückgeben:
public override string ToString(Languages lang)
{
return "Nachricht anzeigen";
}
Attribute
Nachdem wir diese Funktion hinzugefügt haben, ließe sich die Action zwar kompilieren, würde aber im Auswahlmenü des KeyCommanders der verfügbaren Actions nicht angezeigt werden. Es Fehlen nämlich noch Attribute, die die Klasse als Action kennzeichen und sie für den Benutzer beschreiben. Ubedingt erforderlich sind die Attribute KCAction und Serializable. KCAction sagt dem Plugin-Manager des KeyCommanders, das es sich bei der markierten Klasse um eine Action handelt, die vom Benutzer zu einem Event hinzugefügt werden kann, während Serializable für das Speichern der Action erforderlich ist.
Außerdem muss noch mindestens ein Description-Attribut angegeben werden, dass der Klasse einen Namen gibt und deren Funktion beschreibt. Es können einer Action-Klasse mehrere Description-Attribute zugeordnet werden, um Mehrsprachigkeit zu ermöglichen.
Der gesamte Code der Klasse sieht dann so aus:
using System;
using System.Collections.Generic;
using System.Text;
using KeyCommander;
using System.Windows.Forms;
namespace KeyComTestActions
{
[KCAction, Serializable]
[Description(Languages.German, "Nachricht anzeigen", "Zeigt eine Nachricht an")]
public class KCActionTest : KCAction
{
public override void DoAction()
{
MessageBox.Show("Action wird ausgeführt!");
}
public override string ToString(Languages lang)
{
return "Eine Nachricht anzeigen";
}
}
}
Nach dem Erstellen des Projekts kann das Debuggen gestartet werden und die neue Action sollte im Auswahlmenü erscheinen. Noch ist die Action recht unspektakulär, da sie keine Einstellungsmöglichkeiten bietet, wie z. B. den Nachrichtentext anzupassen.
Editierbare Variablen
Eine Action-Klasse kann beliebig viele Felder bzw. Variablen besitzen, des Werte vom Benutzer angepasst werden können. Um in unserem Beispiel den Nachritentext veränderbar zu machen, deklarieren wir erst einmal eine String-Instanzenvariable
public string Text;
In der DoAction-Funktion übergeben wir diesen String der MessageBox.Show.Methode:
public override void DoAction()
{
MessageBox.Show(Text);
}
Wie die Klasse selbst benötigt auch die neue Variable Attribute, damit der KeyCommander weiß, dass sie vom Benutzer geändert werden kann. Dazu steht das Attribut KCActionField zur Verfügung. Der erste (optionale) Parameter des Attributes gibt den Standardwert der Variable an. Der zweite gibt genauere Informationen über die Eingabeart und -weise (dazu später mehr). Neben dem KCActionField-Atrribute kommt wieder mindestens ein Description-Attribut zum Einsatz. Damit lässt sich der angezeigte Name der Variable und eine kurze Beschreibung für den Benutzer festlegen. Die Deklaration der Text-Variable sieht dann zum Beispiel so aus:
[KCActionField("Action wird ausgeführt!")]
[Description(Languages.German, "Nachrichtentext", "Der Text, der in dem Nachrichtenfeld angezeigt wird.")]
public string Text;
Hier nochmal der gesamte Code der Klasse:
using System;
using System.Collections.Generic;
using System.Text;
using KeyCommander;
using System.Windows.Forms;
namespace KeyComTestActions
{
[KCAction, Serializable]
[Description(Languages.German, "Nachricht anzeigen", "Zeigt eine Nachricht an")]
public class KCActionTest : KCAction
{
[KCActionField("Action wird ausgeführt!")]
[Description(Languages.German, "Nachrichtentext", "Der Text, der in dem Nachrichtenfeld angezeigt wird.")]
public string Text;
public override void DoAction()
{
MessageBox.Show(Text);
}
public override string ToString(Languages lang)
{
return "Eine Nachricht anzeigen";
}
}
}
Das Projekt kann jetzt erstellt und ausprobiert werden. Dazu einfach das Debuggen starten, ein Event hinzufügen. Die neue Klasse sollte in der Auswahlliste erscheinen und es lässt sich ein Text eingeben. Diese kurze Anleitung hat dir hoffentlich geholfen, um eigene Actions zu schreiben.
Verwandte Artikel
Palm LifeDrive mit 32 GB LayerTrayer 2