4.10.9 VisText und LargeText
Für alle anderen Zwecke sollten Sie die GenericClass-Objekte Memo oder InputLine verwenden.
4.10.9.1 VisTextVisText-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
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.
visTextFrameDie 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:
visTextFrameOptionsDie 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:
drawableDie 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
detectableDie 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
managedDie 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
visPositionDie 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)
visSizeDie 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, yPositionDiese 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, ySizeDiese 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 LargeTextLargeText Objekte bringen nur eine einzige eigene Instancevariable mit.
Diese Variable ist per Default so vorbelegt, dass sie nur in sehr seltenen Fällen geändert werden muss. View- und Content SetupUm 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
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
holdsLargeTextDie 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 VariablenLargeText 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).
approxSizeDie 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
HintergrundinformationenDie folgenden Informationen sind für die normale Verwendung eines LargeText Objekts nicht erforderlich. Im Detail passiert beim Belegen der Instancevariablen holdsLargeText folgendes:View-ObjektDie 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-ObjektDie 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.
|