31 poptext (Combobox)
Mit Hilfe dieses Objektes können textuelle Informationen platzsparend dargestellt werden, wenn der Benutzer aus verschiedenen Informationen immer nur eine benötigt.
Definition
{ export | reexport } { model } poptext { <Bezeichner> } { <Standardattribute> <Allgemeine Attribute> <Geometrieattribute> <Hierarchieattribute> <Layoutattribute> <Textattribute> <Objektspezifische Attribute> }
Ereignisse
Kinder
Vater
Menü
31.1 Attribute
31.2 Spezifische Attribute
Attribut | Beschreibung |
---|---|
Index des aktuell angezeigten Textes. Siehe auch Kapitel „Textattribute und .activeitem“. |
|
Legt die Art der Geometrieberechnung bei aktivem Raster fest. Die detaillierte Beschreibung finden sie in der Attribut-Beschreibung in der „Attributreferenz“. Nur aktiv, wenn .style = listbox. |
|
Liefert, je nach der in .style getroffenen Einstellung, den Inhalt des aktuell angezeigten Textes bzw. den Inhalt des Eingabefeldes. Siehe auch Kapitel „Textattribute und .activeitem“. |
|
Editierbarkeit des Objekts, auch abhängig vom jeweiligen Wert in .style. |
|
Ende eines selektierten Teilstücks in einem Editierbereich. |
|
Definiert ein Format für den vom Objekt angezeigten String. |
|
Gibt die zum Objekt gehörende Formatfunktion an. |
|
Höhe des Objekts. Beim Wert 0 berechnet der IDM aufgrund des aktuellen Zeichensatzes automatisch die für das Objekt richtige Objektgröße. |
|
.hinttext | Platzhalter- oder Hinweistext des Objektes. Siehe auch Kapitel „Hinweise zum Attribut .hinttext“ |
Anzahl der Einträge des Objekts. |
|
Maximale Anzahl möglicher Zeichen im Eingabestring. |
|
Optionen des Objekts. Mögliche Indizes:
|
|
Angabe der Höhe eines neben den Einträgen dargestellten Bildes. |
|
Zum jeweiligen Eintrag gehörendes Bild (IDM für Windows und IDM für Qt). |
|
Bild, welches bei aktivem Eintrag I dargestellt wird IDM für Windows und IDM für Qt). |
|
Angabe der Breite eines neben den Einträgen dargestellten Bildes. |
|
.real_modified
|
Zeigt bei .style = edittext und .style = listbox an, ob der Inhalt seit dem Fokuserhalt tatsächlich geändert wurde. |
Legt die in aufgeklapptem Zustand dargestellte Anzahl der Einträge fest (nur MS Windows und Motif ab Version 2.1). |
|
Anfang eines selektierten Teilstücks in einem Editierbereich. |
|
Steuert die Art der Darstellung und der Editierbarkeit der Combobox. |
|
Definiert die einzelnen anzuzeigenden Texte des Objekts. Siehe auch Kapitel „Textattribute und .activeitem“. |
|
Breite des Objekts. Beim Wert 0 berechnet der IDM aufgrund des aktuellen Zeichensatzes automatisch die für das Objekt richtige Objektgröße. |
|
Userdata für beliebige Daten zu jedem Eintrag des Objekts. |
|
Horizontaler Abstand zwischen Umrandung und Text des Objekts in Pixeln. Siehe Kapitel „Positionierung des Textes im Objekt“. |
31.2.1 Attribut zur Steuerung des select- und activate Ereignisses
Das Attribut .options[opt_old_select] steuert die Erzeugung der activate- und select-Ereignisse und steht standardmäßig auf false.
Steht das Attribut .options[opt_old_select] auf false, so werden select/activate-Ereignisse analog zu den anderen Auswahlobjekten wie Listbox/Treeview generiert.
Erste Änderung zum alten
Verhalten ist, das activate-Ereignisse nicht mehr das Erhalten des Fokus (edittext&listbox-Stil) anzeigen, sondern eine Änderung im Aktivierungszustand (.activeitem-Attribut). Zweitens wird ein select-Ereignis nur bei einer "abgeschlossenen" Selektion des Benutzers erzeugt, selbst wenn der gleiche Eintrag nochmals selektiert wird. Abgeschlossen heißt, dass damit die Liste zugeht (Ausnahmen: Bemerkung (1) und (2)) bzw. die Änderung überhaupt kein Sichtbarmachen der Liste erfordert.
Datentyp |
boolean |
Wertebereich |
false, true |
Standardwert |
false |
Zugriff |
get, set |
Unterstützt auf |
Microsoft Windows, Unix |
Zusammenfassung, wann ein select- oder activate-Ereignis am Poptext bei .options[opt_old_select] = false kommt:
Aktion |
Motif 1.2 |
Motif 2.1 |
MS Win |
Ereignisse |
---|---|---|---|---|
Cursor-Selektion |
* |
|
|
- |
Cursor-Selektion |
* |
|
|
- |
Maus-Selektion |
* |
* |
* |
select |
Maus-Selektion |
* |
* |
* |
activate und select |
Liste schließen |
* |
* |
* |
select |
Liste abbrechen (2) |
* |
* |
* |
activate um auf |
Bemerkungen
- Beim Poptext im Stil Listbox ist die Liste immer offen. Insofern verhält sich hier die Tastatur-Selektion analog zur Maus-Selektion. Auch kann natürlich in diesem Stil die Liste nicht "abgebrochen" werden.
- Nicht auf allen Fenstersystemen gibt es die Möglichkeit, eine offene Liste abzubrechen.
- Welche Tasten zur Cursor-Selektion dienen ist systemabhängig; für gewöhnlich aber die Cursortasten Aufwärts und Abwärts.
Beispiele zur Nutzung der einzelnen Events bei .options[opt_old_select] = false
Um jegliche Änderung, auch bei geöffneter Liste mitzubekommen
poptext Pt {
.options[opt_old_select] false;
on activate {...}
}
Um nur bei der Selektion eines anderen Eintrags zu reagieren
poptext Pt {
.options[opt_old_select] false;
on select {
if (thisevent.value <> thisevent.index) then
...
endif}
}
Um auf jede Selektion zu reagieren
poptext Pt {
.options[opt_old_select] false;
on select {...}
}
Nicht mehr zu benutzen ist on activate, wenn damit der Erhalt des Fokus gemeint ist. Dies ist nun wie folgt zu schreiben:
poptext Pt {
.options[opt_old_select] false;
on focus {...}
}
31.2.2 Textattribute und .activeitem
Zum Zugriff auf den Inhaltsvektor des Poptextes ist das Attribut .text[integer] zu benutzen.
Die Attribute .startsel und .endsel sind nur in den Styles "edittext" und "listbox" aktiv. Im Normalfall (.style poptext) werden diese Attribute ignoriert. Das Attribut .content ist im Style poptext nur lesbar und darf nicht gesetzt werden.
Beim Poptext mit .style listbox oder edittext ist .content ein dynamisches Attribut; es kann nur zur Laufzeit gesetzt werden, statisch in der Dialogdatei ist dieses Attribut nicht definierbar.
Beim Poptext mit .style = edittext ist .content ein eigenständiges Attribut, dessen Wert nicht unbedingt im Inhaltsvektor enthalten sein muss. Daher bleibt .content erhalten und im Eingabefeld stehen, wenn die Liste des Poptextes geleert wird, zum Beispiel indem man .itemcount = 0 setzt.
Im Gegensatz zu .text[integer] ist .content nur als skalares Attribut (also ohne Index) verfügbar.
Das .activeitem Attribut an einem editierbaren poptext-Objekt (.style = listbox oder .style = edittext) liefert für ein sichtbar geschaltetes poptext-Objekt einen "dynamischen" Wert wenn .content geändert wurde. Der gelieferte Wert ist typisch für das Fenstersystem. In der Regel sucht das Fenstersystem in der Liste nach der ersten Zeile, die dem Wert von .content entspricht. Es wird dann die Zeilennummer dieser Zeile geliefert. Ein Wert von 0 bedeutet, dass keine passende Zeile gefunden wurde.
Reproduzierbare Werte kann es nur geben, wenn die Texte eindeutig sind und kein Text ein Anfangstext eines vorherigen Textes ist. Beispiel für eine schlechte Reihenfolge:
.text[1] = "kleiner";
.text[2] = "klein"; // ist Anfangstext von .text[1]
Wird dies nicht beachtet, ist der gelieferte Wert für .activeitem von der Vorgeschichte abhängig.
Da ein poptext-Objekt im Normalfall immer einen Text aus der Liste darstellt, kann das Attribut .activeitem nur auf einen Wert zwischen 1 und .itemcount (jeweils inklusive) gesetzt werden. Insbesondere ist eine Setzung auf 0 nicht erlaubt. Wenn ein poptext-Objekt im Ausnahmefall einen nicht in der Liste (.text[I]) enthaltenen Text anzeigen soll muss das Attribut .content dynamisch gesetzt werden (nicht bei Poptext mit .style = poptext).
31.2.3 Positionierung des Textes im Objekt
Unter Microsoft Windows ist das Attribut .xmargin in den Styles edittext und listbox verfügbar, welches den Textabstand vom rechten und linken Rand des Objektes bestimmt. Allerdings kann bei überlangen Texten (auch abhängig vom MS Windows Patchlevel) unter Umständen der Abstand zum rechten Rand ignoriert werden.
31.2.4 Hinweise zum Attribut .hinttext
Dieses Attribut wird nur von Windows und Qt unterstützt. Am poptext-Objekt muss muss dabei der Style edittext gesetzt sein.
Unter Windows wird .hinttext darüberhinaus unterstützt, wenn das Attribut .style den Wert listbox besitzt.
31.3 Anmerkungen für Dialog Manager mit Microsoft Windows
-
Ein Poptext mit .style = edittext vervollständigt beim Öffnen und Schließen der Liste den Inhalt des Editierfeldes (.content Attribut), wenn dieser dem Anfang eines Listeneintrags entspricht. Dies ist ein Standardverhalten des Windows-Objekts. Kommt es bei der Vervollständigung zu einer Änderung des aktiven Eintrags, wird ein activate Ereignis erzeugt. Wenn keine Vervollständigung stattfindet, wird auch kein Ereignis erzeugt.
-
Wenn man die Maus über der geöffneten Liste eines Poptextes bewegt, wird der Eintrag unter dem Mauszeiger markiert. Der Eintrag wird aber nicht aktiviert, was daran zu erkennen ist, dass der Text nicht in das Editierfeld übernommen wird. Es kommt daher auch nicht zu einem activate Ereignis und beim Schließen der Liste entspricht der Index im select Ereignis dem tatsächlich aktivierten Eintrag und nicht dem Eintrag unter dem Mauszeiger. Dies ist ein Verhalten des Windows-Objekts.
-
Ein editierbarer Poptext markiert den gesamten Text, wenn er den Fokus erhält. Anders als beim Edittext geschieht dies auch, wenn man mit der Maus in das Eingabefeld klickt. Um Text zu markieren, muss die Maustaste nochmals gedrückt werden.
-
Wenn ein editierbarer Poptext (.style = edittext oder .style = listbox) den Fokus verliert, wird ab IDM-Version A.05.02.h der Textcursor nicht, wie unter Windows üblich, an den Anfang, sondern ans Ende des Eingabefelds gesetzt. Hierdurch wird eine konsistentere Darstellung erreicht, da sich Poptexte mit Format schon seit früheren IDM-Versionen so verhalten.
-
Ein Poptext mit .style = edittext würde bei einer Größenänderung den gesamten Text markieren, wenn der IDM dies nicht unterbinden würde. Er tut dies, damit nicht plötzlich irgendwelche Poptexte markiert erscheinen. Er kann jedoch nicht verhindern, dass der Text minimal gescrollt wird. Der IDM stellt aber sicher, dass sich der Textcursor (d. h. .endsel) im sichtbaren Bereich befindet.
Wenn ein Poptext bei einer Größenänderung den Fokus besitzt, wird eventuell trotzdem der gesamte Text markiert, weil der Poptext unter Umständen den Fokus kurzfristig verliert. Dies geschieht zum Beispiel beim Mausklick auf den Rahmen eines vergrößerbaren Fensters.
-
Auswahl bei aktiven
Visual Styles
Beim Poptext war ein Eintrag mittels folgender Aktion aus der Liste wählbar:
Linke Maustaste über dem Pfeil oder dem statischen Text drücken, gedrückt halten und zum gewünschten Eintrag fahren, dort die Maustaste loslassen.
Sobald
Visual Styles
aktiv sind geht dies nicht mehr; man muss vor der Auswahl die Maustaste loslassen und erneut klicken. -
Die Höhe einer Combobox kann nicht gesetzt werden; das jeweilige Fenstersystem wählt automatisch einen Wert, der vom Zeichensatz abhängt. Ab der IDM Version A.05.01.c (.style <> listbox) beachtet die Combobox nun die gesetzte Höhe. Dies kann zu unerwünschten Darstellungseffekten führen, wenn bisher eine beliebige Höhe gesetzt war. In einem solchen Fall muss die Höhe einfach auf 0 gesetzt werden um die alte Darstellung zu erhalten.
Die Combobox lässt sich nicht beliebig verkleinern. Daher wird sie immer mit einer bestimmten Minimalgröße dargestellt, auch wenn im Dialogskript eine kleinere Größe angegeben ist.
Außerdem kann die Höhe einer Combobox mit .style = poptext oder .style = edittext nicht beliebig vergrößert werden. Daher wird das Objekt mit einer bestimmten maximalen Höhe dargestellt, auch wenn im Dialogskript eine größere Höhe angegeben ist.
-
Die Combobox unterstützt ab der IDM Version A.05.01.c auch Dialog Manager Drag&Drop. Wobei, wie bei Drag&Drop üblich, nur der aktive Eintrag aus der Liste ausgewählt (gedragged) werden kann. Es ist zu beachten, dass das Wegziehen eines Eintrags aus der Liste den Inhalt des Editierfeldes wie bei einer Auswahl ändert.
Das .index Attribut des thisevent Objekts beim paste bzw. cut Ereignis kann hierbei folgende Datentypen besitzen:
void
Position innerhalb des Poptextes kann nicht eindeutig zugeordnet werden bzw. das Editierfeld ist an Position 0 getroffen worden.
integer
Die Liste ist an der angegebenen Position getroffen worden.
index
Das Editierfeld ist im angegebenen Bereich getroffen worden.
-
Zur Benutzung einer Radmaus zum Scrollen bitte Kapitel „Radmaus bzw. Radmausunterstützung unter Microsoft Windows“ beachten.
-
Folgendes Fehlverhalten besteht aufgrund von Problem mit Kundendialogen weiterhin:
Ein editierbarer Poptext erzeugt ein modified Ereignis beim Verlust des Tastaturfokus nicht nur wenn der Inhalt editiert, sondern auch wenn ein anderer Eintrag in der Liste ausgewählt wurde.
-
Damit das Attribut .activeitem den richtigen Wert erhält, müssen sich alle enthaltenen Texte auf den ersten 511 Stellen unterscheiden.
-
Der Poptext unterstützt ab der IDM Version A.06.01.h auch Dialog Manager die Option opt_hscroll. Die horizontale Scrollbar erscheint innerhalb des Darstellungsbereichs und überdeckt somit die untersten Zeilen. Es wird dafür dann auch eine vertikale Scrollbar eingeblendet. Da die Bedienung von Scrollbars in einer geöffneten Liste für den Anwender nicht einfach ist, sollte diese Option nur verwendet werden, wenn es keine andere Lösung gibt.
31.4 Anmerkungen für Dialog Manager unter Motif
- Konform zum Standardverhalten einer Motif-Combobox mit permanenter Liste erhält ein Poptext (.style = listbox) beim Mausklick in die Liste nicht automatisch den Fokus. Dies geschieht erst beim Klick in den Textfeld-Bereich. Die focus und deselect Ereignisse des Poptextes kommen dementsprechend nur beim Fokuswechsel hin bzw. weg vom Textfeld-Bereich.
- Ein getvalue (explizit bzw. implizit via Zuweisungsoperator) auf .activeitem eines editierbaren Poptextes liefert ab IDM-Version A.05.01.d konsistente Werte analog zum Windows-WSI und dadurch auch 0 wenn der Inhalt von .content nicht einem Inhalt eines .text[I] entspricht.
- Es sollte unbedingt vermieden werden, Änderungen an einem Poptext während des Öffnens der Popup-Liste anzustoßen (z. B. in einer Deselect-Regel). Bestimmte Änderungen können nur durch ein Zerstören und Neuanlegen („clobbering“) des Poptextes ausgeführt werden. Dies wird ab IDM-Version A.05.02.h verzögert um zunächst den normalen Ablauf innerhalb des Toolkits zu ermöglichen und Abstürze zu vermeiden. Allerdings kann dadurch noch der alte Inhalt des Poptextes sichtbar sein. Außerdem verschickt der Poptext in dieser Konstellation bis zum Schließen der Liste keine Ereignisse. Bei dieser Situation wird eine Warnung in die Log-Datei geschrieben.
31.5 Beispiel
window PoptextDemo
{
.active false;
.title "PoptextDemo";
child poptext Poptext
{
.xleft 5;
.ytop 1;
.text[1] "Eintrag 1";
.text[2] "Eintrag 2";
.text[3] "Eintrag 3";
.text[4] "Eintrag 4";
.activeitem 1;
.showitem 4;
}
child poptext Combox
{
.xleft 20;
.ytop 1;
.text[1] "Combo 1";
.text[2] "Combo 2";
.text[3] "Combo 3";
.text[4] "Combo 4";
.activeitem 1;
.style edittext;
.showitem 4;
}
child poptext Listbox
{
.xleft 34;
.ytop 1;
.height 5;
.text[1] "Liste 1";
.text[2] "Liste 2";
.text[3] "Liste 3";
.text[4] "Liste 4";
.text[5] "Liste 5";
.text[6] "Liste 6";
.text[7] "Liste 7";
.text[8] "Liste 8";
.activeitem 1;
.style listbox;
}
}