18 Version A.04.04.a
18.1 Windows NT
- Gnats 9375: Wenn bei einem Modell eines control Objektes, welches das Attribut .mode auf mode_server gesetzt hatte, ein benutzerdefiniertes Attribut gesetzt wurde, dann kam es zum Absturz.
- Gnats 8735: Bei einem treeview Objekt konnte zum Teil keine Drag und Drop Aktion gestartet werden. Der Fehler trat immer dann auf, wenn .activeitem einen unzulässigen Wert besaß. Zum Beispiel ist direkt nach dem Anlegen .activeitem = 0, was nur sein kann, wenn das treeview Objekt leer ist.
- Gnats 9359: Es konnte sein, dass ein angebundenes OLE-Control abstürzt. Verursacht wurde dies durch die Behebung von Gnats 9349, wodurch das OLE-Control aktiviert wurde, wenn das control Objekt den Focus erhielt. Dies konnte dazu führen, dass das OLE-Control den Focus seinerseits weiter setzte, was allerdings nicht erlaubt ist. Hierdurch konnte es sein, dass das OLE-Control so durcheinander kam, dass es irgendwann abstürzte. Dies wird jetzt dadurch umgangen, dass das OLE-Control verzögert aktiviert wird.
- Gnats 9357: Es konnte sein, dass es zu einem Assfail in Modul table2 Zeile 691 kam, wenn man direkt mit der rechten Maustaste auf ein tablefield Objekt klickte. Fehler war hier nicht reproduzierbar, Codereview hat eine Problemstelle offenbart, die geändert wurde. Ähnliche Problemstellen gab es, wenn man über Tastatur auf ein tablefield Objekt navigierte und wenn ein tablefield Objekt das Ziel einer Drag und Drop Aktion war.
- Neu: Die Tile Ressource kann jetzt auch ICO-Dateien laden. Es ist nicht mehr nötig ein Icon über eine Ressourcendatei anzubinden. Sollte die ICO-Datei Icons in verschiedenen Größen enthalten, so wird die erste Größe verwendet. Ist das Attribut ".scale" an der Tile Ressource gesetzt, so wird aus Geschwindigkeitsgründen, die Datei nicht erneut eingelesen, sondern das geladene erste Icon vergrößert oder verkleinert. Eine Ausnahme hierzu bilden die Objekte Treeview und Notepage, die ihre Bilder nur zum Anlegezeitpunkt holen. Diese Objekte erzwingen ein Neuladen der ICO-Datei.
- Gnats 8841: Das Objekt statictext unterstützt jetzt mehrzeiligen Text unter MS-Windows. Es ist zu beachten, dass eine automatische Berechnung der Größe für mehrzeiligen Text nicht zur Verfügung steht.
- Neu: Unterstützung für das Attribut .mapped. Wenn dieses Attribut auf false steht, wird das Windowsobjekt zwar angelegt, jedoch nicht sichtbar gemacht.
- Neu: Hintergrundbilder für die Gruppierungsobjekte layoutbox, notebook, notepage, groupbox, splitbox, spinbox, toolbar und window möglich. Das Objekt statusbar wird nicht unterstützt.
-
Gnats 8713: Das open Ereignis am menubox Objekt liefert jetzt das Objekt und die Koordinaten des Mausklicks, der zum Öffnen der Menubox geführt hat. Gegebenenfalls wird auch noch der Index des Eintrags auf dem geklickt wurde mitgeliefert. Wird das open Ereignis über Tastatur erzeugt, dann wird das Objekt und gegebenenfalls der Index geliefert.
Das Objekt thisevent unterstützt jetzt beim open Ereignis am Objekt menubox folgende Attribute zusätzlich:
Attribut
Typ
Beschreibung
.value
object
Das Objekt auf das geklickt wurde bzw. das den Focus besaß als das open Ereignis ausgelöst wurde.
.x
integer
Die x-Koordinaten des Mausklicks bezüglich des Objekts thisevent.value. Wurde das open Ereignis über Tastatur ausgelöst, dann ist das Attribut nicht gesetzt (Typ void).
.y
integer
Die y-Koordinaten des Mausklicks bezüglich des Objekts thisevent.value. Wurde das open Ereignis über Tastatur ausgelöst, dann ist das Attribut nicht gesetzt (Typ void).
.index
integer
oder
indexDer Index des Eintrags auf den geklickt wurde oder der den Focus besaß als das open Ereignis ausgelöst wurde. Wert ist nur gesetzt wenn das Objekt thisevent.value einen Integer (ist bei listbox, treeview der Fall) oder Index (nur beim tablefield) unterstützt. Sonst ist das Attribut nicht gesetzt (Typ void).
-
Neu: Das Image-Objekt kann jetzt auf Mouseover-Ereignisse (Mauszeiger befindet sich über dem Objekt oder nicht) reagieren. Zu diesem Zweck hat das Objekte das Attribut .mouseover dazu bekommen und das Attribut .picture wurde erweitert. Es können jetzt noch Bilder für die folgenden Fälle gesetzt werden:
Attribut
Typ
Beschreibung
.picture[tile_default]
tile
Default Bild
Wird immer angezeigt, wenn das Objekt im normalen (nicht aktivierten) Zustand ist.
.picture[tile_active]
tile
Aktives Bild
Wird angezeigt, wenn:
- das Image-Objekt den Checkbox-Stil besitzt und aktiv ist.
- das Image-Objekt den Checkbox-Stil besitzt, nicht aktiv ist und die Maustaste über dem Image-Objekt gedrückt ist.
-
das Image-Objekt den Pushbutton-Stil besitzt und die Maustaste über dem Image-Objekt gedrückt ist.
Ausnahme: Wenn tile_active nicht gesetzt ist, wird tile_default angezeigt.
- wird nicht angezeigt, wenn .mouseover gesetzt ist und die Maus sich über dem Image-Objekt befindet.
.picture[tile_insensitive]
tile
Insensitives Bild
Wird angezeigt, wenn das Image-Objekt insensitiv ist (.real_sensitive = false).
Ausnahme: Wenn tile_insensitive nicht gesetzt ist, wird tile_default bzw. tile_active (Checkbox-Stil und aktiv) angezeigt.
.picture[tile_mouse_over]
tile
Maus-Over Bild
Wird angezeigt, wenn .mouseover gesetzt ist, die Maus sich über dem Image-Objekt befindet, die Maustaste nicht gedrückt ist und, falls das Image-Objekt den Checkbox-Stil besitzt, es nicht aktiv ist. In diesem Zustand werden auch die Border hervorgehoben dargestellt.
.picture[tile_active_mouse_over]
tile
Aktives Mouse-Over Bild
Wird angezeigt, wenn .mouseover gesetzt ist, die Maus sich über dem Image-Objekt befindet und:
- die Maustaste über dem Image-Objekt gedrückt ist.
- das Image-Objekt den Checkbox-Stil besitzt und aktiv ist.
.mouseover
boolean
Defaultmäßig ist das Attribut auf false gesetzt, so dass das Image-Objekt sich wie gewohnt verhält. Wird der Wert auf true gesetzt, so werden die Tile-Resourcen in .picture[tile_mouse_over] und .picture[tile_active_mouse_over] berücksichtigt. Das Verhalten entspricht dem der Image-Objekte im MS-Internet Explorer.
Anmerkungen
-
Es gibt außer in den erwähnten Ausnahmen keine Strategie, um ein anderes Tile anzuzeigen, wenn eine Tile nicht gesetzt ist. Es müssen deshalb immer alle benötigten Tiles definiert werden.
Es werden benötigt:
tile_default
immer tile_active
bei Checkbox-Stil tile_mouse_over
wenn .mouseover gesetzt ist tile_active_mouse_over
wenn .mouseover gesetzt ist -
Die Maustaste gilt nur dann als gedrückt, wenn die linke Maustaste gedrückt wurde, während sich die Maus über dem Image-Objekt befunden hat.
-
Neu: In Windows-WSI wird jetzt das Objekt Progressbar unterstützt. Objektspezifische Attribute sind:
Attribut
Typ
Beschreibung
.textfgc
color
Farbe des Beschriftungstextes.
.minvalue
integer
Minimalwert des Progress-Bereiches.
.maxvalue
integer
Maximalwert des Progress-Bereiches.
.curvalue
integer
Die aktuelle Position des Fortschritts.
.direction
integer (1|2)
Ausrichtung der Progressbar, vertikal (=1) oder Horizontal (=2).
.style[style_continuous]
boolean
Gibt an, ob die Bar in Blöcken oder kontinuierlich dargestellt wird
.style[style_labeled]
boolean
Gibt an, ob die Bar beschriftet werden soll. Gilt nur, wenn .direction = 2 ist (horizontal).
- Gnats 9187: Ein aktives OLE Control, das von einem control Objekt mit dem Attribut .mode = mode_client aktiviert wurde und den Focus besaß, konnte nicht über Tastaturnavigation verlassen werden.
- Gnats 9349: Der Focus wurde nicht korrekt auf ein OLE Control gesetzt, das über ein control Objekt mit dem Attribut .mode = mode_client angebunden ist. Dies führte dazu, dass keine Tastaturnavigation innerhalb des OLE Controls möglich war.
- Gnats 9025: Acceleratoren an Einträgen eines Kontextmenüs, taten nicht mehr, nachdem das Kontextmenü einmal geöffnet war.
- Gnats 9347: Es wurde die Statusbarhilfe auch für transparente Bereiche eines Objektes angezeigt. Dies führte dazu, dass dis Statusbarhilfe ständig zwischen der Hilfe des Objektes und der Hilfe des Vaters wechselte. Dies trat zum Beispiel bei einem Notebook im Bereich neben den Reitern auf.
- Behoben: Wenn die Maus bei einer Drag & Drop Operation über das letzte Feld eines listbox Objektes positioniert wurde, gab es keine Rückmeldung, wenn das Attribut .style nicht den Wert style_single besaß.
-
Gnats 9344: Bei einer Pasteoperation in ein edittext Objekt wurde die Selektion (startsel und endsel) immer auf die Mausposition gesetzt. Dies geschah auch, wenn die Aktion über Tastatur ausgeführt wurde.
Die Attribute .startsel und .endsel des Objektes edittext werden bei dem Ereignis paste nicht mehr auf die Mausposition gesetzt. Die Mauspostion ist im Attribut .index des paste Ereignisses gespeichert.
Das Attribute .index des paste Ereignisses enthält für das Objekt edittext den Zielbereich, dieser ist:
-
Tastaturbedienung
- first(thisevent.index): enspricht this.startsel
- second(thisevent.index): enspricht this.endsel
-
Mausbedienung
-
first(thisevent.index) und second(thisevent.index) entsprechen der Mausposition im Text, wobei 1 die Position hinter dem ersten Buchstaben markiert.
Achtung
second(thisevent.index) entspricht nicht mehr der Zeile über der die Maus steht. Die first/second-Werte sind bei Mausbedienung gleich, da während der Drag-Drop-Operation kein Bereich markiert werden kann.
-
-
- Behoben: Bei der Verwaltung der interface Objekte konnte es vorkommen, dass über eine Speicherblockgrenze hinaus gelesen und auch geschrieben wurde. Der Fehler trat nur dann auf, wenn sehr viele (>256) interface Objekte temporär angelegt wurden. Beim Freigeben dieser temporären interface Objekte wurde der Speicherblock, der Verweise auf alle interface Objekte enthält, zu stark verkleinert.
- Behoben: Wenn dynamisch ein Kindfenster als Kind eines leeren Fensters erzeugt wurde, dann konnte es beim Löschen dieses Kindfensters zu einem Assfail in rule\event Zeile 1345 kommen. Die Ursache hierfür war, dass das Vaterfenster noch kein MDI- Vater war, weswegen dieses beim Anlegen des Kindfensters zerstört und neu angelegt werden musste. Hierbei wurde beim schon teilweise angelegten Kindfenster nicht richtig aufgeräumt.
- Gnats 9307: Wenn ein Fensters, das ein Größenraster besitzt, maximiert wurde, nahm es nicht die gesamte Darstellungsfläche ein. Wurde es direkt vom ikonifizierten Zustand maximiert, nahm es dagegen die gesamte Darstellungsfläche ein. Das Problem lag daran, dass bei der Berechnung der maximalen Fenstergröße nicht berücksichtigt wurde, dass Windows standardmäßig ein Fenster soweit vergrößert, dass der Fensterrahmen außerhalb der Darstellungsfläche liegt.
- Gnats 9324: Wenn das Attribut .picture des aktiven (.active = true) notepage Objektes auf den Wert 0 gesetzt wurde, dann wurde das erste Kindobjekt des übergeordneten notebook Objektes aktiviert.
- Gnats 9313: Beim Maximieren eines unten und oben angebundenen Fensters, wurden unten angebundene Kindobjekte zunächst falsch positioniert (flackern). Fehler ist nicht mehr nachvollziehbar. Er dürfte deshalb mit der Behebung von Gnats 9314 behoben worden sein.
- Gnats 9338: Wenn bei einem Objekt vom Typ interface eine OLE-Methode aufgerufen wurde, die als Rückgabewert ein Objekt vom Typ interface lieferte, konnte es zu einem ASSFAIL in object/slot Zeile 2282 kommen. Dieser ASSFAIL trat dann auf, wenn das interface Objekt, dessen Methode gerufen wurde, von der Garbagecollection gelöscht wurde. Dies lag daran, dass das interface Objekt selbst und auch seine Kinder nicht mehr referenziert wurden. Das neue Kindobjekt war noch nicht als Kind eingetragen.
- Gnats 9314: Bei einem Fenster mit einer mehrzeiligen Menübar konnten Kindobjekte falsch positioniert werden, wenn die Fenstergröße aus einer Regel geändert wurde. Der Fehler betraf Fenster mit ".yauto := 0;" und Kindobjekte mit ".yauto := 0;" oder ".yauto := -1;". Der Fehler konnte auch auftreten, wenn durch andere Aktionen die Größe des Fensters neu berechnet wurde. Im vorliegenden GNATS-Eintrag geschah dieses durch das Ändern der Breite einer angedockten Toolbar.
- Gnats 9335: Es werden jetzt Fehlermeldungen ins Logfile ausgegeben, wenn COM oder MSXML nicht initialisiert werden können. Außerdem wird jeder COM Fehler von MSXML ins Tracefile geschrieben.
-
Gnats 9334: Wenn das Hinzufügen eines XML-Knotens fehlschlug, konnte es einen Absturz geben. Dies trat zum Beispiel dann auf, wenn ein XML-Attribut mittels der Methode :add hinzufügt werden sollte:
doccursor:add(nodetype_attribute, "A", "A B", false);
- Behoben: Zwischen Menütext und Accelerator war kein Leerraum.
- Behoben: Bei Datei öffnen über das Filerequestor-Objekt wurde kein Dateiname mehr geliefert.
- Gnats 9311: In Pushbuttons, bei denen eine Größe auf 0 definiert war, wurde der Mnemonicbuchstabe nicht mehr markiert.
- Gnats 9305: Es konnte vorkommen, dass eine Messagebox nicht angelegt wurde. Dies lag daran, dass ein Fenster als Vater für die Messagebox ausgewählt wurde, das gerade zerstört wurde. Jetzt wird das vorgeschlagene Vaterfenster überprüft, und gegebenenfalls wird die Messagebox ohne Vater geöffnet. Dies hat allerdings zur Auswirkung, dass die Messagebox nur direkt aktiviert werden kann, also nicht dadurch, dass man auf das Anwendungsfenster klickt.
- Behoben: Wenn ein Popupmenu mit der Methode :openpopup geöffnet wurde, dann wurden interne WSI-Id's nicht freigegeben, wenn das dazugehörende Fenster direkt, ohne das Popupmenu zu schließen, geschlossen wurde.
- Gnats 9306: Wurde ein Popupmenu, das an einer Groupbox oder Notepage definiert ist, mit der Methode :openpopup geöffnet, dann wurden keine select Ereignisse erzeugt. Genauso wurde der Statustext nicht geändert.
- Gnats 9309: Der selektierte Eintrag eines Poptextes wurde geändert, wenn ein Statusbareintrag geändert wurde. Hierzu musste man den Poptext mit der Maus öffnen und die Maus über einem Eintrag stehen lassen. Wenn man nun mit einer Cursortaste den selektierten Eintrag änderte, ist der selektierte Eintrag wieder zurückgesprungen, wenn in der select Regel ein Statusbareintrag geaendert wurde. Dies geschieht jetzt nicht mehr. Achtung, ein solcher "Fehler" kann jeder Zeit wieder auftreten. Die Ursache für das Zurücksetzen war ein Mousemove-Event, der durch die Statusbar-Änderung verursacht wurde. Prinzipiell kann dies immer passieren, wenn sichtbare Objekte in der select-Regel des Poptextes manipuliert werden. Ein zusätzlicher Mousemove ist zum Beispiel nötig, wenn der Mauszeiger gewechselt werden soll.
- Neu: Suche nach idmuni.dll verbessert, so dass sie häufiger gefunden wird. Es kann auch eine idmuni.dll einer anderen Version verwendet werden, solange diese alle benötigten Funktionen bereitstellt.
18.1.1 OLE-Ereignisse mit Rückgabeparametern
Bisher hat die OLE-Erweiterung des IDM’s nur Ereignisse (auch Messages genannt) ohne Rückgabeparameter erlaubt. Diese Restriktion ist mit Versions A.04.04.a aufgehoben.
18.1.1.1 OLE-Ereignisse ohne Rückgabeparameter
Die bisherige Definition und Benutzung von OLE-Ereignissen geschah über das message-Objekt auf der Serverseite. Das Ereignis kam als „externes“ Event an der Client-Seite an. Das sah dann bisher wie folgt aus:
Client
dialog OLEClient
window Wi {
control Co {
.xauto 0;
.yauto 0;
.mode mode_client;
.uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
.connect true;
.active true;
on extevent „Msg“ (integer I, string S, boolean B) {
Wi.title :=“Received Msg: „+I+“, „+S+“, „+B;
}
}
on close {
exit();
}
}
Server
dialog OLEServer
message Msg(integer I, string S, boolean B);
model control MCo {
.mode mode_server;
.uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
.message[1] Msg;
pushbutton PbSendEvent {
.text „Send Event“;
on select {
sendevent(this.control, Msg, 123, „hello“, true);
}
}
}
18.1.1.2 Rückgabeparameter auf der Serverseite
Diese Vorgehensweise funktioniert immer noch. Um Ereignisse mit Rückgabeparametern zu unterstützen existieren zwei neue Schlüsselwörter in der Regelsprache: extern und public.
Mit extern deklariert man Regeln am Server-Objekt die als Ereignisse behandelt werden sollen und an den Client zu schicken sind. Ein Regelkörper ist für eine solch deklarierte Regel nicht erlaubt. Erlaubt sind hierbei die Datentypen integer, string, boolean und object. Als Parametertypen zulässig sind input, output und input output. Die Rückgabe eines so deklarierten Ereignisses kann also direkt als Rückgabewert erfolgen oder durch Benutzung eines output-Typs. Bei einem Parameter vom Datentyp „object“ können nur das null-Objekt oder IDM-Objekte der Klasse control und subcontrol übergeben werden, da nur diese ein für OLE relevantes IDispatch-Interface besitzen. Objekte anderer IDM-Objektklassen werden als null-Objekt an den Client weitergegeben.
Die Versendung eines solchen Ereignisses kann nun nicht mehr über das sendevent-Builtin erfolgen, da Builtin-Aufrufe keine Rückgabeparameter unterstützen, sondern geht ganz einfach durch direkten Aufruf der als „extern“ deklarierten Regel. Es kann nicht festgestellt werden ob der Client das Ereignis behandelt hat oder nicht, außer an den Rückgabewerten.
Beispiel Server
dialog OLEServer
model control MCo {
.mode mode_server;
.uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
extern rule boolean Msg(integer I, string O output);
pushbutton PbSendEvent {
.text „Send Event“;
on select {
variable string Str;
if this.control:Msg(123, Str) then
this.text := Str;
endif
}
}
}
18.1.1.3 Rückgabeparameter auf der Client-Seite
Auf der Client-Seite einer IDM-OLE-Anwendung dient wiederum das public-Schlüsselwort dazu um Regeln zu kennzeichnen, die als Ereignis-Methoden von „Außen“ (sprich von der OLE-Server-Seite) aufgerufen werden dürfen. Somit ist man vor ungewollten Aufrufen von „privaten“ Methoden geschützt. Bei public-Regeln sind die gleichen Datentypen und Parameter-Typen wie auf der Server-Seite erlaubt. Diese Ereignisse werden im Gegensatz zu den bisherigen „Messages“ synchron aufgerufen. Ist ein Ereignis nicht als „public“-Regel vorhanden, so wird es als externer Event wie bisher auch asynchron weiterverarbeitet, allerdings ohne Unterstützung für Rückgabewerte. Public-Methoden werden auf der Client-Seite wie ganz normale Regeln behandelt und haben nur unter einem control-Objekt im mode_client die zusätzliche Bedeutung als Ereignisse.
Beispiel Client
dialog OLEClient
window Wi {
control Co {
.xauto 0;
.yauto 0;
.mode mode_client;
.uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
.connect true;
.active true;
public rule boolean Msg (integer I, string O output) {
Wi.title :=“Received Msg: „+I;
O := „hello“;
return true;
}
}
on close {
exit();
}
}
18.1.1.4 Konvertierung zwischen OLE- und IDM-Datentypen
Ein kurzer Hinweis zu Datentypenkonvertierung bei der Übergabe von Daten an die IDM-OLE-Client-Seite. Die Daten kommen als VARIANT (MS Windows Datentyp) beim IDM an und werden entsprechend der nachfolgenden Tabelle in einen IDM-Datentyp umgewandelt:
Variant-Datentyp |
IDM-Datentyp |
---|---|
VT_BOOL |
Boolean |
VT_BSTR |
String |
Integer |
|
object (dynamisch angelegtes subcontrol) |
Parameter die Rückgabewerte von der Client-Seite erwarten, werden zusätzlich durch VT_BYREF in der VARIANT-Struktur gekennzeichnet.
18.1.1.5 Tracing der IDM-OLE-Aktivität
Bei eingeschaltetem Tracing auf der Client- wie auch auf der Server-Seite geben die Tracing-Zeilen mit [OC]- und [OR]-Tags Hinweise zu Aktionen die in der OLE-Schnittstelle des IDM’s ablaufen. Folgende Kurzübersicht soll die Bedeutung des dem Tag nachfolgenden Bezeichner erklären und damit das Debugging verbessern. Das Tracing erfolgt erstmals unabhängig davon ob das Attribut/Methode oder Ereignis tatsächlich existiert um so die Verfolgung der Aktivitäten an der OLE-Schnittstelle zu erleichtern.
OC/OR-Tracing-Ausgabe |
Bedeutung |
|
---|---|---|
Client |
Server |
|
|
DM_OLE_CallMethod |
Client ruft auf dem Server eine Methode auf |
|
DM_OLE_GetAttr |
Client erfragt den Wert eines Attributs vom Server |
|
DM_OLE_SetAttr |
Client setzt den Wert eines Attributs auf dem Server |
DM_OLE_AttributeChanged |
|
Client bekommt die Mitteilung, dass sich auf der Serverseite ein Attribut geändert hat |
|
DM_OLE_CallEvent |
Auf der Serverseite wird ein Ereignis abgeschickt |
DM_OLE_HandleEventInvoke |
|
Client soll ein Ereignis behandeln |
18.2 Motif
- Neu: Das von Windows-NT bekannte Objekt Toolbar wird nun auch unter Motif, unabhängig von der Motif-Version, unterstützt.
- Gnats 9312: Zugriff auf topitem sollte nun korrekt sein. Erneutes Zeichnen des Treeviews sollte wenn möglich original (pixelgenaues) "Topitem" zeigen.
- Gnats 9368: Umlaute bei Benutzung von Formaten im Edittext zeigen sich nun wieder korrekt auf dem Bildschirm.
- Gnats 9373: Absturz durch eine Arithmetic exception in Motif-Layoutroutine beim Sichtbarmachen eines Notebooks durch Umstellung der Aktivierungsberechnung behoben.
- Gnats 9374: Performanz beim Unsichtbar schalten bzw. Neuzeichnen eines Treeviews verbessert.
18.3 Java-Window-Interface
-
Java-Version
Die ISA Dialog Manager Internet Schnittstelle benötigt jetzt Java 2, also eine Java Laufzeit Umgebung (JRE) oder eine Java Entwicklungsumgebung (JDK) der Versionen 1.2.x oder 1.3.x. Dies bedeutet, dass für ein Applet nun das Java Plugin benötigt wird. Daher müssen HTML-Seiten angepasst werden (siehe examples\idmapplet.html)
-
Neu: Der ISA Dialog Manager für das Internet unterstützt nun auch das Attribut .dialogbox am Fensterobjekt. Es ist zu beachten, dass eine Dialogbox immer ein Hauptfenster benötigt, damit man sie unter Microsoft Windows aus der Taskleiste aktivieren kann (Auswählen des Hauptfensters). Dieses Hauptfenster wird vom ISA Dialog Manager automatisch berechnet, und zwar wird das Anwendungsfenster, welches zuletzt aktiv war, zum Hauptfenster. Dieses Fenster sollte nicht geschlossen werden solange die Dialogbox geöffnet ist. Es sind deshalb Regeln folgender Art zu vermeiden:
on select
{
MyDialogbox.visible := true;
this.window.visible := false;
}
Diese Regel schließt das Hauptfenster der Dialogbox und es kommt zu Flackern. Ein Ändern der Reihenfolge vermeidet das Flackern, enthält aber noch das Problem, dass der Dialog Manager eventuell nicht in der Lage ist ein Hauptfenster zu bestimmen. Besser ist es deshalb das Fenster offen zu lassen bis die Dialogbox geschlossen wird.
Konnte der ISA Dialog Manager kein Hauptfenster bestimmen, oder ist das Hauptfenster geschlossen worden, so kann es sein, dass die Dialogbox von anderen Fenstern verdeckt wird. In diesem Fall sind alle Anwendungsfenster gesperrt, es ist jedoch kein weiteres Fenster in der Taskleiste zu sehen.
Erst durch das Iconifizieren aller anderen Fenster, wird die Dialogbox zu Tage gefördert.
-
Gnats 9358: Es konnte zu folgenden Fehlermeldungen kommen, wenn ein Objekt unsichtbar gesetzt wurde:
Error: YNodebox.inqVal: <Label> has no widget
wobei <Label> ein Dialog Manager Name ist.
18.4 Kern
-
Neu: Hintergrundbilder für Gruppierungsobjekte hinzugefügt. Folgende Attribute stehen dazu zur Verfügung:
Attribut .tile
Identifikator:
.tile
Argumenttyp:
object
C-Definition:
C-Datentyp:
DT_tile
COBOL-Definition:
COBOL-Datentyp:
DT-tile
Zugriff:
get, set
Index:keiner
Vererbung:ja
Default:null
Objekte:groupbox, layoutbox, notebook, notepage, spinbox, splitbox, statusbar, toolbar, window
Das Attribut .tile gibt eine Tileressource an, die als Hintergrund gezeichnet wird. Die Art und Weise wie das Bild gezeichnet wird, wird durch das Attribut .tilestyle bestimmt.
Attribut .tilestyle
Identifikator:
.tilestyle
Argumenttyp:
enum
C-Definition:
C-Datentyp:
DT_enum
COBOL-Definition:
COBOL-Datentyp:
DT-enum
Zugriff:
set,get
Index: keiner Vererbung: ja Default: tilestyle_tiled Objekte: groupbox, layoutbox, notebook, notepage, spinbox, splitbox, statusbar, toolbar, window Das Attribut .tilestyle gibt an, wie das Hintergrundbild zu zeichnen ist. Folgende Werte sind möglich:
-
tilestyle_tiled
Das Hintergrundbild wird so oft nebeneinander und untereinander gezeichnet, bis der Hintergrund ausgefüllt ist.
-
tilestyle_centered
Das Hintergrundbild wird in der Mitte gezeichnet.
-
tilestyle_stretched
Das Hintergrundbild wird so in der Größe geändert, dass die gesamte Fläche ausgefüllt ist.
-
tilestyle_parent_tile
Es wird die Definition des Vaterobjektes übernommen. Es wird der Eindruck erweckt, als ob das Objekt durchsichtig ist. Dieser Wert ist für die Objekte statusbar, toolbar, window nicht zulässig.
-
- Änderung: Beim Objekt thisevent wird jetzt die Abfrage aller Attribute, die sich gegenüber dem Defaultwert geändert haben, unterstützt. Bisher wurde eine Abfrage abhängig von Ereignis und Objekt zugelassen oder abgelehnt, dadurch war es nicht möglich, dass ein WSI noch zusätzliche Informationen liefern konnte. Achtung, nicht jedes Attribut des thisevent Objektes, das man auf einer Oberfläche erhält, erhält man auch auf einer anderen. In der Dokumentation steht, welche überall verfügbar sind.
-
Gnats 9011: Initiale Auswahl für Filerequestor vorgebbar.
Ist das neue boolsche Attribute .startsel (Default ist false) am Filerequestor-Objekt true, so wird die Datei/Verzeichnis-Auswahl mit dem Wert im .value-Attribut vorbelegt.
Restriktionen
- Nur eine einzelne Auswahl (.value muss skalar sein) ist möglich.
- Unter Windows NT ist die Vorbelegung nur beim Laden/Speichern von Dateien, nicht aber für Verzeichnisse möglich.
- Der vorbelegte Wert im .value-Attribut muss den vollständigen Pfad enthalten und sollte zum angegebenen Verzeichnis (.directory-Attribut) korrespondieren.
- Die initiale Auswahl erscheint im Eingabefeld, Eine Selektion in der Auswahlliste findet aber nicht statt, was allerdings an der Systemfunktionalität der Selektionsbox von Windows/Motif liegt.
-
Neu: Die Methoden :instance_of() und :parent_of(), Aufrufbar von allen Objekt-Klassen.
boolean :instance_of(object Model);
Neue Methode :instance_of() mit der man feststellen kann ob ein Objekt von einem bestimmten Model abgeleitet wurde. Der Aufruf liefert true zurück sobald in der .model-Kette der Instance das angegebene Model auftaucht, ansonsten wird false zurückgegeben.
boolean :parent_of(object Child);
Mit dieser neuen Methode :parent_of() kann festgestellt werden ob man Vater, Großvater oder Urgroßvater, ..., eines Kindes ist; das Objekt also mittels ein- oder mehrfachen rekursiven Aufrufs von .parent vom Kind aus erreichbar ist.
- Gnats 9327: Fehlermeldung erscheint für ein spezielles, nicht lösbares, export/import-Problem.
- Gnats 9329: Anlegen von Labels mehr als 64k-mal nun möglich.
- Gnats 9343: Methoden :findtext, :gettext und :replacetext funktionierten nur für edittext Objekte unter MS-Windows, bei denen das Attribut .options[opt_rtf] auf true gesetzt war. Die Methoden funktionieren nun für alle edittext Objekte. Es ist jedoch zu beachten, dass der Parameter Type nur auf Systemen, die RTF unterstützen, den Wert content_rtf besitzen darf.
- Gnats 9350: Zeitverbrauch beim Nachladen von Modulen (zwischen Entladen & Start) verringert.
- Gnats 9339: Das .order-Attribut wir nun bei -writedialog bzw. vom Editor bei den Objekten (menubox, menusep, menuitem) mit herausgeschrieben.
-
Neu: Attribut .real_modified an den Objekten edittext und poptext eingeführt.
Attribut .real_modified
Dieses Attribut gibt an, ob der Inhalt geändert wurde, nachdem das Objekt den Focus erhalten hat. Das Setzen des Inhalt setzt den Wert dieses Attributes zurück.
Datentyp: boolean Zugriff: get, wenn das Objekt sichtbar ist (.real_visible = true) Zulässig bei: edittext und poptext Unterstützt auf: Microsoft Windows, auf alle anderen Oberflächen wird immer true geliefert. Beispiel
Das Attribut kann dazu verwendet werden, um herauszufinden ob ein "charinput" tatsächlich den Inhalt geändert hat:
edittext {
on charinput {
if this.real_modified then
print "" this + " changed";
endif
}
}
- Gnats 9353: Das unnötige Anlegen von Default-Objekten wird vermieden wenn das Modell aus einem anderen Modul stammt.
- Gnats 9372: Strings mit 65533 Zeichen werden jetzt korrekt über die C-Schnittstelle übergeben
18.5 Editor
- Gnats 9298: Speicherzugriffsverletzung in einem vom Editor benutzen Format korrigiert.
- Gnats 8611: Wenn das Quelltextfenster geöffnet wird, wird das aktuelle Objekt jetzt sofort angezeigt, falls dies zulässig ist.
- Gnats 8611: Ein Doppelklick auf ein "Blatt"-Objekt im Objektbrowser öffnet nun das entsprechende Editierfenster. Es wird zum Beispiel das Objekte/Attribute-Fenster geöffnet, wenn man auf einen Pushbutton doppelklickt. Für Objekte, die Kinder besitzen, bleibt es beim bisherigen Verhalten, dass die Kinder angezeigt oder nicht angezeigt werden. Es wird kein Fenster geöffnet.
- Gnats 9323: Das Eingeben von Kontrollzeichen, die den Inhalt eines Edittextes nicht änderten, bewirkte, dass die "Apply" und "Revert" Knöpfe betäigt werden mussten.
- Gnats 8496: Bei "Datei speichern unter..." wurde nicht nachgefragt, wenn eine bereits existierende Datei ausgewählt wurde.
- Gnats 9315: Setzen von COBOL als Sprache für Applikations-Funktionen funktioniert wieder und erzeugt keine Java-Funktionen mehr.
18.5.1 Autocomplete-Feature im Regelfenster
Das Regelfenster im Editor ist nun mit einem Auto-Complete-Feature ausgestattet um die Entwicklung zu vereinfachen. Es ist standardmäßig eingeschaltet kann aber im Konfigurations-Fenster ausgeschaltet werden.
Es dient dazu dem Programmierer bei der Eingabe von Attributen und Methoden zu helfen und funktioniert folgendermaßen:
- Wird die Taste . oder : getippt klappt, wenn links davon ein identifizierbares Objekt steht, eine Auswahl in der Nähe des Cursors hoch.
- Was links vom Cursor steht wird als Pfad auf ein Objekt behandelt und es wird versucht dieses Objekt zu identifizieren.
- Die Auswahl zeigt mögliche Attribute oder Kind-Objekte (bei einem zuletzt getippten .) oder die am Objekt vorhandenen Methoden (bei einem :) an. Es werden vordefinierte und benutzerdefinierte Attribute / Methoden angezeigt.
- Man kann ganz wie gewohnt weiter tippen. In der Auswahl wird dann das entsprechend Passende markiert. Man kann auch durch die Cursortasten Aufwärts und Abwärts in der Auswahl navigieren.
- Mittels Return-Taste oder mit der Maus wird die markierte Auswahl in den Quelltext übernommen.
- Die Auswahl kann mittels Esc abgebrochen werden. Sie verschwinden auch wenn der Cursor mit der Maus oder den Cursortasten Links und Rechts in einen anderen Bereich verschoben wird.
Einschränkungen
Als Objekt wird vor dem .
bzw. :
ein Pfad-Ausdruck erkannt der keine dynamischen Anteile (z.B. Variablen, Attributwerte, Ausdrücke) besitzt. Auch Schlüsselwörter wie this, thisevent, setup werden erkannt. Die Vervollständigung kann nur innerhalb von Regeln geschehen deren Zugehörigkeiten zu einem Objekt bekannt sind und kein Parsing benötigt; man sollte also sinnvollerweise im Modus „Object Rules“ (Regeln zum Objekt) arbeiten.
Beispiele
dialog Dialog
window Wi
{
object ObjAttr := Pb;
pushbutton Pb {}
pushbutton {}
pushbutton {
record Rec {}
}
}
record Rec2 {
object Attr;
}
on dialog start {
variable object LocalVar := Dialog;
variable integer Count := 2;
}
In der start-Regel folgende Pfade vervollständigen lassen:
OK |
Nicht OK |
---|---|
this. |
LocalVar. |
Dialog.Wi.Pb: |
Wi.ObjAttr: |
Dialog.Wi.PUSHBUTTON[2].Rec. |
this.parent. |
|
Dialog.lastrecord.Attr. |
|
Wi.PUSHBUTTON[Count-1]: |
18.6 COBOL-Interface
- Gnats 9333: Truncation von Rückgabestrings bei COBOL-Funktionen entsprechend dem Put-Separator korrigiert.
-
Gnats 9336: Support DMF_SetUserCodePage in der DMcob_Control-Function.
Die DMcob_Control-Funktion unterstützt nun auch die DMF_SetUserCodePage-Aktion. Hierfür muss zusätzlich noch das Feld DM-usercodepage in DM-StdArgs mit dem Namen der zu verwendenden Codepage belegt werden. Sinnvoll ist dies vor dem Umsetzen der Applikationscodepage mittels DMF-SetCodePage auf CP_ucp zu machen um so die Kodierung des DM-usercodepage-Strings sicherzustellen.
Beispiel
move DMF-SetUserCodePage to action.
move "ISO-8859-15" to DM-usercodepage.
call "DMcob_Control" using DM-StdArgs DIALOG-ID action.
move DMF-SetCodePage to action.
move CP-ucp to DM-Options.
call "DMcob_Control" using DM-StdArgs DIALOG-ID action.
18.7 Demos
- Das Drag&Drop-Beispiel wurde um einen Treeview erweitert.
18.8 Netzwerk
-
Gnats 9316: Beim Serverseitigen Aufruf von DM_Control() wird nicht automatisch ein DMF_IsInternalCP zum option-Parameter dazu-geodert.
Außerdem werden die DMF_Cobol*-Aktionen nicht mehr auf die Client-Seite weiter übertragen sondern auf der Server-Seite behandelt. Insofern werden nun auch unterschiedliche Setzungen auf verschiedenen DDM-Servern unterstützt.