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>
  <Scrollbarattribute>
  <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“).

Definition

{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

activate

close

deactivate

deiconify

extevent

help

hscroll

iconify

key

move

paste

resize

scroll

select

vscroll

Kinder

canvas

checkbox

document

edittext

groupbox

image

listbox

layoutbox

menubox

menuitem

menusep

notebook

poptext

pushbutton

radiobutton

record

rectangle

scrollbar

spinbox

splitbox

statictext

tablefield

toolbar

transformer

treeview

window

Vater

dialog

module

window

Menü

Popup-Menü

menuitem

49.2 Attribute

.acc_label

.acc_text

.accelerator

.active

.barwidth

.bgc

.bordercolor

.borderstyle

.borderraster

.borderwidth

.child[integer]

.childcount

.class

.closeable

.cursor

.cut_pending

.cut_pending_changed

.dialog

.dialogbox

.display

.document[integer]

.external

.external[integer]

.fgc

.firstchild

.firstmenu

.firstrecord

.focus

.font

.function

.height

.help

.hsb_arrows

.hsb_linemotion

.hsb_optional

.hsb_pagemotion

.hsb_visible

.icon

.iconic

.iconifyable

.ignorecursor

.index

.label

.lastchild

.lastrecord

.lastmenu

.mapped

.maxheight

.maximized

.maxwidth

.member[integer]

.membercount

.menu

.menu[integer]

.menubgc

.menucount

.menufgc

.minheight

.minwidth

.model

.moveable

options[enum]

.parent

.posraster

.preedit

.real_height

.real_sensitive

.real_visible

.real_width

.real_x

.real_xraster

.real_y

.real_yraster

.record[integer]

.recordcount

.reffont

.scope

.sensitive

.sizeable

.sizeraster

.statushelp

.sysmodal

tile

.tilestyle

.title

.titlebar

.titlebgc

.titlefgc

.toolbar[integer]

.toolbarcount

.toolhelp

.top_most

.userdata

.userplaced

.vheight

.visible

.vsb_arrows

.vsb_linemotion

.vsb_optional

.vsb_pagemotion

.vsb_visible

.vwidth

.width

.xauto

.xleft

.xorigin

.xraster

.xright

.yauto

.ybottom

.yorigin

.yraster

.ytop

49.3 Spezifische Attribute

Attribut Beschreibung

.barwidth

Breite der Bars für die in der Größe änderbaren toolbar-Objekte in Pixeln.

.borderraster

Legt die Art der Geometrieberechnung bei aktivem Raster fest. Die detaillierte Beschreibung finden sie in der Attribut-Beschreibung in der „Attributreferenz“.

.borderstyle

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.

.closeable

Definiert, ob das Fenster geschlossen werden kann.

.dialogbox

Gibt an, ob das Fenster eine Dialogbox ist.

.display

Definiert den Screen, in welchem das Fenster darzustellen ist, siehe auch das Kapitel zur display-Ressource in der „Ressourcenreferenz“.

.hsb_arrows
(nur IDM für Motif)

Definiert, ob Pfeile an den Enden der horizontalen Scrollbar vorhanden sind.

.hsb_linemotion

Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .xorigin beim zeilenweisen horizontalen Scrollen ändert.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.hsb_optional

Definiert, ob die horizontale Scrollbar nur angezeigt wird, wenn sie benötigt wird.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.hsb_pagemotion

Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .xorigin beim seitenweisen horizontalen Scrollen ändert.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.hsb_visible

Definiert die Sichtbarkeit der horizontalen Scrollbar.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.icon

Um ein eigenes Icon in der linken oberen Fensterecke anzuzeigen wird in diesem Attribut die entsprechende tile-Ressource gesetzt.

.iconic

Definiert, ob ein Fenster iconisch (minimiert in der Taskbar) ist.

.iconifyable

Definiert, ob ein Fenster iconifizierbar sein soll oder nicht.

.ignorecursor

Definiert, ob ein temporär gesetzter Override-Cursor ignoriert wird.

.maxheight

Maximale Größe des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.maximized

Maximierungszustand des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.maxwidth

Maximale Breite des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.minheight

Minimale Höhe des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.minwidth

Minimale Breite des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.moveable

Legt fest, ob das Fenster vom Benutzer verschoben werden kann.

options[enum]

Optionen des Objekts.

Indizes:

  • opt_animated (nur IDM für Qt)
  • opt_center_toolhelp (nur IDM für Windows)
  • opt_nested_docks (nur IDM für Qt)
  • opt_scroll_on_focus (nur IDM für Motif)
  • opt_tabbed_docks (nur IDM für Qt)
  • opt_window_size (nur IDM für Qt)

.preedit
(nur IDM für Motif)

Steuert Anzeige und Auswahl des Eingabemodus für die edittexte innerhalb des Fensters.

.sizeable

Definiert, ob das Fenster vergrößerbar bzw. verkleinerbar ist.

.sysmodal

Gibt an, ob ein als Dialogbox definiertes Fenster (.dialogbox = true) vor allen anderen Fenstern auf dem Desktop erscheinen soll.

tile

Definiert das Hintergrundbild des Objekts.

.tilestyle

Gibt die Art und Weise an, wie das in .tile definierte Hintergrundbild dargestellt wird.

.title

Angabe des Fenstertitels.

Siehe auch Kapitel „Hintergrundbild“.

.titlebar

Definiert, ob das Fenster eine Titelleiste besitzt.

.top_most

Mit Hilfe dieses Attributes können Fenster als ganz vorne liegend definiert werden. Der Default für dieses Attribut ist false (nur Microsoft Windows).

.vheight

Interne (virtuelle) Höhe des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.visible

Definiert, ob das Fenster sofort beim Dialogstart sichtbar sein soll.

.vsb_arrows
(nur IDM für Motif)

Definiert, ob Pfeile an den Enden der vertikalen Scrollbar vorhanden sind.

.vsb_linemotion

Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .yorigin beim zeilenweisen vertikalen Scrollen ändert.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.vsb_optional

Definiert, ob die vertikale Scrollbar nur angezeigt wird, wenn sie benötigt wird.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.vsb_pagemotion

Anzahl der Pixel bzw. Rastereinheiten, um die sich der Wert von .yorigin beim seitenweisen vertikalen Scrollen ändert.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.vsb_visible

Definiert die Sichtbarkeit der vertikalen Scrollbar.

Siehe auch Kapitel „Scrollbarattribute“ in der „Attributreferenz“.

.vwidth

Interne (virtuelle) Breite des Objekts.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.xorigin

Gibt an, um wie viele Pixel der eigentliche Inhalt horizontal verschoben ist.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

.yorigin

Gibt an, um wie viele Pixel der eigentliche Inhalt vertikal verschoben ist.

Siehe auch Kapitel „Geometrieattribute“ in der „Attributreferenz“.

Hintergrundbild

Ein im Attribut tile definiertes Hintergrundbild wirkt sich nur auf die eigentliche Fensterfläche aus, nicht jedoch auf

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:

49.4.4 Weitere Hinweise

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: Optionen des Window-Objekts

.options[…] Wert

Standardwert

Bedeutung

opt_window_size

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 (client area) des Fensters.

opt_animated

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.

opt_nested_docks

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.

opt_tabbed_docks

false

Die Option wirkt sich nur auf Toolbars mit dem Stil notepage aus.

true: Tabbed Docks, die sich den Platz teilen, sind möglich. Tabbed Docks lassen sich ähnlich wie Notebooks und Notepages bedienen (siehe Kapitel „Besonderheiten der Toolbar unter Qt“ beim Objekt toolbar).

false: Tabbed Docks sind nicht möglich.

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";

}

Abbildung 16-52: Fenster

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:

Abbildung 16-53: Fenster mit Statusbar und Scrollbars