Modernisieren einer Anwendung mit FIX 4.0.0 - Was wurde verändert?

Anhand der folgenden 7 Schritte können Sie sich einen Überblick verschaffen, was verändert wurde.

Schritt 1: Übersetzen

Die Anwendung wurde mit FIX 4.0.0 übersetzt. Dieser Schritt dient eigentlich nur zur Vorbereitung und ist Voraussetzung für die folgenden Schritte. Er zeigt jedoch, dass bereits nach der Übersetzung alle Module ohne größere Änderungen voll funktionsfähig sind.

Schritt 2: Austausch der Semigrafikzeichen

Die mit FIX/Win ausgelieferten Semigrafikzeichen entsprechen dem Stand der Technik von 1995. Durch den Austausch der Bitmaps für diese Zeichen lässt sich eine wesentlich modernere und ansprechendere Optik erzeugen. Diese Änderung bedeutet zwar einen relativ hohen Aufwand, da jede Bitmap neu entworfen werden muss. Andererseits lohnt sich aber dieser Aufwand, da von der Änderung alle Module profitieren, weil jede Maske die gleichen Grafikzeichen verwendet.

Passend zu den Bitmaps wurde die Farbzuordnungstabelle angepasst. Sie besitzt seit der Version 4.0.0 ein neues erweitertes Format, das auch die Definition von Schriftattributen wie "Fett", "Kursiv" oder "Unterstrichen" zulässt.

Schritt 3: Proportionalschrift für Führungstexte

Dieser Schritt benötigt etwas Vorarbeit, die für dieses Beispiel schon bei der Umstellung der Anwendung auf FIX 2.9.4 erledigt wurde: Die Layoutdateien der Maske müssen vom binären (mly) in das textuelle Format (pan) konvertiert werden. FIX bietet dafür ein Werkzeug an.

Danach kann die textuelle Datei mit einem Texteditor bearbeitet werden. Um Führungstexte in Proportionalschrift zu verwenden, müssen lediglich die "Write"-Anweisungen durch "Textlabel" Anweisungen ersetzt werden. Die Parameter müssen nicht geändert werden. Das Ganze beschränkt sich also auf simples Suchen&Ersetzen. Um alle Module der Anwendung zu bearbeiten, kann ein Shellskript mit Hilfe von sed diese Aufgabe erheblich erleichtern.

Durch diese Änderung werden alle Texte in sogenannte Paintareas vom Typ Textlabel umgesetzt. Paintareas sind Zeichenflächen, die vom Frontend mit beliebigem Inhalt gefüllt werden können. Sie besitzen ein Token, das durch sein Breite den Bereich definiert und einen optionalen Text, der von FIX/Win zur Darstellung genutzt werden kann. Paintareas vom Typ Textlabel werden vom Frontend dargestellt, indem der Text in Proportionalschrift gezeichnet wird. Wenn der Text - wie in diesem Fall - nicht angegeben wird, dann wird das Token als Text verwendet.

Der Vorteil bei der expliziten Angabe eines Textes liegt darin, dass der Text wesentlich länger sein darf als das Token. Damit kann die Optik noch weiter verbessert werden. Ein Text in Proportionalschrift benötigt oft weniger Platz. Texte, die früher abgekürzt wurden, können nun ausgeschrieben werden. Oder es besteht die Möglichkeit, die Felder näher an den Texten zu platzieren, um so mehr Platz für weitere Informationen zu haben. Eine weitere Möglichkeit besteht in der Verwendung von Tooltips. Gerade bei Tabellenüberschriften, bei denen immer chronischer Platzmangel herrscht, kann der komplette Bescheibungstext auch als Tooltip zur abgekürzten Beschriftung angegeben werden. Die neue Version des Layouteditors led, die jetzt unter FIX/Win gestartet werden kann und so Mausunterstützung und eine bessere WYSIWYG-Darstellung bietet, stellt dabei eine große Hilfe dar.

zum Vergrößern bitte anklicken...

Alternativ besteht auch die Möglichkeit, die Paintareas programmatisch zu erzeugen. Die Paintareas werden dabei nicht im Layout definiert. Eine Umsetzung in das textuelle Layoutformat ist deshalb nicht notwendig. Stattdessen wird in der Anwendung eine Funktion implementiert, die das Layout nach dem Laden einer Maske analysiert und entsprechende Bereiche durch Paintareas ersetzt.

Schritt 4: Proportionalschrift für Felder

Durch die Definition eines Ressourcewertes in der Datei fix.rc werden alle Felder als Fieldareas dargestellt. Fieldareas arbeiten ähnlich wie Paintareas. Sie werden zur Darstellung von Feldinhalten in Proportionalschrift benutzt. Im Gegensatz zu Paintareas ändert sich der Inhalt einer Fieldarea wesentlich häufiger. Deshalb kommt hier ein leicht abgewandeltes Verfahren zum Einsatz.

Eine Folge der Verwendung von Fieldareas ist, dass FIX/Win in diesem Fall nicht mehr die Feldwert-Erfassung von FIX benutzt. Stattdessen wird eine Feldwert-Erfassung von FIX/Win benutzt, die auf nativen Windows-Feldern (Edit Control) basiert. Die Erfassung wird damit mehr "Windows-like". So ist beispielsweise das Positionieren der Schreibmarke oder das Markieren von Textteilen mit der Maus möglich. Tasten wie Pos1, Ende, Strg-Pfeiltaste sind mit den gleichen Funktionen belegt, wie in anderen Windows-Anwendungen.

Damit auch die übrige Bedienung eine passende Tastenbelegung verwendet, ist es möglich, die Belegung der Tasten, die nicht die Feldwert-Erfassung betreffen, kontextabhängig zu definieren. Auf diese Weise kann beispielsweise, beim Drücken von TAB in einer Maske das Event K_RT gesendet werden und beim Drücken von TAB in einem Menü dieses Event unterbunden werden. Die Belegung der Tasten kann also geändert werden, ohne dass die Logik der Anwendung davon betroffen ist. Dadurch wird ein weiteres Stückchen "Windows-like" erreicht.

Wie bei den Führungstexten ist auch bei Feldern der Einsatz von Feinarbeit möglich, um die Breiten der Felder an den Platzbedarf der Texte anzupassen. In den meisten Fällen sinkt der Platzbedarf durch den Einsatz von Proportionalschrift. Es gibt jedoch auch Fälle, bei denen es notwendig ist, das Feld zu verbreitern. Das trifft z.B. oft bei Feldern zu, die nur Großschrift verwenden. Unbedingt notwendig ist das jedoch nicht, da zum einen abgeschnittene Feldwerte automatisch durch Tooltips vollständig dargestellt werden und zum anderen bei der Erfassung der Feldwert automatisch verschoben wird. Beim Anpassen der Breiten wird immer nur die Anzeigebreite verändert. Die Feldbreite, die die Anzahl Zeichen eines Feldes bestimmt, bleibt davon unberührt.

Schritt 5: Darstellung des Menüs

Über eine Einstellung in der Datei fix.rc kann festgelegt werden, dass alle Menüpunkte Proportionalschrift verwenden. Zur Darstellung werden dann Paintareas verwendet. Um eine noch bessere Optik zu erhalten, wurden die Semigrafikzeichen der Rahmen ausgetauscht. Das Logo im Hintergrund, das in der alten Version einfach durch invertierten Text dargestellt wurde, wurde durch eine Grafik (Siehe Schritt 7) ausgetauscht.

zum Vergrößern bitte anklicken... zum Vergrößern bitte anklicken...

 

Weitere Verbesserungen der Optik lassen sich erreichen, indem im Frontend eine eigene Funktion zur Darstellung der Menüpunkte implementiert wird. Damit ist es beispielsweise möglich, den invertierten Bereich des aktiven Menüpunkts bis zum Rahmen zu füllen oder zu einem Menüpunkt ein Icon zu zeichnen.

Schritt 6: Darstellung von Tabellen und Selos

zum Vergrößern bitte klicken... zum Vergrößern bitte klicken...

Durch den Aufruf einer FIX-Funktion, wird festgelegt, dass alle Selos in Tabellendarstellung gezeichnet werden sollen. Das bewirkt, dass FIX die Überschriften als Tableheader zeichnet und dass FIX/Win die Felder in einer anderen Art und Weise zeichnet.

Um die gleiche Darstellung bei Tabellen zu erreichen, ist eine Funktion zu implementieren, die für jedes Feld festlegt, ob es als Tabellenfeld dargestellt werden soll, oder nicht. Ein erster Ansatz für eine solche Funktion ist eine, die alle Felder, die innerhalb einer Tabelle liegen als Tabellenfelder definiert. Diese Funktion kann dann um Ausnahmen erweitert werden, in denen bestimmte Tabellen ausgelassen werden. Bei der Verwendung von Zeilenvarianten kann es beispielsweise sinnvoll sein, weiterhin die alte Darstellung zu verwenden.

Um die Optik der Tabellen perfekt darzustellen, müssen die Felder einer Tabelle unmittelbar nebeneinander liegen und die Überschriften müssen in Paintareas vom Typ Tableheader umgewandelt werden. Dieser Schritt kann entweder durch die Anpassung des Layouts mittels led vorgenommen werden, oder durch eine intelligente Logik, die die Felder nach dem Laden verschiebt und die Überschriften anpasst.

Schritt 7: Anzeigen von Grafiken

Paintareas lassen sich in vielfältiger Weise nutzen. Sie sind nicht auf die Darstellung von Texten in Proportionalschrift beschränkt. Allgemein gesehen handelt es sich um Flächen, die vom Frontend durch beliebige Zeichenoperationen gefüllt werden können. Sie können deshalb auch zur Darstellung von Grafiken und Bitmaps benutzt werden.

Größere Grafiken werden in einem Bereich dargestellt, der durch mehrere Paintareas untereinander definiert wird. Jede Paintarea enthält zum einen eine Zeileninformation und zum anderen die Information, um welche Grafik es sich handelt. Diese Information kann beispielsweise in einem der privaten longvals, im Token oder im Text der Paintarea untergebracht werden.

In der Benutzerbibliothek von FIX/Win ist eine Funktion zu implementieren, die diese Informationen erkennt, eine entsprechende Grafik konstruiert und den zur Zeile passenden Teil in die entsprechende Paintarea kopiert.

Im Beispiel wurde diese Technik benutzt, um Passbilder von Personen anzuzeigen. Nach dem Lesen eines Satzes wird die ID der Person in die Paintareas eingetragen, die das Passbild aufnehmen sollen.

Auf der Seite von FIX/Win wurden die möglichen Passbilder als Bitmaps zur Verfügung gestellt. Sie werden von der Benutzerbibliothek geladen und in die entsprechenden Paintareas kopiert.

Da es sich hier um ein Beispiel handelt, wurde der Code bewusst einfach gehalten. In einer echten Anwendung müssen einige Detailprobleme gelöst werden. So ist beispielsweise das Format, die Größe und der Speicherort der Bitmaps von zentraler Bedeutung. Windows bietet eine Funktion an, die Bitmaps in den Formaten *.bmp, *.gif, und *.jpg lesen kann. FIX besitzt eine Funktion, mit der binäre Daten zum Frontend übertragen werden können. Damit ist es möglich, die Bilder in der Datenbank abzulegen. Um den Netzwerkverkehr zu minimieren, sollte dann jedoch über einen Cache-Mechanismus nachgedacht werden. Auch die Tatsache, dass mehrere Bitmaps gleichzeitig sichtbar sein können, muss durch eine entsprechende Verwaltung behandelt werden.