gif gif gif gif Index Literaturverzeichnis Mail
Nächstes: Allgemeines zu Ereignissen Nach oben: Jenseits statischer Repräsentationen mittels Ereignisdaten Vorheriges: Anbindung von Ereignissen

Ereignismuster

Es gibt drei grundlegende Möglichkeiten Sequenzen von Ereignismustern  z.B. an Attribute von Objekten anzubinden.

Die einfachste Form ist ein einzelnes Zeichen, das die entsprechende Zuordnung erhalten soll, mit Ausnahme des Leerzeichens und der spitzen Klammer.  

Die zweite Form von Ereignismustern findet Verwendung zur anwenderdefinierten Erzeugung benannter virtueller Ereignisse. Es hat die Form <<name>>, also der Name des virtuellen Ereignisses eingeschlossen in doppelte, statt einfache spitze Klammern.

Die dritte Form hat die Syntax (Abbildung 8.4)

<modifier-modifier-type-detail>

  
Abbildung 8.4: Quellentextbeispiel: Syntax Ereignismuster

Beispiele für gültige und bereits vordefinierte Modifizierer  (engl.:  ,,modifier``) für Aktionen sind Control, Shift, Lock, Button1 oder B1, Button2 oder B2, Button3 oder B3, Button4 oder B4, Mod1 oder M1, Mod2 oder M2, Mod3 oder M3, Mod4 oder M4, Mod5 oder M5, Meta oder M, Alt, Double, Triple.

Typ-Elemente  (engl.:  ,,type``) entsprechen dem Standard der Ereignistypen des X Window Systems: ButtonPress oder Button, ButtonRelease, Circulate, Colormap, Configure, Destroy, Enter, Deactivate, Expose, FocusIn, FocusOut, Gravity, KeyPress oder Key, KeyRelease, Leave, Map, Motion, Property, Reparent, Unmap, Visibility, Activate.

Die erlaubten Werte der ,,Details``  (engl.:  ,,detail``) hängen von dem jeweiligen Typ-Element ab.

In der angegebenen Syntax lassen sich die Ereignismuster also weitergehend mit Bezeichnern, Typ-Elementen und Details kombinieren,  z.B. zu (Abbildung 8.5):

<Control-F5>
<Control-Meta-Down>
<Control-B3-Motion>
<Control-ButtonRelease-3>
<Shift-Button-2>

  
Abbildung 8.5: Quellentextbeispiel: Beispiele für Kombinationen von Ereignismustern

Für einige Sequenzen existieren Abkürzungen. Es kommt auf den Einzelfall an, ob man solche weniger ,,sprechenden`` Abkürzungen verwenden sollte.

Nach einem der obigen Beispiele zur Anbindung von Ereignissen  stellt sich ein reales Beispiel eines bind  wie in Abbildung 8.6 dar.

$w bind \
  all <Meta-ButtonRelease-3> {
        puts "Button Released"
      }

  
Abbildung 8.6: Quellentextbeispiel: Anbindung von Ereignissen mittels Ereignismuster

In diesem Beispiel wird allen Objekten (all) im Pfad $w (z.B. mit set w .f.sub) eine kleine Textausgabe zugeordnet, die ausgelöst wird, wenn Meta gedrückt ist und gleichzeitig die Maustaste 3 losgelassen wird.

Ereignisse lassen sich auch auf einfache Weise kombinieren.  Es ist leicht möglich, beliebige Befehle an Sequenzen von mehreren Ereignissen anzubinden (Abbildung 8.7).

bind . \
  <Meta-x><Meta-y> \
  { puts "Ereignis: M-x M-y" }
bind . \
  <KeyPress-s><o><w><a><s> \
  { puts "s o w a s gibt's" }

  
Abbildung 8.7: Quellentextbeispiel: Anbindung an Kombination von Ereignissen

Die Ausführung der Befehle, die an diese Ereignisse angebunden sind, beginnt, wenn die entsprechenden Ereignisse nacheinander ausgelöst worden sind.

Es lassen sich aber auch vom Anwender neue Ereignisgruppen erzeugen. Virtuelle Ereignisse  können durch event  Operationen erzeugt und gehandhabt werden (Abbildung 8.8):

event operation [arg1 arg2 ...]

  
Abbildung 8.8: Quellentextbeispiel: Syntax zur Handhabung virtueller Ereignisse

Operationen sind in diesem Zusammenhang  add, delete, generate und info. Diese Operationen haben spezifische Optionen und verarbeiten eine Reihe von Argumenten.

Das folgende Beispiel (Abbildung 8.9) demonstriert die praktische Vorgehensweise:

event add <<myvirtual>> \
  <Control-v> <Control-t>
bind . <<myvirtual>> {
  puts "- Virtuelles Ereignis! -"
}
event info <<myvirtual>>

  
Abbildung 8.9: Quellentextbeispiel: Beispiel virtuelles Ereignis

Der erste Befehl definiert ein neues virtuelles Ereignis unter dem Namen myvirtual mittels der Operation add und den zugeordneten Ereignismustern.

Die Anbindung bindet eine Ausgabe mittels puts an das virtuelle Ereignis.

Der letzte Befehl liefert die Informationen über das betreffende virtuelle Ereignis. Ohne Angabe eines bestimmten Ereignisses liefert dieser Aufruf eine Liste aller aktuell definierten virtuellen Ereignisse.

Vordefiniert sind in der Regel z.B. die virtuellen Ereignisse <<Copy>>, <<Paste>> und <<Cut>>.

Virtuelle Ereignisse helfen sowohl Systemunterschiede zu berücksichtigen als auch spezielle Gruppen von Ereignissen zu bilden.

Eine nützliche Funktion bei der Verwendung von Ereignissen ist die Ersetzung  in Ereignisfeldern. Ähnlich wie Formate in Befehlen vieler Programmiersprachen lassen sich Ersetzungen mit Ereignissen verwenden, z.B. in bind Befehlen. Auf diese Art und Weise ist es möglich, bei der Ereignisbehandlung Informationen über das aktuelle Ereignis zu parametrisieren.

Eine Auswahl der wichtigsten Ersetzungen mit einer Kurzbeschreibung zeigt folgende Tabelle (Tabelle 8.1).

 
Ausdruck Kurzbeschreibung
%% einzelnes Prozentzeichen
%W Fenstername, ereignisempfangend
%x x-Koord. (Widget) des Mauszeigers
%y y-Koord. (Widget) des Mauszeigers
%X x-Koord. (Bildschirm) des Mauszeigers
%Y y-Koord. (Bildschirm) des Mauszeigers
%b Nummer der bedienten Maustaste
%A ASCII-Zeichen einer Taste
%K symbolischer Name einer Taste
%h Höhe eines Widgets
%w Breite eines Widgets
Tabelle 8.1: Auswahl wichtiger bind Ersetzungen

 

Folgendes Beispiel (Abbildung 8.10) demonstriert eine einfache Anwendung:

bind . <B1-Motion> {
  puts "Bewegung Mauszeiger %x %y"
}

  
Abbildung 8.10: Quellentextbeispiel: Einfaches Anwendungsbeispiel einer Ersetzung

Bei jeder Bewegung der Maus mit gehaltener erster Maustaste wird eine Zeichenkette mit den aktuellen Koordinaten des Mauszeigers ausgegeben.


gif gif gif gif Index Literaturverzeichnis Mail
Nächstes: Allgemeines zu Ereignissen Nach oben: Jenseits statischer Repräsentationen mittels Ereignisdaten Vorheriges: Anbindung von Ereignissen


Claus-Peter Rückemann / ruckema@uni-muenster.de / Tel. --
Sun Jan 20 19:17:16 MET 2002