Virtual OS/2 International Consumer Education
VOICE Homepage: http://de.os2voice.org
Januar 2003

[Inhaltsverzeichnis]
[Vorherige Seite] [Nächste Seite]
[Artikelverzeichnis]

editor@os2voice.org


DrDialog, oder wie ich lernte, REXX zu lieben - Teil 5

Von Thomas Klein © Januar 2003

Der Artikel für diesen Monat ist ziemlich kurz. Sowohl beruflich bedingte Probleme als auch die jahreszeitbedingten Aktivitäten im Familienkreis ließen mir nicht die Zeit, die ich eigentlich veranschlagt hatte. Auf der anderen Seite wußte ich auch lange nicht, was ich in dieser Ausgabe nun schreiben sollte. Eine weiterführende Besprechung der controls wäre meiner Meinung nach zu langweilig gewesen. Denn eigentlich sollten Sie nach der Ausgabe vom letzten Monat auch in der Lage sein, sich mittels DrDialogs Online-Hilfe die notwendigen Informationen für die "restlichen" controls selbst anzueignen. Ungeachtet dessen werden wir aber in der nächsten Ausgabe auf jeden Fall noch das container control besprechen, da es sich dabei um ein sehr nützliches und erstaunlich reich ausgestattetes (und dementsprechend komplexes) Element handelt.

Aber was machen wir heute?
Ich würde Ihnen gerne einige Features vorstellen, die sehr nützlich zur Entwicklungszeit sind. Das array tool (für Steuerelement-Tabellen) und das group tool (Gruppierungswerkzeug). Außerdem werden wir uns kurz den "Notizbuchbereich" des code editors anschauen.

Das array tool

Bislang haben wir uns nur mit einem Dialog beschäftigt, der lediglich eine handvoll Elemente unterschiedlichen Typs enthielt. Stellen Sie sich stattdessen einmal einen Dialog zur Datenerfassung vor, mit mehreren Texteingabefeldern. Ein solcher Dialog erfordert häufig einiges an Größenänderungen, Herumschieben und Ausrichten der Felder, bis er "ordentlich" aussieht. Und jedes vergessene oder erst später noch hinzukommende oder eingefügte Eingabefeld zwingt Sie, den ganzen Kram nochmals durchzukauen: Kontrolle von Größe, Position, Ausrichtung... DrDialogs Entwicklungsumgebung stellt zwei großartige Werkzeuge zur Verfügung, um mit dieser Problematik fertig zu werden.

Wenn Sie mehrere Felder desselben Typs benötigen, können Sie diese entweder manuell anlegen, indem Sie einen der beiden Wege einschlagen, die wir bereits mehrfach angesprochen hatten (Ziehen und Ablegen aus dem Elementefenster oder mittels des Kontextmenüeintrags des Dialogs). Das wäre angebracht, wenn es sich um zwei oder drei Elemente desselben Typs handelt, die sich an unterschiedlichen Positionen im Dialogfenster befinden.
Wenn Sie aber nun - sagen wir mal - sechs Texteingabefelder benötigen, die sauber untereinander angeordnet sein sollen und darüber hinaus die gleiche Höhe (und eventuell auch Breite) besitzen sollen, artet das ziemlich schnell in viel manuelles Arbeiten und Prüfen aus. Solche Aufgaben können Sie viel komfortabler (und sogar in einem Bruchteil der Zeit) erledigen, wenn Sie das array tool verwenden. Tja, aber wo findet man das? Antwort: Das array tool ist Bestandteil der "DrsAide" Werkzeugsammlung, die man über das DrsAide-icon der Hauptwerkzeugleiste aufrufen kann:

DrsAide Icon

Hiermit starten Sie das DrsAide-Werkzeugfenster, welches einige Symbole beinhaltet, die eine Art erweiterbare "Plugin"-Sammlung darstellen, mit deren Hilfe die Funktionalität der Entwicklungsumgebung von DrDialog erweitert werden kann. Und dort befindet sich auch das Symbol zum Starten des array tool:

DrsAide window

Durch einen Klick hierauf erscheint der Dialogbildschirm des array tools:

The array tool
("Rows" steht übrigens für Zeilen;  "Columns" bezeichnet Spalten)

Eigentlich ist es ziemlich selbsterklärend, aber hier noch ein paar zusätzliche Tips:
Das Anlegen mehrerer Elemente geschieht durch eine Art von "Kopiervorgang", was bedeutet, daß eine Gruppe von gleichen Elementen auf Basis eines bereits vorhandenen Elements geschieht, welches Sie also in der üblichen Art und Weise selbst anlegen müssen. Sobald das erste Feld in allen Eigenschaften (den STYLE-Einstellungen also) fertig ist, können Sie die restlichen benötigten Felder auf dessen Basis anlegen. Beispiel: Um sechs Eingabefelder untereinander zu erhalten, legen Sie zunächst das erste (oberste) Eingabefeld an, bearbeiten dessen Style-Einstellungen und verwenden dann das array tool, um eine Gruppe von sechs mal eins Felder zu erhalten (rows/Zeilen=6, columns/Spalten=1).
Beachten Sie hierbei, daß der Dialog des array tool solange geöffnet bleibt, bis er auf ausdrückliche Anforderung von Ihrer Seite geschlossen wird. Außerdem bezieht sich das Anlegen der Gruppe mittels des CREATE-Buttons immer auf das Ausgangselement, welches gerade innerhalb des Dialogs ausgewählt ist.
Der "Kopiervorgang" kann mittels DELETE wieder rückgängig gemacht werden.
Die beiden Eingabefelder im Bereich "Spacing" werden verwendet, um dem Kopiervorgang mitzuteilen, welche Abstände zwischen den einzelnen anzulegenden Feldern jeweils eingehalten werden sollen. Hierzu ist zu sagen, daß es sich bei den angegebenen Werten um Pixel handelt.
Sobald die (mittels CREATE) angelegte Feldgruppe Ihren Erwartungen entspricht, klicken Sie auf die Schaltfläche Done - hierdurch wird der Dialog nicht beendet; es findet vielmehr eine "Fixierung" der angelegten Felder und eine Neuinitialisierung des array tools statt, um für das Anlegen einer evtl. neuen Gruppe vorbereitet zu sein. Dies ist auch der Moment, ab welchem Ihnen die "Undo"-Funktion der Schaltfläche Delete für die gerade angelegte Gruppe nicht mehr zur Verfügung steht.

Wie bereis erwähnt, erstellt das array tool exakte Kopien des Ausgangfelds in Hinblick auf dessen Style-Einstellungen (und in unserem Beispiel sogar den anfänglichen Textinhalt). Wenn Sie dem Ausgangsfeld vor der Kopieraktion bereits einen Namen zugewiesen hatten, wird auch dieser zur Benamung der Kopien verwendet, zusätzlich eines Unterstrichs sowie einer fortlaufenden Ziffer, beginnend mit 2: Ein Eingabefeld namens "meinFeld", welches zur Erstellung von fünf weiteren Feldern verwendet wird (ergibt eine Gruppe von sechs Feldern) führt zu folgender Namensgebung:

meinFeld,
meinFeld_2,
meinFeld_3,
...
meinFeld_6

Ein Nachteil (vielleicht der einzige?) des array tools ist, daß es nicht möglich ist, für alle Felder der Gruppe automatisch ein einheitliches Namensschema zu erhalten; nicht einmal durch manuelles Umbenennen des ersten Feldes nach der Kopieraktion: "meinFeld_1" ist beim manuellen Benennen unzulässig und wird abgelehnt - probieren Sie's einmal selbst aus... für mich scheint das eine nicht behobene "Unschärfe" zu sein. Wenn Sie also wirklich eine einheitliche "Benamsung" benötigen, sollten Sie entweder mit einem noch nicht benannten Ausgangsfeld starten oder einen Namen ohne Unterstrich verwenden wie beispielsweise "meinFeld1". Daraus macht das array tool zwar dann Felder mit den Namen "meinFeld1_2" etc., diese können Sie im Nachhinein aber dann zumindest entsprechend manuell ändern in "meinFeld2" und so weiter.

Das group tool

Hierbei handelt es sich um eine Sammlung ziemlich raffinierter Funktionen zur Ausrichtung, Anordnung und Größeneinstellung von Elementen untereinander, selbst wenn es sich nicht um Elemente desselben Typs handelt. Der Dialog des group tool kann entweder über das Hauptauswahlfenster der Werkzeuge

Group tool icon in tools window

als eigenständiges, zusätzliches Werkzeugfenster gestartet werden (mit den bei DrDialog üblichen Werkzeugfenstereigenschaften) oder als Popupmenü aus dem Kontextmenü eines jeden Elements:

Group tool menu entry

Der Grund dafür, daß ich diese Funktionen als "raffiniert" bezeichne, liegt darin, daß eine sehr beeindruckende Menge an unterschiedlichen Aspekten bei der automatischen Größen- und Positionsbestimmung innerhalb eines Dialogfensters durch diese Funktionen beachtet wird. Ich möchte mich hier nicht in Details verlieren, denn die einzelnen Funktionen sind hervorragend in DrDialogs Online-Hilfe erläutert, mitsamt Beispielabbildungen für jede einzelne Funktion bzw. jedes einzelne Symbol. Aus dem Hauptindex der Hilfe wählen Sie hierfür den Unterpunkt "Tools window" dann "Group Window". Und schon liegen Ihnen alle Informationen bereit.

Nur ein kurzes Beispiel für die Nützlichkeit dieser tools:
Stellen Sie sich vor, daß Sie gerade fünf einzelne Texteingabefelder haben, die jetzt aber aus irgendeinem Grund neu angeordnet werden sollen, nämlich schön gerade untereinander und daß alle ungeachtet Ihres Vorgabeinhalts die gleiche Höhe und Breite aufweisen sollen. Sie könnten jetzt natürlich alle Felder so hin- und herschieben und ihre Größe einstellen, daß es paßt - nur, Sie haben schlichtweg keine Lust auf diesen Job. ;) Lassen Sie doch das group tool die "Drecksarbeit" für sich erledigen!
Zuerst müssen Sie sicherstellen, daß eines der Elemente die erforderlichen Merkmale hinsichtlich Größe, Position und Ausrichtung aufweist. Dann betätigen Sie die Umschalttaste und klicken die restlichen Felder an. Jetzt starten Sie das group tool und klicken

Und schon nach nur vier Klicks merken Sie: Mann - geht ja schon ziemlich flink, hm?

Der Notizbuchbereich

Wenn ich mit DrDialog arbeite, ertappe ich mich sehr oft dabe, immer wieder nach den selben Codeschnipseln zu suchen. Mein persönlicher Favorit hierbei ist die RxFuncAdd call-Anweisung (die Sie vielleicht schon kennen). Hiermit werden von REXX verwendbare Funktionen aus einer DLL geladen, um den Funktionsumfang von REXX für bestimmte Zwecke erweitern zu können. Wenn Sie kein absoluter REXX-Neuling sind, kennen Sie wahrscheinlich das hier:

CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
CALL SysLoadFuncs

Hiermit werden die SYS...-Funktionen geladen, die es REXX ermöglichen, so schöne Dinge wie beispielsweise Dateisuche mittels Platzhalter oder Zeilen in einer Datei zu suchen und vieles mehr... ja, ja... ich kenne diese Anweisung auch. Aber um ehrlich zu sein, erkenne ich Sie als den "LoadSysFuncs-Kram", wenn sie mir in irgendeiner Programmsource ins Auge springt. Müßte ich diese Anweisung aber selbst codieren, würde es damit enden, daß ich die REXX-Hilfe anwerfe und Sie dort herauskopiere, weil ich sie mir bis heute nicht merken kann. ;)

Nun ist genau so etwas mit den Notizbuchseiten des code-editors (der auch als "DrRexx" bezeichnet wird) kein Problem mehr: Schreiben Sie diese Information einfach in eine neue Seite des Notizbuchs und geben Sie Ihr einen Namen. Die im Notizbuch abgelegten Daten werden nicht als code-Anweisungen verwendet sondern sind lediglich "Notizen", als wären Sie Kommentare. Okay, so weit, so gut - aber was soll daran so besonders sein?
Ganz einfach: Alle so in DrRexx angelegten "Notizen" werden zusammen mit den Einstellungen der DrDialog-Entwicklungsumgebung gespeichert. Egal, welches Programm Sie gerade bearbeiten oder ob Sie ein ganz neues Projekt beginnen - die Notizseiten sind schon da und könnten (im Falle von Code-Anweisungen) mittels Kopieren/Einfügen in Ihren Programmcode übernommen werden. Natürlich steht es Ihnen frei, beliebiges Geschreibsel hier abzulegen - beispielsweise häufige benötigte oder komplexe SQL-Anweisungen oder auch ausgewählte Passagen eines Hilfetextes.

In der nächsten Ausgabe werden wir uns das container-Element etwas genauer anschauen, mit dem Sie Ihr Programm um eine Vielzahl an Funktionen erweitern und aufpeppen können. Danach werfen wir einen Blick auf die "functionFOR"-Syntax von DrDialog, mit deren Hilfe man Elemente zur Laufzeit quasi "dynamisch" ansprechen kann. Dann beginnen wir mit einigen grundlegenden REXX-Anweisungen und -Befehlen und schauen uns an, was man mit den SYS...-Aufrufen so alles anstellen kann, bevor wir mit unserer Beispielanwendung beginnen, deren Fertigstellung dann das Ende dieser Artikelserie bildet (ausgenommen, es kommt noch ein Nachschlag zu Datenbanken oder all den Sachen, die ich im Laufe der Zeit vergessen/übergangen habe).

Natürlich verlasse ich Sie heute nicht, ohne Ihnen alles erdenklich Gute für 2003 zu wünschen - möge das neue Jahr voller Liebe, Frieden und Gesundheit für Sie und Ihre Lieben sein. Bis bald!

Daten und Quellen:

GuiObjectREXX Yahoo!-Gruppe: http://groups.yahoo.com/group/GuiObjectREXX/
Newsgruppe zur GUI-Programmierung mit REXX: news://news.consultron.ca/jakesplace.warp.visualrexx
Download von Hobbes: http://hobbes.nmsu.edu/cgi-bin/h-search?key=drdialog&pushbutton=Search


[Artikelverzeichnis]
editor@os2voice.org
[Vorherige Seite] [Inhaltsverzeichnis] [Nächste Seite]
VOICE Homepage: http://de.os2voice.org