RESCO Forms Toolkit
Geschrieben von Andreas Erle (25.08.2008 00:00 CET)
Einleitung:
Wer schon mal eine nicht-triviale Windows Mobile Anwendung mit dem .NET Compact Framework entwickelt hat, weiß,
dass die von Microsoft mitgelieferten Controls nicht unbedingt der letzter Schluss aller Weisheit sind. Sie sind
schön für den Anfang, aber wenn es ernst wird, kommt schnell der Wünsch nach besseren Controls.
Resco, eine Slowakische Firma aus Bratislava, bietet mit dem Resco MobileForms Toolkit eine Möglichkeit diesen Wunsch zu befriedigen. In Juni 2008
kam die neueste Version, 2008 Volume 2, heraus. Die World of PPC hat sich die Herausforderung gestellt und ein
Review geschrieben.
Ich habe die Controls in 3 Gruppen unterteilt, auch wenn Resco das auf ihre Produktseite nicht macht: Multimedia
Controls, Outlook Controls und Daten Controls.
Multimedia Controls:
ImageButton
Der ImageButton ist das neueste Control in der MobileForms ToolKit, und füllt eine gähnende Lücke
in dem .NET Compact Framework: Der normale Button gibt dem Entwickler keine Möglichkeit, ein Bild statt ein
Text zu verwenden. Bis jetzt war der Ausweg einen PictureBox und dessen Click Event zu verwenden. Das funktioniert
zwar, aber ist natürlich aus Objekt-Orientiertem Sinn sehr unschön.
Der ImageButton hat also eine doppelte Aufgabe: er soll wie ein Bild aussehen, und sich wie ein Button verhalten.
Diese Aufgabe erfüllt der ImageButton so wie ich es erwartet habe. Für den Entwickler gibt es die bequeme
Möglichkeit in Visual Studio über das Property Grid die Bilder zu setzen: ein Bild für den normalen
Zustand, und eines für den gedrückten Zustand. Es gibt ebenfalls die Möglichkeit die Bilder für
VGA Geräte gesondert zu setzen.
Fazit: ein Control, das eine einfache Aufgabe hat und diese gut erledigt. So mag ich meine Controls!
InkBox
Wenn der Postler bei mir zuhause ein Paket abliefert, muss ich oft unterschreiben. Früher hat man da mit zetteln
herum tun müssen, heutzutage steckt er mir ein mobile Device zu, wo ich mit dem Stylus eine Unterschrift auf
dem Bildschirm malen kann. Mit dem InkBox kann ich diese Funktionalität jetzt auch in meinen eigenen Windows
Mobile Anwendungen einbauen.
Das Beispielprogram zeigt wie einfach es ist, den InkBox zu verwenden: das Control wird auf dem Form platziert,
und viel mehr braucht man nicht. Farbe und Dicke können natürlich geändert werden. Das Beispielprogram
zeigt sinnvollerweise ebenfalls, wie die Eingaben in eine SQL Server Compact Edition Datenbank gespeichert und
gelesen werden können - was für eine "Postleranwendung" wohl die beste Variante ist. Die "Zeichnung"
in einer Bitmap-Datei speichern ist technisch natürlich ohne weiteres ebenfalls möglich.
Fazit: ein weiteres Control das eine einfache Aufgabe hat, und diese gut erfüllt.
Audio
Das Audio Control bietet die Möglichkeit, Audio-Dateien wieder zu geben
oder aufzunehmen. Das funktioniert auch so weit, aber trotzdem bleibt
bei mir ein Gefühl das etwas fehlt hängen. Ich finde das API
unglücklich gewählt: es gibt die Möglichkeit, die Qualität von der
Aufnahme zu anderen über einen Methodenaufruf: SetRecordParameters(int
bitsPerSample, byte channels, int samplesPerSec, byte quality). Die
byte-Typen sind undurchsichtig, und auch bitsPerSample wäre als
enum-Typ besser bedient gewesen.
Fazit: Wenn die Erwartungen einmal an der Realität angepasst sind, ist auch das Audio Control ein gutes und sinnvolles Control das aber noch ein paar Feinschliffe gebrauchen kann.
ImageBox
ImageBox ist ein Control für die Darstellung von Bildern, aber auch für die Bearbeitung von Bildern.
Helligkeit, Kontrast und Gamma lassen sich ändern, und ausschneiden oder invertieren ist ebenso möglich.
Das bearbeitete Bild kann dann ohne weiteres über die üblichen .NET Methoden gespeichert werden.
Fazit: einfach und gut.
Zip
Die Zip Komponente bietet die Möglichkeit, Zip Dateien anzulegen und zu bearbeiten. Die Zip Datei kann auch
im "normalen" Windows geöffnet und extrahiert werden. Einziger wehmutstropfen dabei: wenn eine
Datei mit einem Kennwort verschlüsselt wird, kommt in Windows bei öffnen zwar die Aufforderung das Kennwort
einzugeben, aber jede Eingabe wird als falsch bewertet, sodass die Datei nicht extrahiert werden kann. Auf dem
Windows Mobile Gerät funktioniert das Kennwort anstandslos.
Fazit: eine Zip-Funktionalität ist heutzutage bei ansteigenden Größen von internen und externen
Speicher vielleicht nicht mehr so wichtig, aber es ist natürlich nett es zu haben.
CompactChart
Mit CompactChart können einfache Charts dargestellt werden, in 5 möglichen Formate: Pie, Line, Doughnut,
Bar und Area. Es können sowohl "live" Daten (die sich also dauernd ändern) als auch "statischen"
Daten dargestellt werden. Dies ist ein Control so wie ich es schon einige male gebraucht hätte, allerdings
leidet es meiner Meinung nach ein bisschen darunter, dass die 5 Darstellungsformate in einem Control hineingezwungen
sind, wo die verschiedene Darstellungen doch leicht unterschiedliche Daten brauchen.
Fazit: gut, zu überlegen ob es nicht besser wäre, das Control auf 5 Controls aufzuteilen.
Outlook Controls:
OutlookShortcutBar
Das OutlookShortcutBar macht genau was der Name verspricht: es stellt einen Bereich mit Shortcuts dar, so wie man
es aus Outlook oder Microsoft CRM kennt. Die Webseite verspricht gute Unterstützung des Visual Studio Designers,
und das stimmt auch wirklich: bei diesem Control funktioniert der Designer genau wie der normale Windows Forms
Designer. Kleiner kritikpunkt: wieso heißt das Event, das beim klicken auf einem Shortcut ausgelöst
wird, "ShortcutEntered"? Ich wäre glücklicher mit z.B. "ShortcutClicked".
Fazit: ein gutes Control, und die sehr ausgereiften Designer Unterstützung begeistert mich einfach. Ein solches
Niveau ist leider bei vielen Control-Anbietern weit zu suchen, aber hier ist es gelungen!
OutlookMonthCalendar
Der OutlookMonthCalendar stellt eine Monatsübersicht dar, so wie es sie auch im Pocket Outlook gibt. Dabei
kann der Entwickler festlegen, wie viele Monate neben und unter einander angezeigt werden sollen. Bei eine Dimension
von 3 bei 4 ergibt sich dann einen Jahreskalender. Ein Tag aus dem Kalender wird über einen Typ namens DayCell
bereitgestellt, und da können Vorder- und Hintergrundfarben, Bild (z.B. Dreieck oder Quadrat) und Schriftart
festgelegt werden. Auch dem gesamten Control kann eine Hintergrundfarbe oder einen Farbverlauf gegeben werden.
Fazit: Auch dieses Control ist ein robustes Element aus der Resco Bibliothek. Am Anfang habe ich einige zeit gesucht,
wie ich das Control von "Monat" auf "Jahr" umstellen konnte, bis ich dann herausgefunden habe,
dass dieses Control beliebig viele Monate anzeigen kann - also nicht nur entweder Monat oder Jahr, sondern z.B.
auch Quartalsweise, oder so viele Monate wie man will.
OutlookWeekCalendar
Der OutlookWeekCalendar stellt eine Tagesübersicht (der Name des Controls ist also ein wenig irreführend)
dar. Das ganze schaut Pocket Outlook sehr ähnlich, inklusive ein Pfeil nach oben oder unten der automatisch
aufscheint wenn ein Termin gerade nicht im sichtbaren Bereich ist. Der Entwickler kann angeben wie viele Tage
angezeigt werden sollen. Mit 7 Tage ergibt sich dann eine Wochenübersicht, dem das Control seinen Namen verdankt.
Fazit: Das Gute ist, dass das Control ohne viel Konfigurieren aussieht und sich benimmt wie Pocket Outlook. Aus
Entwicklersicht ist es allerdings ein wenig merkwürdig, dass die Termine immer wieder bei der Verarbeitung
des ResolveAppointments Events eingefügt werden müssen. Da hätte ich lieber eine einfache "Appointments"
Liste.
OutlookDateTimePicker
Das OutlookDateTimePicker ist zwei Controls in einem: einerseits ist es
ein DateTimePicker Control und andererseits (mit Style = WeekDayPicker)
ist es eine leiste die es ermöglicht einen Wochentag zu wählen, wie der
Pocket Outlook Kalender oberhalb vom Tages- oder Wochen-Übersicht
anzeigt. Im DateTimePicker Modus überbietet das Control die von
Microsoft für das .NET Compact Framework entwickelte Version mit
erweiterten Konfigurationsmöglichkeiten für die visuelle Gestaltung.
Fazit: die kleine, feine Ergänzung die die Outlook Controls komplett macht.
Daten Controls:
AdvancedTree
Das AdvancedTree Control ist ein besseres TreeView Control. Im Gegensatz zum "normalen" TreeView, bietet
AdvancedTree die Möglichkeit, für unterschiedliche Objekte unterschiedliche Darstellungen zu verwenden:
z.B. für Kunden eine zweizeilige Ansicht mit Farbverlauf. Der Editor für diese Ansichten ist ein bisschen
gewöhnungsbedürftig, aber so bald man den Dreh heraus hat, erzielt man tolle Ergebnisse.
Fazit: die Einarbeitungszeit war ein bisschen länger als bei den einfacheren Controls, aber dafür bekommt
man ein mächtiges und gelungenes TreeView Control.
AdvancedList
Das AdvancedList Control ist ein besseres ListBox Control. Die Flexibilität dieses Controls erinnert aber
viel mehr an das ListBox Control von Windows Presentation Foundation oder das ListView Control von ASP.NET als
an die Windows Forms Variante. Der XML Template Editor für die verschiedene Ansichten ist auch einigermaßen
gewöhnungsbedürftig, dafür können die Ansichten zu Laufzeit ausgetauscht werden - z.B. einzeilig,
mehrzeilig, QVGA oder VGA, Portrait oder Landscape …
Fazit: Wenn man sich an den XML Template Editor gewöhnt hat, hat man ein ungemein mächtiges Listencontrol,
und kann man getrost auf das ListBox Control von Microsoft verzichten.
SmartGrid
Auch wenn ich die Phrase "Das x Control ist ein besseres y Control" schon ziemlich strapaziert habe:
das SmartGrid Control ist ein besseres DataGrid Control. Ein besseres DataGrid Control ist dringend notwendig:
viele Line-Of-Business Anwendungen stellen Daten in tabellarischen Form da, aber das von Microsoft gelieferte DataGrid
Control wird eher keine Preisen gewinnen. Also "Resco to the Rescue", wenn Sie mir das Englischsprachige
Wortspiel verzeihen.
Das SmartGrid Control hat sehr viele Möglichkeiten, was man schon alleine an der Zahl der Beispielprogramme
sieht: 15 Stück! Da wird man als Reviewer natürlich leicht panisch, denn wie soll man in einen vernünftigen
Zeitraum alle diese Möglichkeiten beurteilen? Aber zum Glück beschränken die Beispiele sich auf
eine Funktionalität und sind somit leicht verständlich.
Fazit: ein mächtiges, gutes und notwendiges Control.
DetailVie
Wo ein Master-Control ist, wie z.B. AdvancedList oder SmartGrid, dort muss auch ein Details-Control sein (or as
they say in English: "Always two, there are: A Master, and an Apprentice a Details view"). Das DetailView
Control erfüllt genau diese Aufgabe. Auch hier kommt der XML Template Editor mit den bereits erwähnten
Vor- und Nachteile zum Einsatz.
Fazit: Detail-Ansichten entwickeln wird mit dem DetailView um ein vielfaches einfacher. Die Möglichkeit,
das Formular auf mehreren Seiten zu unterteilen, und dabei die Eingabefelder mittels "Move Up" and "Move
Down" zu verschieben (statt Ausschneiden-Einfügen) ist einfach Spitze.
Preis:
Ab 499.95 USD direkt bei RescoFazit:
Resco MobileForms Toolkit ist ein umfangreiche Control-Bibliothek, und ein Review wie dieses kann naturgemäß nur "die Oberflache ankratzen". Trotzdem habe ich in diesem Review versucht, einen Eindruck von Resco MobileForms Toolkit zu ermitteln, sowohl was die Funktionalität als auch die Entwickler-Freundlichkeit angeht. Ich bin von beiden Aspekten begeistert: die Funktionalität geht weiter über dem heraus, was das .NET Compact Framework anbietet oder mit vertretbaren Aufwand ermöglicht. Auch wenn die APIs hier oder da nicht ganz meinen Vorstellungen entspricht, kann man als Entwickler produktiv mit den Resco Controls arbeiten.Es gibt viele Beispielen, das ist gut - es ist ein bisschen schade, dass bei vielen dieser Beispiele die Referenzen auf den Resco Assemblies ausgebessert werden müssen. Die Tutorials auf der Webseite sind auch sehr hilfreich. Mit der Kombination aus Beispiele und Tutorials kommt man schon sehr weit. Ich mag es nicht, Aussagen zu tätigen wie "Dieses oder jenes Program muss man unbedingt haben", denn es gibt bestimmt Situation, wo das Program nichts bringt oder sogar schadet. Darum formuliere ich meine Conclusio anders: Wer ernsthaft Windows Mobile Anwendungen entwickeln will, wäre gut beraten, Resco's MobileForms Toolkit in Detail zu evaluieren, denn die gebotene Funktionalität ist viel reicher als die von den normalen Controls von Microsoft.