Eigene Dialoge herstellen

Top  Previous  Next

Sie können mit Hilfe eines Dialog Editors in Moskito Masken für eigene Dialoge erstellen und den einzelnen Elementen des Dialogs (Knöpfen, etc.) in einem Texteditor Moskito-Funktionen zuweisen.

 

Der Dialogeditor

Als erster Schritt wird die Maske, d.h. die eigentliche Oberfläche ohne Funktionalitäten, mithilfe eines Dialogeditors erstellt, z.B. mit dem Watcom Ressource Editor, der auf der Homepage von Watcom kostenlos heruntergeladen werden kann.

 

Er versteckt sich auf der Seite http://www.openwatcom.org/zips.html im Ordner ide_binnt.zip

 

Der Resource-Editor ist der wre.exe, der Dialogeditor ist der wde.exe.

 

Aus einem Menü mit Tools lassen sich damit die einzelnen Elemente wie Knöpfe, Listboxen, Texte usw. dem Dialog zufügen. Die fertige Maske wird gespeichert. Es entsteht eine mit einem beliebigen Editor lesbare Textdatei mit der Endung .dlg.

 

image5_39

 

Das Format der Dialogdatei

Dialoge sind in Moskito als Textdateien mit der Dateiendung  „*.dat“  im Verzeichnis Moskito\Ramen\Messages gespeichert. Aufgerufen werden sie über die Funktion MakeDialogBox (siehe auch Funktionsreferenz). Sie werden eindeutig definiert über die Dialognummer in Kombination mit einem Dialognamen. In der Regel ist der Dialogname einfach „Dialog“ (Beispiel: Fall A). Wenn bei der Erstellung eines neuen Dialogs aber sicher gegangen werden soll, daß eine Dialognummer nicht versehentlich doppelt vergeben wird, kann man diesen Dialognamen auch ändern (Beispiel: Fall B).

 

Alle Dialogdefinitionen werden vom System im Messages-Verzeichnis gesucht, dabei ist es egal, ob sich alle Definitionen in einer oder in mehreren Dateien mit unterschiedlichen Namen befinden, wichtig ist nur die Dateiendung „.dat“ und einige formale Strukturen:

 

Die Textsequenz, in der die Maske definiert wird, wird durch die Zeichenfolge

 

--- <Dialogname>Define <Dialog-ID>

eingeleitet. Es folgt die mit Hilfe des Dialogeditors erstellte Textsequenz, die aus der oben erwähnten Textdatei mit der Endung .dlg herüberkopiert wird. Soll der Dialog später mit dem Moskito-Befehl

 

MakeDialogBox 122

aufrufbar sein (Fall A), lautet die einleitende Zeichenfolge

 

--- DialogDefine 122

Soll der Dialog später mit dem Moskito-Befehl

 

MakeDialogBox 122 name/Attribute

aufrufbar sein (Fall B), lautet die einleitende Zeichenfolge

 

--- AttributeDefine 122

Achtung:

Im Fall B ist auf gleiche Groß- und Kleinschreibung zu achten!

 

Beispiel für die Textsequenz, in der die Maske definiert wird:

 

--- DialogDefine 122

DIALOG_1 DIALOG DISCARDABLE  15, 23, 234, 182

STYLE DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU

CAPTION "Selektieren nach Attribut(wert)"

FONT 8, "Helv"

BEGIN

                       CONTROL "Attributname:",   101, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 13, 11, 55, 8

                       CONTROL "Attributwert:",   102, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 97, 11, 59, 8

                       CONTROL "",                103, "LISTBOX", LBS_STANDARD | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 11, 30, 76, 131

                       CONTROL "",                104, "LISTBOX", LBS_STANDARD | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 97, 46, 79, 114

                       CONTROL "alle",            105, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 99, 31, 63, 10

                       CONTROL "Zufügen",         106, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 46, 40, 14

                       CONTROL "Entfernen",       107, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 67, 40, 14

                       CONTROL "Schnitt",         108, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 90, 40, 14

                       CONTROL "Neu",             109, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 114, 40, 14

                       CONTROL "Schließen",       110, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 160, 40, 14

                       CONTROL "nur selektierte", 111, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 11, 164, 166, 10

END

 

 

 

Wenn eine Textsequenz wie im obigen Beispiel in einer Datei mit der Endung .dat im Messages-Verzeichnis steht, kann der Dialog jetzt schon von Moskito aus aufgerufen werden. Damit Moskito auf neue oder veränderte Dialoge zugreifen kann, müssen diese natürlich abgespeichert werden. Zusätzlich muß in Moskito der Befehl

 

Echo /rehash

in die Kommandozeile eingegeben werden.

 

Dem erscheinenden Dialog fehlen momentan allerdings noch jegliche Funktionalitäten. Diese müssen für jedes gewünschte Dialogfeld in entsprechenden Textsequenzen in der Dialogdatei definiert werden. Diese Textsequenzen, in denen die Dialogfeld-Aktionen bestimmt werden, bestehen aus einer Zeichenfolge im Format

 

--- <Dialogname>Exec_<Dialog-ID> <Feld-ID>

und den in den folgenden Zeilen stehenden Moskito-Befehlen. Die Textsequenz endet mit einer Leerzeile. Neben den üblichen Moskito-Befehlen der Kommando- und Programmiersprache können hier auch die sogenannten „Lokalen Funktionen“ (siehe Administratorhandbuch|Programmreferenz) und die Sonderstrukturen der „Dialog- und Menüsprache“ (siehe Administratorhandbuch|Programmreferenz) zum Einsatz kommen.

 

Eine Ausnahme bildet hier die folgenden Textsequenzen.

 

Die mit der Zeichenfolge

 

--- <Dialogname>Exec_<Dialog-ID> 0

eingeleitete besagt, daß die folgenden Befehle sofort beim Öffnen des Dialogs abgearbeitet werden sollen, also beispielsweise, um Listboxen zu füllen oder andere Voreinstellungen zu machen. Hier gelten weder die „Lokalen Funktionen“ noch die Sonderstrukturen der „Dialog- und Menüsprache“.

 

Der zweite Teil des obigen Beispiels sähe also so aus:

 

 

--- DialogExec_122 0

io_fillListbox 122 103 s_uniq(s_sort(DBquery($name from attrib /noq)))

io_checkDialogEntry 122 105 1

 

--- DialogExec_122 103

io_emptyListbox 122 104

io_fillListbox 122 104 s_uniq(s_sort(DBquery($attr.%103c%.$value from object /noq)))

io_checkDialogEntry 122 105 1

 

--- DialogExec_122 104

io_checkDialogEntry 122 105 0

 

--- DialogExec_122 106

FindByAttributes /OR "%103c%/%?(checked(105))?(*):(%104c%)%"

 

 

--- DialogExec_122 107

FindByAttributes /NOT "%103c%/%?(checked(105))?(*):(%104c%)%"

 

 

--- DialogExec_122 108

FindByAttributes /AND "%103c%/%?(checked(105))?(*):(%104c%)%"

 

 

--- DialogExec_122 109

FindByAttributes "%103c%/%?(checked(105))?(*):(%104c%)%"

 

 

--- DialogExec_122 111

io_emptyListbox 122 103

io_fillListbox 122 103 s_uniq(s_sort(DBquery($name from attrib /noq)))

io_emptyListbox 122 104

io_checkDialogEntry 122 105 1

 

--- DialogExec_122 110

_WindowCloseMenue 122

 

 

--- <Dialogname>Exec_<Dialog-ID> -1

Diese Aktion wird durchgeführt, wenn der Hilfebutton aufgerufen wird. Ist dies nicht definiert wird die Standardaktion ausgeführt. Um keine Hilfe durchzuführen muss also eine Leere Sequenz -1 eingebaut sein.

 

--- <Dialogname>Exec_<Dialog-ID> -2

Die folgende Sequenz wird beim Schließen des Dialogs ausgeführt, auch wenn er über das image5_40 geschlossen wird.

 

Zu den typischen Befehlen, die in Dialogdateien verwendet werden, siehe auch die Funktionsreferenz und das Kapitel Menü- und Dialogsprache.

 

Besonderheiten einzelner Felder

Einzelne Arten der Felder in Dialogen bedürfen einer besonderen Behandlung.  Diese Referenz beschreibt diese Besonderheiten.

 

Edit-Feld

 

CONTROL "",             105, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 149, 47, 32, 12

 

Hinweis-Eintrag

Ein leeres Edit-Feld kann mit einem Hinweistext versehen werden. Dazu wird das Textfeld mit einem Inhalt gefüllt (besser: Es ist bereits in der Dialogdefinition mit diesem versehen). Danach wird dieser Hinweistext zum Hilfetext umbenannt und das Dialogfeld geleert.

 

io_setDialogField 163 106 "hallo test"

DialogStatus STYLE NEW 163 106 _CBS_CUEBANNER

io_setDialogField 163 106 ""

 

Dialogkopf

 

DIALOG_1 DIALOG DISCARDABLE 15, 23, 234, 182

STYLE WS_CAPTION | WS_VISIBLE | WS_SYSMENU | COMPATIBLE35

CAPTION "Selektieren nach Attribut(wert)"

 

Ab Version 4 wird der Trigger bei Änderungen in Edit-Feldern nicht mehr ausgelöst, wenn die Änderung durch ein Skript erfolgte. Es wird nur noch dann die Änderungsprozedur ausgeführt, wenn der Anwender eine Änderung durchgeführt hat. Dies ist impompatible zur Version 3.5 und früher. Wenn das alte Verhalten benötigt wird muss unter Style der Stil COMPATIBLE35 eingetragen werden.

 

Anzeigen eines Dialogs

Ein Dialog läßt sich im Kommandofenster mit dem Moskito-Befehl MakeDialogBox 122 aufrufen. Dabei ist 122 die Nummer des Dialogs.

 

Um einen Dialog über das Menü aufzurufen, muß das Menü entsprechend erweitert werden. Informationen hierüber finden Sie im Kapitel Menüs herstellen.

 

Hilfe zum Dialog

Jeder Dialog besitzt einen Button für die Kontexthilfe. Wird dieser betätigt und danach ein Element des Dialogs angeklickt, so wird die Hilfe zu diesem Feld aufgerufen. Wird in einem Dialog die F1-Taste betätigt so erscheint die allgemeine Hilfe für diesen Dialog. Damit dies erreicht wird sind folgende Voraussetzungen notwendig:

 

Der Dialog muß in einer Hilfedatei (Windows HLP-Format) beschrieben sein, ggf. müssen auch die einzelnen Elemente des Dialogs beschrieben sein.

 

Zu dieser Hilfedatei existieren 2 weitere Dateien mit den Endungen HLX und TAB, die beschreiben, welche Hilfe für den Dialog verwendet wird. Die HLX-Datei enthält die durch TAB-Zeichen getrennten Spalten:

 

ID des Dialogs

Die ID ist die Nummer in der Definition oder der Parameter ID/nnn beim Aufruf mit MakeDialogBox

ID des Elements

Die Nummer des Controls in der Definition. Wird hier eine 0 angegeben, so gilt der Eintrag für alle nicht explizit aufgeführten Controls

Menüname

Bei Dialogeinträgen ein beliebiger Text, sonst der Name des Menüs. Die Text muß in „“ stehen, er darf Leerzeichen enthalten.

Themenname

Text, mit dem in der TAB-Datei nach einer ID gesucht wird. Dies ist üblicherweise der Name des Abschnitts in der Hilfedatei, wobei Sonderzeichen durch Punkte ersetzt sind.

 

DialogID    ControlID   Menüname    Themenname

70    101   "D"   Datei.LadeausArchiv...

70    0     "D"   Datei.Neu...

0     1002  "Verwalten|Pläne|Schalten ..."      Verwalten.Pl.ne.Schalten...

70    102   D     Datei.Sichern

 

Diese Datei muß von Hand erzeugt werden.

Die TAB-Datei kann vom Hilfe-Compiler als MAP-Datei erzeugt werden. Sie enthält 3 Spalten, von denen die erste nicht verwendet wird. Da sich die Zuordnung der Index-Werte zu den Themen bei Änderungen in der Hilfe verschieben kann  wird die feste Zuordnung von Dialog-IDs zu Themen in der separaten HLX-Datei vorgenommen. Die TAB-Datei wird erzeugt, indem die Tabelle aus der MAP-Datei des Hilfecompilers in eine Textdatei umgewandelt (Cut and Paste) wird.

 

Thema mit Sonderzeichen

Dies ist der Originaltitel des Thema, wird jedoch nicht verwendet.

Thema ohne Sonderzeichen

Dies ist der Themenname aus der HLX-Datei.

Index des Thema in der Hilfedatei

Index des Thema in der Hilfedatei.

 

TopicTitle              TopicID           MapNumber

Help Contents           HelpContents1           1

Einführung              Einf.hrung              2

Grundlegende Konzepte   GrundlegendeKonzepte    3

 

Siehe auch

Menü- und Dialogsprache.