open_textwindow
— Öffnen eines Textfensters.
open_textwindow
ist veraltet und wird nur aus Gründen
der Rückwärtskompatibilität zur Verfügung gestellt. Neue
Applikationen sollten stattdessen den
Operator open_window
verwenden.
open_textwindow( : : Row, Column, Width, Height, BorderWidth, BorderColor, BackgroundColor, FatherWindow, Mode, Machine : WindowHandle)
open_textwindow
öffnet ein neues Textfenster, das zur
Aus- und Eingabe von Text, sowie für die Ausgabe von Bildern verwendet
werden kann. Unter Verwendung der logischen Fensternummer
WindowHandle
können
alle Ausgaben (write_string
, read_string
,
disp_region
, etc.) auf dieses Fenster geleitet werden.
Textfenster besitzen neben dem Mauscursor auch einen Textcursor, der die
aktuelle Schreibposition bezeichnet (genauer: die linke untere Ecke des
auszugebenden Strings ohne Berücksichtigung der Unterlängen). Seine
Position wird durch einen Unterstrich (oder eine andere Form) angezeigt
(die Anzeige dieser Position kann aber auch ausgeschaltet sein
(= Defaulteinstellung); vgl. set_tshape
).
Mit den Operatoren set_tposition
und get_tposition
kann die Position gesetzt bzw. abgefragt werden.
Beim Öffnen eines Textfensters wird die Cursorposition auf (H,0) gesetzt, wobei H die Höhe des Defaultfonts abzüglich der Unterlängen angibt. Der Cursor wird aber nicht angezeigt. Die Ausgabe beginnt also beim Schreiben in der linken oberen Ecke des Fensters.
Die Farben für den Hintergrund und den Bildrand können mit
query_color
abgefragt werden. Dies kann auch mit einem
Fenster vom Typ 'invisible' durchgeführt werden.
Das Clipping von Texten bei der Ausgabe (write_string
)
an den Fensterrändern kann mit
set_check(::'~text':)
eingeschaltet werden, d.h. es wird dann keine Fehlermeldung mehr erzeugt,
falls der Text über den Rand des Fensters hinausragt.
Der Ursprung des Koordinatensystems des Fensters liegt in der linken
oberen Ecke (Koordinaten: (0,0)). Nach unten nimmt der
Zeilenindex zu (maximal: Height
-1), nach rechts steigt der
Spaltenindex (maximal: Width
-1) an.
Der Parameter Machine
gibt den Namen des Rechners an,
auf dem das Fenster geöffnet werden soll. Im Falle von X-Window wird
bei TCP-IP nur der Name, bei DEC-Net wird noch ein Doppelpunkt hinter
den Namen gesetzt. Der „Server“ bzw. der „Screen“ wird nicht
mit angegeben.
Übergibt man den leeren String, so wird die Environmentvariable
DISPLAY zur Festlegung des Zielrechners verwendet. Hierbei wird der
Name in der üblichen Syntax <Host>:0.0 angegeben.
Mit dem Parameter FatherWindow
kann für die Fenstertypen
'WIN32-Window', 'X-Window' und 'Cocoa' das Vaterfenster für das zu
öffnende Fenster angegeben werden. Ist die Kontrolle 'father' mittels
set_check
eingeschaltet, so muss FatherWindow
ein
HALCON-Fenster sein, andernfalls
(set_check('~father')) kann es auch
ein Betriebssystem-Fenster sein. Wird für FatherWindow
der Wert 0
oder 'root' übergeben, so ist der Desktop (Windows) bzw. das Root-Fenster
(unixartige Systeme) das Vaterfenster. In diesem Fall ist die Einstellung
der Kontrolle 'father' mittels set_check
nicht relevant. Der
Aufrufer muss sicherstellen, dass FatherWindow
ein gültiges
Fensterhandle ist und dass dieses nicht zerstört wird, solange das
eingebettete HALCON Fenster verwendet wird.
Die Position und Größe des Fensters kann sich im Laufe des Programms
ändern. Dies kann zum einen mit set_window_extents
erfolgen,
aber auch durch externe Eingriffe (Windowmanager) hervorgerufen
werden. Für den zweiten Fall ist der Operator set_window_extents
vorgesehen.
Dem Fenster wird beim Öffnen ein sog. Defaultfont zugeordnet.
Dieser wird für Operatoren wie write_string
verwendet und
kann mit set_font
nach dem Aufruf von open_textwindow
überschrieben werden. Es ist jedoch auch möglich, den Defaultfont mit
dem Aufruf set_system(::'default_font',<Fontname>:)
vor dem
Öffnen eines Fensters (und auch aller weiteren) festzulegen (siehe hierzu
auch query_font
).
Die Farbe der Schrift (write_string
, read_string
)
wird mit set_color
, set_rgb
, set_hsi
oder
set_gray
festgelegt.
Mit set_insert
wird bestimmt, wie der Text (bzw. die Graphik)
mit dem Inhalt des Bildwiederholspeichers verknüpft wird.
Hierbei kann z.B. mit set_insert
(::'not':) erreicht werden,
dass nach zweimaligem Schreiben des Textes an der gleichen Position
die Schrift wieder beseitigt wird.
Normalerweise wird jede Ausgabe (z.B. mit write_string
,
disp_region
, disp_circle
, etc.) in ein Fenster
durch einen sog. „Flush“ abgeschlossen. Dies bewirkt, dass die Daten nach
Beendigung der Ausgabeprozedur auf dem Bildschirm vollständig sichtbar
werden. Dies ist aber nicht in allen Fällen erforderlich, insbesondere dann,
wenn ständig Ausgaben erfolgen, oder eine Maus-Prozedur aktiv ist.
Hier ist es günstiger (d.h. schneller), wenn die Daten gepuffert werden,
bis genügend Daten vorhanden sind. Dieses Verhalten kann durch den Aufruf
von set_system(::'flush_graphic','false':)
eingestellt
werden.
Der Inhalt von Fenstern wird (falls die Treibersoftware dies unterstützt)
gesichert; d.h. er bleibt erhalten, auch wenn das Fenster von anderen
Fenstern überlappt wird. Dies ist jedoch nicht in allen Fällen notwendig:
Wenn man ein Textfenster z.B. als Vaterfenster für andere Fenster
verwendet, so kann für dieses der Sicherungsmechanismus abgestellt
und damit der hierfür nötige Speicher eingespart werden. Dies geschieht
mit dem Aufruf von set_system(::'backing_store','false':)
vor dem Öffnen des Fensters.
Unterschied: Graphikfenster - Textfenster
Im Gegensatz zu Graphikfenstern (open_window
) können für
Textfenster mehr Parameter (Farbe, Rand) beim Öffnen festgelegt werden.
Nur Textfenster können zum Einlesen von Benutzerdaten verwendet
werden (read_string
).
Die Ausgabe von Bildern, Regionen und Graphiken wird bei Textfenstern an den Rändern „geclippt“, während bei Graphikfenstern „gezoomt“ wird.
Das Koordinatensystem (z.B. bei get_mbutton
oder
get_mposition
) ist unabhängig von der Bildgröße
immer in Bildschirmkoordinaten. Die maximalen Koordinaten entsprechen
also der Größe des Fensters minus 1. Im Gegensatz dazu wird bei
Graphikfenstern (open_window
)
immer ein Koordinatensystem verwendet, das dem Bildformat entspricht.
Der Parameter Mode
legt den Modus des Fensters fest.
Dieser kann folgende Werte annehmen:
Dies ist der normale Modus für Textfenster: Das Fenster wird entsprechend den Parametern erzeugt und alle Ein- und Ausgaben sind möglich.
Unsichtbare Fenster werden nicht auf dem Bildschirm dargestellt.
Die Parameter Row
, Column
, BorderWidth
,
BorderColor
, BackgroundColor
und
FatherWindow
sind ohne Bedeutung. Ausgaben auf diese Fenster
haben keine Wirkung. Eingaben (read_string
, Maus, etc.)
sind nicht möglich.
Diese Fenster werden verwendet, wenn man Darstellungsparameter für ein
Ausgabegerät abfragen möchte,
ohne ein (sichtbares) Fenster zu öffnen. Übliche Anfragen
sind z.b. query_color
und get_string_extents
.
Diese Fenster sind durchsichtig: Das Fenster selbst ist nicht sichtbar
(Rand und Hintergrund), jedoch sind alle sonstigen Operationen möglich
und alle Ausgaben werden dargestellt.
Die Parameter BorderColor
und BackgroundColor
sind hier ohne Bedeutung. Eine übliche Verwendung für diesen Modus
ist die Erzeugung von Maus-sensitiven Bereichen.
Dies sind ebenfalls nicht sichtbare Fenster. Die Ausgabe von Bildern,
Regionen und Graphik ist auf dem Bildschirm nicht sichtbar, wird jedoch
im Speicher gepuffert. Die Parameter Row
, Column
,
BorderWidth
, BorderColor
, BackgroundColor
und FatherWindow
sind ohne Bedeutung.
Puffer-Fenster verwendet man beispielsweise, wenn man Ausgaben
(im Hintergrund) vorbereitet und schließlich mit
copy_rectangle
in ein sichtbares Fenster kopiert.
Eine andere Anwendung wäre die schnelle Verarbeitung von Bildauschnitten
bei interaktiven Manipulationen. Texteingaben und Mausinteraktion ist mit
dem Modus 'buffer' nicht möglich.
Es ist zu beachten, dass die Parameter Row
, Column
,
Width
und Height
durch
das Ausgabegerät beschränkt sind. Wird ein Vaterfenster
(FatherWindow
<> 'root')
angegeben, dann sind die Koordinaten relativ zum diesem Fenster.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Row
(input_control) rectangle.origin.y →
(integer)
Zeilenindex der linken oberen Ecke.
Defaultwert: 0
Typischer Wertebereich: 0
≤
Row
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: Row >= 0
Column
(input_control) rectangle.origin.x →
(integer)
Spaltenindex der linken oberen Ecke.
Defaultwert: 0
Typischer Wertebereich: 0
≤
Column
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: Column >= 0
Width
(input_control) rectangle.extent.x →
(integer)
Breite des Fensters.
Defaultwert: 256
Typischer Wertebereich: 0
≤
Width
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: Width > 0
Height
(input_control) rectangle.extent.y →
(integer)
Höhe des Fensters.
Defaultwert: 256
Typischer Wertebereich: 0
≤
Height
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: Height > 0
BorderWidth
(input_control) integer →
(integer)
Breite des Fensterrandes.
Defaultwert: 2
Typischer Wertebereich: 0
≤
BorderWidth
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: BorderWidth >= 0
BorderColor
(input_control) string →
(string)
Farbe des Fensterrandes.
Defaultwert: 'white'
BackgroundColor
(input_control) string →
(string)
Hintergrundfarbe.
Defaultwert: 'black'
FatherWindow
(input_control) pointer →
(integer / string)
Logische Nummer des Vaterfensters. Für den Bildschirm als Vater kann 'root' oder 0 eingegeben werden.
Defaultwert: 0
Restriktion: FatherWindow >= 0
Mode
(input_control) string →
(string)
Fenstermodus.
Defaultwert: 'visible'
Werteliste: 'buffer' , 'invisible' , 'transparent' , 'visible'
Machine
(input_control) string →
(string)
Name des Rechners, auf dem das Fenster geöffnet werden soll oder leerer String.
Defaultwert: ''
WindowHandle
(output_control) window →
(handle)
Fenster-Handle.
open_textwindow(0,0,900,600,1,'black','slate blue','root','visible', \ '',WindowHandle1) open_textwindow(10,10,300,580,3,'red','blue',WindowHandle1,'visible', \ '',WindowHandle2) open_window(10,320,570,580,WindowHandle1,'visible','',WindowHandle) set_color(WindowHandle,'red') read_image(Image,'monkey') disp_image(Image,WindowHandle) Button := 0 repeat try get_mposition(WindowHandle,Row,Column,Button) get_grayval(Image,Row,Column,Gray) write_string(WindowHandle2,[' Position (',Row,',',Column,') ']) write_string(WindowHandle2,['Gray value (',Gray,') ']) new_line(WindowHandle2) catch (Exception) endtry until(Button == 4) close_window(WindowHandle1)
Sind die Parameterwerte korrekt, dann liefert open_textwindow
den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.
set_color
,
query_window_type
,
get_window_type
,
set_window_type
,
get_mposition
,
set_tposition
,
set_tshape
,
set_window_extents
,
get_window_extents
,
query_color
,
set_check
,
set_system
write_string
,
read_string
,
new_line
,
get_string_extents
,
get_tposition
,
set_color
,
query_window_type
,
get_window_type
,
set_window_type
,
get_mposition
,
set_tposition
,
set_tshape
,
set_window_extents
,
get_window_extents
,
query_color
,
set_check
,
set_system
Foundation