4.10.9 VisText und LargeText

4.10.9.1 VisText

4.10.9.2 LargeText


Die VisualClass Objekte VisText und LargeText müssen als Children eines VisContent in einem View verwendet werden. VisText-Objekte dienen dazu, Text gemeinsam mit Grafikelementen anzuzeigen oder einzugeben. LargeText-Objekte müssen Sie verwenden, wenn Sie große Textmengen (mehr als 4000 Zeichen) darstellen oder bearbeiten wollen.

Für alle anderen Zwecke sollten Sie die GenericClass-Objekte Memo oder InputLine verwenden.

^

4.10.9.1 VisText

VisText-Objekte werden ähnlich wie VisObj-Objekte verwendet. Die notwendigen Informationen dazu finden Sie in den Kapiteln 5.3 (VisGroup), 5.4 (VisContent) und 5.5 (VisObj). Sie können Objekte der Klassen VisObj und VisText innerhalb eines Visual Tree beliebig mischen. Allerdings können VisText-Objekte keine Children haben. Deswegen werden die diesbezüglichen Instancevariablen von VisText-Objekten nur unterstützt, wenn sie die eigene Größe betreffen.

Zusätzlich zu den Text-spezifischen Instancevariablen unterstützen VisText-Objekte die folgenden Instancevariablen:

Eigene Instancevariablen

Variable Syntax im UI-Code Im BASIC-Code
visTextFrame visTextFrame = width [, col [, dis [, st ]]] lesen, schreiben
visTextFrameOptions visTextFrame = yAdd [, fill] lesen, schreiben

Einige der bei der VisGroup Class (Kapitel 5.3) bzw. der VisObj Class (Kapitel 5.5) beschriebenen Instancevariablen sind auch für VisText-Objekte verfügbar. Ihre wesentlichen Eigenschaften werden im Folgenden kurz beschrieben.

Variable Syntax im UI-Code Im BASIC-Code
drawable drawable = TRUE | FALSE lesen, schreiben
detectable detectable = TRUE | FALSE lesen, schreiben
managed managed = TRUE | FALSE lesen, schreiben
visPosition visPosition = xPos, yPos lesen, schreiben
xPosition, yPosition -- nur lesen
visSize visSize = width, height lesen, schreiben
xSize, ySize -- nur lesen


visTextFrame

Die Instancevariable visTextFrame legt fest, ob ein Rahmen um das Objekt gezeichnet werden soll. Das entspricht in etwa der Instancevariablen TextFrame bei GenericClass Textobjekten.
Syntax UI-Code: visTextFrame = width [ , color [ , dist [ , style ]]
         Lesen: <numVar> = <obj>.visTextFrame (0)   ' width
                <numVar> = <obj>.visTextFrame (1)   ' color
                <numVar> = <obj>.visTextFrame (2)   ' dist
                <numVar> = <obj>.visTextFrame (3)   ' style
     Schreiben: <obj>.visTextFrame = width [, color [, dist [, style]]
         width: Breite des Rahmens. Defaultwert: 0 (kein Rahmen)
         color: Farbe des Rahmens. Defaultwert: 0 (BLACK)
          dist: Abstand des Rahmens vom Text-Objekt. Defaultwert: 0
         style: Linienstil, siehe Tabelle. Defaultwert: LS_SOLID

Alle Parameter sind vom Datentyp Byte. Beachten Sie, dass der Rahmen außerhalb des Objekts gezeichnet wird. Ein 2 Pixel breiter Rahmen mit einem Abstand (dist) von 1 vergrößert den Platzbedarf des Objekts um 3 Pixel in jede Richtung.

Erlaubte Linienstile für den Parameter style:

Wert Konstante Bedeutung
0 LS_SOLID durchgehend
1 LS_DASHED gestrichelt
2 LS_DOTTED gepunktet
3 LS_DASHDOT Strich-Punkt
4 LS_DASDDOT Strich-Doppelpunkt


visTextFrameOptions

Die Instancevariable visTextFrameOptions modifiziert den Rahmen (visTextFrame) um ein VisText Objekt. Mit dem Parameter yAdd wird die obere Kante des Rahmens um yAdd Pixel nach oben verschoben. Damit können Sie einem umrahmten Text ein gefälligeres Aussehen geben. Der Rahmen wird dadurch höher, die untere Kante wird nicht verschoben. yAdd ist vom Datentyp Byte.

Wenn Sie den Parameter fill auf TRUE setzen, dann wird der Bereich zwischen dem Objekt und dem Rahmen mit der Text-Hintergrundfarbe gefüllt. Ansonsten ist dieser Bereich transparent. Die Einstellung fill = TRUE ist nur sinnvoll, wenn mit visTextFrame oder mit dem Parameter yAdd ein Abstand zwischen dem Rahmen und dem Objekt eingestellt wurde und sich das Objekt vor einem Hintergrund mit einer abweichenden Farbe befindet.


Syntax UI-Code: visTextFrameOptions = yAdd [ , fill ]
         Lesen: <numVar> = <obj>.visTextFrameOptions (0)  ' yAdd
                <numVar> = <obj>.visTextFrameOptions (1)  ' fill
                <numVar> = <obj>.visTextFrame (2)  ' dist
                <numVar> = <obj>.visTextFrame (3)  ' style
     Schreiben: <obj>.visTextFrame = yAdd [ , fill ]
          yAdd: Verschiebung der oberen Rahmenkante nach oben. 
   Defaultwert: 0 (keine Verschiebung)
          fill: Füllen des Bereichs zwischen Objekt und Rahmen
                mit der Text-Hintergrundfarbe.
   Defaultwert: FALSE (keine Füllung)

 
Beispiele für visTextFrame und visTextFrameOptions:

...
visTextFrame = 1, RED
...
visTextFrame = 1, RED
visTextFrameOptions = 10
...
visTextFrame = 1, RED
visTextFrameOptions = 10, TRUE


drawable

Die Instancevariable drawable bestimmt, ob das Objekt auf den Bildschirm gezeichnet wird oder nicht. Das entspricht in etwa der Instancevariablen visible bei GenericClass Objekten. Allerdings wird das Objekt weiterhin bei der Berechnung der Geometrie berücksichtigt, auch wenn drawable auf FALSE gesetzt ist. Siehe auch: Kapitel 5.5.2 VisObj: Grundlegende Fähigkeiten
Syntax UI-Code: drawable = TRUE | FALSE
         Lesen: <numVar> = <obj>.drawable 
     Schreiben: <obj>.drawable = TRUE | FALSE

 

detectable

Die Instancevariable detectable bestimmt, ob das Objekt auf Maus- und Tastaturereignisse reagieren soll, oder nicht. Das entspricht in etwa der Instancevariablen readOnly bei GenericClass Objekten. Siehe auch: Kapitel 5.5.2 VisObj: Grundlegende Fähigkeiten
Syntax UI-Code: detectable = TRUE | FALSE
         Lesen: <numVar> = <obj>.detectable
     Schreiben: <obj>.detectable = TRUE | FALSE

 

managed

Die Instancevariable managed legt fest, ob die Position des Objekts vom Geometriemanager verwaltet werden soll, oder nicht. Setzen Sie den Wert auf FALSE, so wird der Geometriemanager das Objekt ignorieren. Sie müssen dann einen Wert für visPosition setzen.

Sie können den Wert auch auf TRUE lassen, wenn das zugehörige VisContent im Modus customManageChildren arbeitet. Siehe auch: Kapitel 5.5.2 VisObj: Grundlegende Fähigkeiten


Syntax UI-Code: managed = TRUE | FALSE
         Lesen: <numVar> = <obj>.managed 
     Schreiben: <obj>.managed = TRUE | FALSE

 

visPosition

Die Instance-Variable visPosition enthält die aktuelle Position des Objekts, relativ zu seinem VisContent. Siehe auch: 5.3.2.1 VisGroup: Größe und Position
Syntax UI-Code: visPosition = xPos, yPos 
          xPos: x-Position
          yPos: y-Position
         Lesen: <numVar> = <obj>.visPosition (0)  ' xPos
                <numVar> = <obj>.visPosition (1)  ' yPos
     Schreiben: <obj>.visPosition =  xPos, yPos  [, autoRedraw ]
    autoRedraw: FALSE (Default): keine sofortige Neudarstellung
                TRUE: sofortige Neudarstellung (Move-To-Funktion)

 

visSize

Die Instance-Variable visSize enthält die aktuelle Größe des Objekts.

Wichtig: Sie müssen einen Wert für visSize festlegen.

VisText-Objekte haben immer eine feste Größe. Sie verfügen nicht über die Fähigkeit, ihre eigene Größe der eingegebenen Textmenge anzupassen. Sie erzeugen auch keine Rollbalken. Wenn Sie mehr Text eingeben oder anzeigen, als in die vorgegebene Größe passt, wird der überschüssige Text nicht dargestellt. Siehe auch: 5.3.2.1 VisGroup: Größe und Position


Syntax UI-Code: visSize = width, height 
                width: Breite
                height: Höhe
         Lesen: <numVar> = <obj>.visSize (0)  ' Breite
                <numVar> = <obj>.visSize (1)  ' Höhe
     Schreiben: <obj>.visSize =  width, height [, autoRedraw ]
    autoRedraw: FALSE (Default): keine sofortige Neudarstellung
                TRUE: sofortige Neudarstellung

 

xPosition, yPosition

Diese Werte liefern die aktuelle Position des Objekts. Siehe auch: 5.3.2.1 VisGroup: Größe und Position
Syntax Lesen: <numVar> = <obj>.xPosition 
              <numVar> = <obj>.yPosition

 

xSize, ySize

Diese Werte liefern die aktuelle Größe des Objekts in Pixeln. Siehe auch: 5.3.2.1 VisGroup: Größe und Position
Syntax Lesen: <numVar> = <obj>.xSize 
              <numVar> = <obj>.ySize

 
Das folgende Codefragment aus dem Beispiel "VisText Demo 2" im Ordner "Beispiel\Objekte\VisText und LargeText" zeigt, wie man einen VisText in einen VisualTree einbinden kann.
View DemoView
  Content = DemoContent
  initialSize = 400, 220
  < weitere Instancevariablen >
End OBJECT

VisContent DemoContent
  Children = VisObj1, VisText1, VisObj2, VisText2
  < weitere Instancevariablen >
End OBJECT

VisObj VisObj1
  visSize = 120, 120
  OnDraw = VisObjDraw  ' muss irgendwo implementiert sein
End OBJECT

VisText VisText1
  text$ = "Raumschiff\rEnterprise"
  visSize = 150, 50
  fontID = FID_UNIVERSITY
  fontSize = 16
End OBJECT

^

4.10.9.2 LargeText

LargeText Objekte bringen nur eine einzige eigene Instancevariable mit.

Variable Syntax im UI-Code Im BASIC-Code
approxSize approxSize = numWert lesen, schreiben

Diese Variable ist per Default so vorbelegt, dass sie nur in sehr seltenen Fällen geändert werden muss.

View- und Content Setup

Um mit einem LargeText zusammen zu arbeiten, müssen sowohl das VisContent als auch das zugehörige View auf spezielle Weise initialisiert werden. Hierfür wird die Instancevariable holdsLargeText auf den Wert TRUE gesetzt. Ein LargeText muss das einzige Child des VisContent sein, sonst wird es eventuell nicht angezeigt.

Ein typisches Setup für eine View/Content-Kombination mit einem LargeText sieht so aus:

View DemoView
  Content = DemoContent
  vControl = HVC_SCROLLABLE
  initialSize = 400, 250
  ExpandWidth
  ExpandHeight

  holdsLargeText=TRUE

  ' nicht erforderlich, aber häufig verwendet
  defaultTarget
  defaultFocus
  targetable = TRUE
  viewAttrs = VA_CONTROLLED, 0  ' Setzen, wenn ein ViewControl 
                                ' verwendet werden soll
End OBJECT

VisContent DemoContent
  holdsLargeText=TRUE
  Children = MyLargeText
End OBJECT

LargeText MyLargeText
  text$ = "Ich kann ganz viel Text aufnehmen."
  fontID = FID_SANS
  fontSize = 14
End OBJECT


holdsLargeText

Die Instancevariable holdsLargeText initialisiert ein View bzw. ein VisContent Objekt so, dass sie mit einem LargeText Objekt zusammenarbeiten können.
Syntax UI-Code: holdsLargeText = TRUE 
     Schreiben: <obj>.holdsLargeText = TRUE | FALSE
 Objektklassen: View, VisContent

Die Instancevariable kann nicht gelesen werden, weil intern eine ganze Palette von Werten geändert werden. Dazu gehört, dass in den Instancevariablen viewAttrs (View) bzw. contentAttrs (VisContent) einzelne Bits gesetzt werden. Sie können diese Instancevariablen trotzdem "ganz normal" verwenden, da die Bits unabhängig voneinander behandelt werden. Ausnahme: die Instancevariable inputOptions des View sollten Sie nicht verändern.

LargeText Instance Variablen

LargeText Objekte arbeiten intern mit 32-Bit Koordinaten. Das hat Auswirkungen auf die Verwendbarkeit bzw. Bedeutung einiger geerbter Instancevariablen bzw. Handler-Parameter vom Typ WORD bzw. INTEGER (16 Bit).

  • Die von der VisTextClass geerbten Instancevariablen drawable, detectable, managed, visPosition und visSize werden nicht unterstützt, da sie entweder intern verwaltet werden oder vom Datentyp WORD sind.

  • Die für alle Klassen definierten word-großen Instancevariablen xPosition, yPosition, xSize und ySize liefern immer den Wert Null.

  • Die Parameter textLen und selectionLen der OnModified- und OnSelectionChanged- Handler sind vom Typ INTEGER und daher bedeutungslos. Sie werden immer mit dem Wert Null belegt.

approxSize

Die Instancevariable approxSize enthält die ungefähre Textmenge in Kilobyte, die zu erwarten ist. Der Wert ist nicht kritisch, er kann problemlos überschritten werden. Der Defaultwert beträgt 400 (Kilobyte) und sollte für die meisten Anwendungen ausreichend sein.
Syntax UI-Code: approxSize = numWert  
     Schreiben: <obj>.approxSize = numWert  
         Lesen: numVar = <obj>.approxSize
       numWert: Ungefähr zu erwartenden Textmenge in Kilobyte.
                Der Defaultwert ist 400. Verwenden Sie 10000 
                wenn Sie 10 MB oder mehr benötigen.

 
Hinweise

  • LargeText Objekte speichern ihren Text in einer von R-BASIC verwalteten temporären Datei. Da sowohl einige andere Objekte als auch GStrings temporäre Dateien benutzen, verwendet R-BASIC diesen Wert, um bei Bedarf eine weitere Datei anzulegen.

  • Wenn Sie den Wert 10000 (entsprechend 10 MB) verwenden, legt R-BASIC eine Datei exklusiv für dieses Objekt an. Damit kann der Text theoretisch bis 2 Gigabyte groß werden.

  • Es wird empfohlen, den Wert, wenn überhaupt, nur im UI-Code zu verwenden. Das Ändern von approxSize zur Laufzeit ist ein aufwändiger Prozess.

Hintergrundinformationen

Die folgenden Informationen sind für die normale Verwendung eines LargeText Objekts nicht erforderlich. Im Detail passiert beim Belegen der Instancevariablen holdsLargeText folgendes:

View-Objekt

Die Instancevariablen werden so gesetzt, als würde im UI-Code folgendes stehen:
  viewAttrs = VA_DRAG_SCROLLING, 0
  inputOptions = VIO_DONT_SEND_KBD_RELEASES
  focusable = TRUE
Außerdem wird in den viewAttrs das in R-BASIC nicht verfügbare Bit &h100 (im SDK: GVA_WINDOW_COORDINATE_MOUSE_EVENTS) gesetzt. Wenn Sie holdsLargeText zur Laufzeit auf FALSE setzen wird nur dieses Bit zurückgesetzt, die anderen Instancevariablen werden nicht verändert.

Hinweis: Zusätzliche viewAttrs können Sie im UI-Code oder zur Laufzeit an beliebiger Stelle setzen, da die Bits immer einzeln behandelt werden. Zusätzliche inputOptions sollten Sie nicht setzen.

VisContent-Objekt

Die Instancevariablen werden so gesetzt, als würde im UI-Code folgendes stehen:
  contentAttrs = CA_SAME_WIDTH_AS_VIEW, 0
  customManageChildren = TRUE
Außerdem werden in den contentAttrs die in R-BASIC nicht mit einer Konstante belegten Bits &h20 (im SDK: VCNA_LARGE_DOCUMENT_MODEL) und &h10 (im SDK: VCNA_WINDOW_COORDINATE_MOUSE_EVENTS) gesetzt.

Darüber hinaus werden weitere, in R-BASIC nicht verfügbare, Instancevariablen verändert. Wenn Sie holdsLargeText zur Laufzeit auf FALSE setzen werden sowohl die internen Instancevariablen zurückgesetzt, also auch die contentAttrs &h20 und &h10. Die anderen Instancevariablen werden nicht geändert.

Hinweis: Zusätzliche contentAttrs können Sie im UI-Code oder zur Laufzeit an beliebiger Stelle setzen, da die Bits immer einzeln behandelt werden. Beachten Sie, dass die oben genannten Bits der contentAttrs auch von R-BASIC aus verändert werden können.

^

Weiter...