49 window (Fenster)
Das zugrundeliegende Objekt eines Fenstersystems ist – wie der Name bereits sagt – das Fenster. Alle weiteren Objekte müssen innerhalb eines Fensters erzeugt werden.
Die Deklaration eines Fensters beginnt mit dem Schlüsselwort window; anschließend steht der Identifikator des Fensters, gefolgt von der Fensterdefinition.
Mit der Fensterdefinition werden das Aussehen, die Größe und die verschiedenen weiteren Eigenschaften eines Fensters festgelegt.
Definition
{ export | reexport } { model } window { <Bezeichner> } { <Standardattribute> <Allgemeine Attribute> <Geometrieattribute> <Rasterattribute> <Hierarchieattribute> <Layoutattribute> < > <Objektspezifische Attribute> }
49.1 Definition von Kindobjekten
Alle anderen vom DM unterstützten Objekte liegen innerhalb eines Fensters. Aus diesem Grund müssen sie entweder direkt oder indirekt als Kind eines Fensters deklariert werden. Das Schlüsselwort hierfür ist child. Es folgt ein Schlüsselwort, das den Typ des Objektes beschreibt und ein optionaler Identifikator. Dieser Identifikator muss jedoch nur angegeben werden, wenn das Objekt später aus den Regeln oder aus der Anwendung heraus angesprochen werden soll. Eingeschlossen in geschweifte Klammern folgen die Objektdefinitionen (siehe Kapitel „Vererbung von Attributen“ im Handbuch „Programmiertechniken“).
{export | reexport} child <Objektklasse> {<Identifikator>}
{
Objektdefinition
}
Anmerkung
Das Einhängen eines Menüs in das Fenster muss über das Schlüsselwort child erfolgen. Die über child eingehängten Menüs werden dabei in der Menübar des Fensters platziert. Ihre Anzahl ist dabei beliebig.
Ereignisse
Kinder
Vater
Menü
49.2 Attribute
49.3 Spezifische Attribute
Attribut | Beschreibung |
---|---|
Breite der Bars für die in der Größe änderbaren toolbar-Objekte in Pixeln. |
|
Legt die Art der Geometrieberechnung bei aktivem Raster fest. Die detaillierte Beschreibung finden sie in der Attribut-Beschreibung in der „Attributreferenz“. |
|
Definiert den Stil, also Darstellung und Ausprägung, des Rahmens (ab IDM-Version A.06.01.a). Attribut wird unterstützt, jedoch nur border_none und border_toolkit zulässig. border_plain, border_raised und border_sunken werden als border_toolkit umgesetzt. |
|
Definiert, ob das Fenster geschlossen werden kann. |
|
Gibt an, ob das Fenster eine Dialogbox ist. |
|
Definiert den Screen, in welchem das Fenster darzustellen ist, siehe auch das Kapitel zur display-Ressource in der „Ressourcenreferenz“. |
|
.hsb_arrows
|
Definiert, ob Pfeile an den Enden der horizontalen Scrollbar vorhanden sind. |
Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .xorigin beim zeilenweisen horizontalen Scrollen ändert. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Definiert, ob die horizontale Scrollbar nur angezeigt wird, wenn sie benötigt wird. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .xorigin beim seitenweisen horizontalen Scrollen ändert. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Definiert die Sichtbarkeit der horizontalen Scrollbar. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Um ein eigenes Icon in der linken oberen Fensterecke anzuzeigen wird in diesem Attribut die entsprechende tile-Ressource gesetzt. |
|
Definiert, ob ein Fenster iconisch (minimiert in der Taskbar) ist. |
|
Definiert, ob ein Fenster iconifizierbar sein soll oder nicht. |
|
Definiert, ob ein temporär gesetzter Override-Cursor ignoriert wird. |
|
Maximale Größe des Objekts. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Maximierungszustand des Objekts. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Maximale Breite des Objekts. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Minimale Höhe des Objekts. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Minimale Breite des Objekts. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Legt fest, ob das Fenster vom Benutzer verschoben werden kann. |
|
Optionen des Objekts. Indizes:
|
|
.preedit
|
Steuert Anzeige und Auswahl des Eingabemodus für die edittexte innerhalb des Fensters. |
Definiert, ob das Fenster vergrößerbar bzw. verkleinerbar ist. |
|
Gibt an, ob ein als |
|
Definiert das Hintergrundbild des Objekts. |
|
Gibt die Art und Weise an, wie das in .tile definierte Hintergrundbild dargestellt wird. |
|
Angabe des Fenstertitels. Siehe auch Kapitel „Hintergrundbild“. |
|
Definiert, ob das Fenster eine Titelleiste besitzt. |
|
Mit Hilfe dieses Attributes können Fenster als ganz vorne liegend definiert werden. Der Default für dieses Attribut ist false (nur Microsoft Windows). |
|
Interne ( Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Definiert, ob das Fenster sofort beim Dialogstart sichtbar sein soll. |
|
.vsb_arrows
|
Definiert, ob Pfeile an den Enden der vertikalen Scrollbar vorhanden sind. |
Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .yorigin beim zeilenweisen vertikalen Scrollen ändert. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Definiert, ob die vertikale Scrollbar nur angezeigt wird, wenn sie benötigt wird. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .yorigin beim seitenweisen vertikalen Scrollen ändert. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Definiert die Sichtbarkeit der vertikalen Scrollbar. Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“. |
|
Interne ( Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Gibt an, um wie viele Pixel der eigentliche Inhalt horizontal verschoben ist. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
|
Gibt an, um wie viele Pixel der eigentliche Inhalt vertikal verschoben ist. Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“. |
Ein im Attribut tile definiertes Hintergrundbild wirkt sich nur auf die eigentliche Fensterfläche aus, nicht jedoch auf
- Titelleiste
- Menüleiste
- Statusbar
- Eingedockte Toolbar
49.4 Hinweise zum IDM für Windows
49.4.1 Automatische Größenanpassung bei unzulässigen Größenwerten
Werden bei einem Fenster unzulässige Größenwerte angegeben, dann wird die Größe automatisch angepasst und ein resize-Ereignis generiert. Ein unzulässiger Wert ist hierbei ein Wert, der von Microsoft Windows abgelehnt wird. Eine Verletzung von .minwidth, .maxwidth, … ist ein Fehler des Dialogskriptes, weswegen das Verhalten hier undefiniert ist.
49.4.2 Maximalgrößen von Fenstern
Unter Microsoft Windows kann ein Fenster normalerweise maximal die Größe des Bildschirms plus die Größe des Fensterrahmens annehmen. Dies gilt entsprechend für MDI-Kindfenster, hier ist es maximal die Maximalgröße des Vaterfensters (abhängig vom Wert in .maxheight und .maxwidth) plus der Größe des Fensterrahmens.
Soll ein Fenster größer als diese Maximalgrößen gezeichnet werden, so ist muss entweder .maxheight bzw. .maxwidth gesetzt werden oder, falls .maxheight bzw. .maxwidth nicht gesetzt sind, ergibt sich die Maximalgröße implizit aus .vheight und .vwidth (hierbei müssen aber .hsb_visible bzw. .vsb_visible auf true gesetzt sein). Bei Vorgabe der Maximalgröße eines MDI-Kindfensters durch das Vaterfenster erfolgt die Priorisierung entgegengesetzt, d.h. zuerst über .vheight und .vwidth und danach über .maxheight bzw. .maxwidth.
49.4.3 Fensterzustand bei ungewöhnlichen Attributwerten
In Version A.05.02.g wurde die Behandlung der Attribute .iconic und .maximized überarbeitet, da der Zustand eines Fensters nicht immer den Einstellungen dieser Attribute entsprach. In den vorherigen Versionen konnten Probleme auftreten, wenn andere Attribute, wie .titlebar, .sizeable und .borderwidth, ungewöhnliche – in der Praxis selten verwendete – Werte oder Wertkombinationen aufwiesen.
Ab Version A.05.02.g gibt es folgende Änderungen und Korrekturen:
-
Änderung
Bei
.maximized true;
.iconic true;
wird ein Fenster minimiert dargestellt und zu maximiert restauriert. In den vorherigen Versionen wurde es manchmal nicht minimiert dargestellt und oft zur normalen Größe restauriert.
-
Korrektur
Bei
.titlebar false;
.sizeable true;
.borderwidth 0;
wird ein Fenster mit der korrekten Breite – und nicht wie in vorherigen Versionen um 2 Pixel zu breit – angelegt.
-
Korrektur
Bei
.titlebar false;
.sizeable true;
.borderwidth 0;
.iconic true;
wird ein Fenster korrekt minimiert dargestellt.
49.4.4 Weitere Hinweise
- Zur Benutzung einer Radmaus zum Scrollen bitte Kapitel „Radmaus bzw. Radmausunterstützung unter Microsoft Windows“ beachten.
-
Ist am Fenster keine maximale Breite bzw. Höhe gesetzt (.maxwidth = 0 bzw. .maxheight = 0), dann wird die virtuelle Breite bzw. Höhe als maximale Breite bzw. Höhe verwendet. Voraussetzung ist, dass die virtuelle Breite bzw. Höhe gültig ist (.vwidth <> 0 und .hsb_visible = true bzw. .vheight <> 0 und .vsb_visible = true).
Ein Fenster ist also nur dann beliebig vergrößerbar, wenn weder eine maximale noch eine virtuelle Größe gesetzt ist.
Außerdem ist zu beachten, dass die Schieberegler (scrollbars) zur Darstellungsfläche gehören. Hierdurch kann die Darstellungsfläche noch verschoben (gescrollt) werden, obwohl das Fenster die virtuelle Größe besitzt.
- Die minimale Größe eines Fensters muss, um Probleme zu vermeiden, so gesetzt werden, dass die Höhe und Breite des Arbeitsbereichs nicht kleiner als 0 werden kann. Insbesondere muss die minimale Höhe so gesetzt werden, dass alle Menüs der Menüzeile Platz haben, wenn das Fenster die minimale Breite besitzt. Aus diesem Grund kann es sein, dass ein Fenster höher dargestellt wird als gewünscht, bzw. dass ein Fenster sich vergrößert, wenn zusätzliche Menüs sichtbar geschaltet werden. Um solche Effekte zu vermeiden reicht es die minimale Breite (.minwidth) so groß zu wählen, dass die Menüzeile nicht mehrzeilig werden kann (alle Menüs passen nebeneinander).
- Bei Änderung der Taskbar-Einstellungen werden unter Microsoft Windows Fenster unter Umständen so verschoben, dass sie komplett zu sehen sind. Das selbe Verhalten kann auch beobachtet werden, wenn der Rechner vom Benutzer gesperrt und wieder entsperrt wird. Dies ist ein generelles Verhalten von Microsoft Windows und kann auch mit anderen Applikationen (Internet Explorer, Eingabeaufforderung (DOS-Box), Outlook, Notepad…) beobachtet werden. Auch ein maximiertes Fenster, dessen Größe eingeschränkt ist, wird auf diese Weise behandelt und damit verschoben.
-
Unter Microsoft Windows lässt es sich nicht umgehen, dass ein in der Taskleiste dargestelltes Fenster aktiviert werden kann. Ist zu diesem Zeitpunkt ein Window-Objekt mit .dialogbox = true (Dialogbox) oder ein Messagebox- bzw. Filerequestor-Objekt geöffnet, wird daher zunächst ein falsches Objekt aktiviert. Kurz danach aktiviert der Dialog Manager das richtige Objekt, also die Dialogbox bzw. das Messagebox- oder Filerequestor-Objekt.
Hierbei gibt es folgende Einschränkung:
Unter bestimmten Umständen muss der Dialog Manager heuristisch nach dem richtigen Objekt suchen. Um zu verhindern, dass hierbei ein falsches Objekt aktiviert wird sollte folgendes vermieden werden:
- Mehrere Messagebox- oder Filerequestor-Objekte sind gleichzeitig geöffnet. Toplevel-Objekte, die nicht durch den Dialog Manager erzeugt wurden, sind ebenso problematisch.
- Es wird beim Schließen dieser Objekte die Reihenfolge (zuletzt geöffnet wurde zuerst geschlossen) nicht beachtet.
- Nach dem Öffnen eines modalen Objekts werden am Toplevel-Fenster der Anwendung die Attribute .sensitive, .mapped, .iconic oder .visible geändert.
-
Der IDM unterstützt das Multi Document Interface (MDI) von Microsoft Windows.
Um ein
MDI-frame-window
zu erzeugen, muss das Fenster als Toplevel-Fenster definiert sein, eine Titelleiste haben und darf keine anderen Kinder als Fenster haben. Andere Kinder als Fenster oder das Fehlen einer Titelleiste (.titlebar = false) erzeugen Fehler.Um ein
MDI-child-window
zu erzeugen, muss es als direktes Kind einesMDI-frame-window
definiert werden. EinMDI-child-window
hat immer eine Titelleiste und kann keine Menüleiste haben.Alle anderen Fenster sind normale Fenster, die Toplevel-Fenster oder Kind-Fenster sein können. Ein normales Kind-Fenster kann nicht den Rahmenstil eines
aktiven
Fensters sowie keine Menüleiste haben und besitzt immer eine Titelleiste sowie denselben System-Accelerator wie das Toplevel-Fenster.Kind-Fenster, die nicht das MDI benutzen, werden nicht unterstützt, weshalb sich viele Attribute und Ereignisse nicht wie erwartet verhalten.
Anmerkung
Microsoft pflegt das
Multi Document Interface
seit Windows 8 nicht mehr (und rät schon seit Windows 95 von seiner Verwendung ab). Dies betrifft zum Beispiel dieVisual Styles
, sodass MDI-Kindfenster anders aussehen als normale Toplevel-Fenster.
49.5 Hinweis zum IDM für Motif
Bitte beachten Sie in Bezug auf die Anordnung von Fenstern vor oder hinter anderen Fenstern und Dialogfeldern auf dem Bildschirm (Z-Ordnung) den Hinweis in Kapitel „Z-Ordnung von Fenstern und Dialogfeldern“.
49.6 Besonderheiten des Fensters unter Qt
Das Window-Objekt verfügt über vier weitere Optionen für die Unterstützung von Toolbars und Tabbed Docks
sowie um Größe und Position eines Fensters Qt-konform zu setzen.
Tabelle 16-3:
.options[…] |
Standardwert |
Bedeutung |
---|---|---|
false |
true: Größenangaben (.width, .height, Minimal- und Maximalwerte) beziehen sich auf das gesamte Fenster, inklusive Menüleiste, Toolbars, Tabbed Widgets und Statusleiste, aber ohne Dekoration (Titelzeile, Ränder). false: Größenangaben beziehen sich auf den Innenbereich ( |
|
false |
true: Animiertes, interaktives Verschieben von Toolbars. Dies führt allerdings zu deutlich mehr resize- und move-Ereignissen. false: Keine Animationen beim Verschieben von Toolbars. |
|
false |
Die Option wirkt sich nur auf Toolbars mit dem Stil notepage aus. true: Nebeneinander liegende, mehrreihige Docks sind möglich. Dies führt allerdings zu einer nicht mehr so klaren Bedienung bei Interaktionen und Verschiebungen. false: Nur einreihige Docks sind möglich. |
|
false |
Die Option wirkt sich nur auf Toolbars mit dem Stil notepage aus. true: false: |
Wie unter Motif (und im Unterschied zu Microsoft Windows) wirkt das Attribut .sensitive unter Qt nicht auf die Titelzeile des Fensters. Auch wenn .sensitive = false ist (und sich der Fensterinhalt entsprechend nicht mehr bedienen lässt), können dennoch die Funktionen der Titelleiste (Schließen, Verschieben, Minimieren, Maximieren…) genutzt werden.
Das Attribut .moveable hat unter Qt keine Auswirkung. Fenster lassen sich immer verschieben.
Generell werden beim IDM für Qt deutlich mehr move- und resize-Ereignisse erzeugt als bei den anderen IDM-Versionen, da für jedes Pixel, um das vergrößert, verkleinert oder verschoben wird, ein entsprechendes Ereignis ausgelöst wird. Es existiert keine zuverlässige Möglichkeit, Zustand und Ende der Aktionen zu bestimmen.
Manche Fensterzustände lassen sich nur durch internes Neuanlegen (Clobbering
) ändern, wodurch allerdings activate- und deactivate-Ereignisse ausgelöst werden.
Es kann noch vorkommen, dass Größenangaben in bestimmten Konstellationen nicht korrekt umgesetzt werden (z. B. bei ihrer Änderung im minimierten Zustand). Momentan kann das Verhalten je nach Window Manager unterschiedlich sein (z. B. beim Minimieren).
49.7 Beispiel
Erzeugen eines Fensters
dialog Test
{
}
window WnTest
{
.width 506;
.height 238;
.title "Urlaubsplanung";
}
Erzeugung eines Fensters mit Statusbar und Scrollbar rechts und unten
dialog Test
{
}
window WnTest
{
.width 506;
.height 238;
.vwidth 600;
.vheight 500;
.hsb_visible true;
.hsb_optional false;
.vsb_visible true;
.vsb_optional false;
.title "Urlaubsplanung";
child statusbar StBar
{
.xleft 38;
.ytop 227;
child statictext St1
{
.xleft 38;
.ytop 227;
.text "Hier steht der erste Text";
}
child statictext
{
.xleft 38;
.ytop 227;
.text "Und hier der zweite";
.depth -2;
}
}
}
Resultat des vorstehenden Beispiels zur Erzeugung eines Fensters mit Statusbar und Scrollbar rechts und unten: