Menü- und Dialogsprache

Top  Previous  Next

Die Menü- und Dialogsprache dient dem Zweck, Prozeduren zu erstellen, die Benutzereingaben aus Dialogen, Popup- oder Pulldown-Menüs oder bei Mausklick auswerten und weiterverarbeiten.

 

Zentrale Bedeutung kommt hier dem Zugriff auf die Dialogelemente wie Eingabefelder, Listboxen, etc., sowie der Übergabe von Koordinaten (z.B. Position des Mauszeigers beim Klicken) zu.

 

 

Dialogfeldtypen

Der Inhalt eines Feldes hängt vom Typ des Feldes ab. Ein Button hat eine andere Interpretation als eine Eingabezeile. In Moskito werden die folgenden Interpretationen verwendet:

 

Button

Wenn der Button gedrückt ist liefert der Eintrag den Text 1, sonst den Text 0

 

Eingabezeile (Textfeld)

Als Text wird der Inhalt des Feldes übergeben.

 

Festtext

Geliefert wird der Name oder Titel des Textes.

 

Listbox

Es wird die selektierte Zeile der Box übergeben; bei Listboxen, die mehrere Zeilen selektieren können, wird eine kommaseparierte Liste geliefert.

 

Combobox

Es wird die selektierte Zeile der Box eingetragen, bei Listboxen, die mehrere Zeilen selektieren können wird eine kommaseparierte Liste eingetragen. Wenn ein von den Einträgen abweichender Text in die Eingabezeile der Box eingetragen ist, dann wird dieser Text geliefert.

 

TreeView

Geliefert wird der Name des Eintrags im Baum, der angeklickt ist. Es wird nur der eigentliche Name übergeben, nicht die Hierarchie.

 

 

Zugriff auf Dialogfelder

Die Zugriffsfunktionen auf Dialogfelder sind die Funktionen in der Funktionsreferenz, die mit io_ beginnen. Als Parameter erwarten sie die Nummer des Dialogs, die Nummer des Dialogfeldes und ggf. Angaben darüber, was in die Felder eingetragen werden soll.

 

 

Inhalt von Dialogfeldern an Moskito übergeben

Der Inhalt eines Dialogfeldes wird an einen Moskitobefehl übergeben, indem ein mit einem %-Zeichen eingeleiteter und abgeschlossener Platzhalter laut der untenstehenden Liste eingesetzt wird:

 

%C% oder %c%

Es wird der Text des aktiven Dialogfeldes ermittelt und dieser Text wird in die Ausgabe eingesetzt. Es werden keine Steuerzeichen, Zeilenvorschübe o.ä. zusätzlich eingefügt.

%123C% oder %123c%

Inhalt des Feldes Nummer 123. (s.o.)

%123:100c%

Inhalt des Feldes Nummer 123 in der Dialogbox 100.

%123f%

Steuerfunktion des Feldes Nummer 123.

%123:100f%

Steuerfunktion des Feldes Nummer 123 in der Dialogbox 100.

%x%

X-Koordinate der aktuellen Mausposition. Dies hat nur bei Mausdefinitionen und Tablettdefinitionen eine Bedeutung. Sonst ist dieser Wert immer 0.

%y%

Y-Koordinate. Dies hat nur bei Mausdefinitionen und Tablettdefinitionen eine Bedeutung. Sonst ist dieser Wert immer 0.

%px%

X-Koordinate der linken unteren Ecke des Dialogs.

%py%

Y-Koordinate der linken unteren Ecke des Dialogs.

%ppx%

X-Koordinate der linken unteren Ecke des aufrufenden Buttons.

%ppy%

Y-Koordinate der linken unteren Ecke des aufrufenden Buttons.

%fx%

X-Koordinate der linken unteren Ecke des aufrufenden Buttons bei Toolbars.

%fy%

Y-Koordinate der linken unteren Ecke des aufrufenden Buttons bei Toolbars.

%i%

Item-Id. Es wird die Nummer des aktuellen Dialogfeldes eingesetzt.

%I%

Dialog-Id. Es wird die Nummer des aktuellen Dialogs eingesetzt. Damit kann auch auf Felder in anderen Dialogen zugegriffen werden.

%n%

Tastencode.

%N%

Count-Wert, bisher verwendet bei Scrollrad-Events

%m%

Messagecode.

%X(...)%

Der statt ... eingefügte Moskito-Befehl wird ausgeführt. Das Ergebnis wird in der Zeile eingefügt.

%%

%-Zeichen. Wenn an einer Stelle zwei %-Zeichen hintereinander angegeben werden, so werden diese durch ein %-Zeichen in der Ausgabe ersetzt. Entsprechend müssen für zwei benötigte %-Zeichen vier in das Menü geschrieben werden. Bei Schachtelung von Funktionsaufrufen wird der Platzhalter als erstes ersetzt, so dass die Moskitofunktionen mit den Werten arbeiten können.

!

Kommentar. Der Inhalt dieser Zeile wird ignoriert. Damit der Text nicht im Kommandofenster erscheint, sollte davor ein "s." gesetzt werden.

 


Listbox


%123c%

wie %123c0%.

%123c0%

Inhalt des ausgewählten Eintrags. Bei mehreren ausgewählten Einträgen werden diese als kommaseparierte Liste ausgegeben.

%123c-1%

Es werden alle Zeilen ausgegeben. Bei mehreren ausgewählten Einträgen werden diese als kommaseparierte Liste ausgegeben.

%123c-2%

Es werden alle Zeilen ausgegeben. Bei mehreren ausgewählten Einträgen werden diese in mehreren Zeilen ausgegeben.

%123C%

wie %123c0%, aber es werden die Zahlen ausgegeben, die als Itemdata angegeben wurden.

 


Listviews


%123c0%

Inhalt der ersten Spalte in der ausgewählten Zeile. Entsprechend gibt %123c1% den Inhalt des zweiten Eintrags zurück, usw.

%123c-1%

Inhalt der ganzen Zeile, die markiert wurde. Dabei sind die Werte der verschiedenen Spalten durch | getrennt.

%123c-2%

Die Spaltenüberschriften werden durch | getrennt. zurückgegeben

%123C0%

Inhalt der ersten Spalte, dabei ist der Inhalt einzelner Zeilen durch Kommata getrennt. Entsprechend gibt %123C1% den Inhalt der zweiten Spalte zurück, usw.

%123C-1%

gesamter Inhalt (Inhalt aller Zeilen und Spalten), dabei ist der Inhalt einzelner Zeilen durch Kommata getrennt, der Inhalt einzelner Spalten in einer Zeile durch |.

%x%

Bei Listviews im Editmodus (message 8) die ausgewählte Zeile.

%y%

Bei Listviews im Editmodus die ausgewählte Spalte.



Treeviews


%123c%

Inhalt des ausgewählten Eintrags

%123cn%

Inhalt des Eintrags n Ebenen über dem ausgewählten Eintrag

%123c-1%

Ebene des ausgewählten Eintrags

%123C%

Die durch | getrennte Hierarchie des ausgewählten Eintrags (alle darüber liegenden Ebenen)

 

                                       

Bedingungen

Der Vorteil der Bedingungen ist, daß die Werte überprüft werden können, noch bevor sie weiterverarbeitet werden. Ist die Bedingung erfüllt, wird die Anweisung aaa ausgeführt, ist die Bedingung nicht erfüllt, wird die Anweisung bbb ausgeführt:

%?(Bedingung)?(aaa):(bbb)%        

Mögliche Bedingungen sind:

 

filled()

filled(999)

filled(999:888)

testet, ob das Dialogfeld leer ist

checked()

checked(999)

checked(999:888)

testet, ob die Checkbox oder der Radiobutton angewählt ist

visible()

testet, ob das Dialogfeld sichtbar ist

changed()

Das Feld wurde (vom Anwender) geändert.

or(()()())

Oder-Verkettung mehrerer Bedingungen

and(()()())

Und-Verkettung mehrerer Bedingungen

equal(999,888c3)

testet, ob der Inhalt eines Feldes gleich einem Wert ist

message(999)

testet den Messagecode. Der Messagecode gibt zurück, was im Dialogfeld passiert ist (Linksklick, Rechtsklick, Tree ausklappen, etc.).

Nicht alle Dialogelemente unterstützen Messagecodes.

 

Die Bedeutung der Messagecodes:

 

Treeview

Message Code

Bedeutung

1

Checkbox wurde eingeschaltet

2

Checkbox wurde ausgeschaltet

3

Klick auf das Icon eines Eintrags in dem Treeview

8

Das Ergebnis dieses Befehls wird als Kontextmenü umgesetzt. Ergebnis: |Neu\nObject "%%300c%%"\n

Gibt einen Eintrag mit dem Namen Neu und der Funktion Object…

9

Klick auf einen Namen in einem Eintrag in dem Treeview

11

Neues Item ausgewählt

14

Nach dem Editieren eines Feldes. %t gibt den neuen Text an.

-1

Danebengeklickt

13

Eine der Sondertasten wurde betätigt. Aktuell werden VK_DELETE (46) und VK_RETURN (13), F1 (112) bis F24 (135) unterstützt. Die Nummer läßt sich über %n% abfragen.

15

Auf- und Zuklappen des Treeview, Tastencode (%n%) gibt an, was geschehen soll. Zu=1, Auf=2.

16

Drag, Messagecode für die Abfrage der Quellmeldung. Die Meldung muss mit "2 " beginnen, damit die Drag-Operation startet.

17

Drop

 

Listview

Message Code

Bedeutung

0

Auswahl einer neuen Zeile

3

Klick

4

DoppelKclick

5

Rechtsklick

6

Rechts Doppelklick

8

Nach dem Editieren eines Feldes. %x% und %y% geben die Zeile und die Spalte des Elements zurück, das gerade editiert wurde. Die Zählung beginnt mit 0. Felder können nur editiert werden, wenn ein Listview mit LVS_EDITLABELS erstellt wurde.

10

Funktionsaufruf Text eines Tooltips, %x% ist das aktive Element

12

Beginn des Editierens eines Feldes. %n% gibt die Spalte zurück (beginnend bei 0), %x% und %y% die Fensterkoordinaten des ausgewählten Items. Ausgaben in das Kommandofenster werden unterdrückt.

13

9Eine der Sondertasten wurde betätigt. Aktuell werden VK_DELETE (46) und VK_RETURN (13), F1 (112) bis F24 (135) unterstützt. Die Nummer läßt sich über %n% abfragen.

16

Drag, Messagecode für die Abfrage der Quellmeldung. Die Meldung muss mit "2 " beginnen, damit die Drag-Operation startet.

17

Drop

 

Textfeld

Message Code

Bedeutung

0

default

7

Änderung durch Moskito

 

 

Beispiele:

Dialogfelder Auswerten und Füllen

Ein Benutzer soll in das Textfeld mit der Nummer 102 den Namen eines Plans und in das Feld 103 den Layer eintragen. Wenn er anschließend den OK-Button drückt, wird die Moskitofunktion DeletePlan mit diesen Parametern aufgerufen:

 

” DeletePlan "NAM/%102c%" TYP/%103c% ”

 

Um eine Listbox mit mehreren Spalten zu füllen, müssen zuerst die Spalten vorgegeben werden. Die verschiedenen Einträge  einer Spalte werden mit einem | voneinander getrennt.:

 

MakeDialogbox 165

io_setDialogField 165 108 "Rechts|Hoch"

anschließend kann die Liste z.B. mit einem DBquery gefüllt werden.

 

io_fillListbox 165 108 "123|456"

io_fillListbox 165 108 "2596258.74|5716022.20"

io_fillListBox 165 108 DBquery($x,$y from Object /noq)

 

Beim Klick mit der linken Maustaste sollen die Koordinaten des Punktes, an dem der Mauszeiger sich befindet übergeben werden:

”#P %x% %y%\n”

Wird nun die linke Maustaste betätigt, so wird dieser Text ermittelt und die in % eingeschlossenen Sequenzen werden ersetzt. %x% bedeutet die X-Koordinate der Stelle, an der die Taste gedrückt wurde. Wobei die Echtkoordinaten an der Mausposition verwendet werden und nicht die Pixelkoordinaten. %y% liefert entsprechend die Y-Koordinate. \n wird schon beim Einlesen der Kommandos durch einen Zeilenvorschub ersetzt. Sonst sind Zeilenvorschübe einfach durch getrennte Zeilen zu realisieren. Wird nun die linke Maustaste gedrückt, so erscheint als Kommando

 

#P 345 678

 

Der Dialog soll eine Eingabe  im Kommandofenster erzeugen:

 

%%%%input %102c%

 

Beispiele für eingefügte Moskito-Befehle

WindowWinHelp ..\\help\\%X(AnyGetinfo global flag T24)%\\tabref.hlp HELP_FINDER 0

„AnyGetinfo lobal flag T24“ liefert die aktuelle Sprache („DE“). Entsprechend wird die Hilfe aus dem Verzeichnis ..\help\DE\ ausgeführt.

 

 

Beispiel zur Handhabung von Listviews

Der Listview hat die Dialogfeldnummer 100. Die dritte Zeile ist selektiert.

 

image5_140

 

Zugriff auf einzelne Felder der markierten Zeile:

 

Echo c0: %100c0% c1: %100c1% c2: %100c2%

c0: 3 c1: 21 c2: 22

Zugriff auf die erste Spalte:

Echo C0: %100C0%

C0: 1,2,3,4

Zugriff auf die zweite Spalte:

Echo C1: %100C1%

C1: 01,11,21,31

Zugriff auf die selektierte Zeile:

Echo c-1: %100c-1%

c-1: 3|21|22|23|24

Zugriff auf den gesamten Inhalt des Listview:

Echo C-1: %100C-1%

C-1: 1|01|02|03|04,2|11|12|13|14,3|21|22|23|24,4|31|32|33|34

 

 

Beispiel zur Handhabung von Listboxen

Die Listbox hat die Dialogfeldnummer 100. Die dritte Zeile ist selektiert.

Gefüllt wurde sie mit

io_fillListbox 502 100 01 11 21 31

MenueUndDialogsprache-Listbox

 

Zugriff auf den Inhalt:

%100C-1% liefert eine Kommaliste, Fall %100C-2% mehrere Zeilen.

Echo C-1: %100C-1%

C-1: 01,11,21,31

 

Echo C-2: %100C-2%

C-1: 01

11

21

31

 

Zugriff auf die selektierte Zeile:

Echo c: %100c%

c-1: 21

 

 

Beispiel zur Handhabung von Listboxen die mit /ITEMDATA gefüllt wurden

Die Listbox hat die Dialogfeldnummer 100. Die dritte Zeile ist selektiert.

Gefüllt wurde sie mit

 

io_fillListbox 502 100 /ITEMDATA 3:01 4:11 5:21 6:31

Zugriff über Itemdata:

Echo C: %100C%

C: 5

Der Restliche Teil ist identisch.

 

 

Beispiel zur Verwendung von Messagecodes in Listviews

--- DialogDefine 1600

DIALOG_1 DIALOG DISCARDABLE 20, 40 , 275, 190

STYLE DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU

CAPTION "Dialog"

Font 8, "Helv"

BEGINN

CONTROL ""; 100, "SysListView32", LVS_Report | _LV_FULLROWSELECT | LVS_EDITLABELS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 16, 18, 240, 150

END

 

---DialogExec_1600 0

io_setDialogField 1600 100 1|2|3

io_fillListbox 1600 100 a|b|c|d|e|f g|h|i

 

---DialogExec_1600 100

Echo /NOW "MessageCode <%m%>"

%?(message(0))?(Echo /NOW MessageCode 0):()%

%?(message(1))?(Echo /NOW MessageCode 1):()%

%?(message(2))?(Echo /NOW MessageCode 2):()%

%?(message(3))?(Echo /NOW MessageCode 3 Klick):()%

%?(message(4))?(Echo /NOW MessageCode 4 Doppelclick):()%

%?(message(5))?(Echo /NOW MessageCode 5 Klick rechts):()%

%?(message(6))?(Echo /NOW MessageCode 6 Doppelclick rechts):()%

%?(message(7))?(Echo /NOW MessageCode 7):()%

%?(message(8))?(Echo /NOW MessageCode 8):()%

%?(message(9))?(Echo /NOW MessageCode 9):()%

 

 

 

Siehe auch

Eigene Dialoge herstellen