Trick 70: FLEXoFlip
oder FlippoFLEX?
Flip per FLEX erzeugen
Aufgabe: Im Anzeigefeld mit FLEX einen zusätzlichen, anklickbaren
Flip
erscheinen lassen, wie
von Geisterhand.
Warum: Es ist nicht jedermanns Sache, in die Anzeigeparameter einzu-
greifen, um einen neuen Flip
einzubauen. Warum kann man nicht
eigene Flips auch mit FLEX
erzeugen und unter der Anzeige
als Sonderservice bei Bedarf
auftauchen lassen?
Lösung: Ein Trick reicht nicht, drei sind nötig.
1.
Der zentrale Trick ist der Befehl show +IV
Damit kann man den Inhalt der internen Variablen unter der Anzeige
aufscheinen lassen. Und wenn in der iV in dem Moment ein korrekt
aufbereiteter Fliptext steht, dann sieht er genauso aus wie ein
echter. Der Text muß dazu nur die richtigen RTF-Formatierungs-
anweisungen enthalten. Geben Sie mal ein:
x var "\\ul
HALLO\\ul0"\sho +IV
... denn \ul schaltet die Unterstreichung ein, \ul0 wieder aus.
2.
Das allein reicht noch nicht. Man muß in zwei Variablen, #uYi und
#uZi,
erstens den Fliptext und zweitens die Aktion bereitstellen.
Sagen wir, "Info zur Datenbank" soll als Flip erscheinen, blau und
unterstrichen, und soll die bekannte Funktion "Info zur Datenbank"
auslösen. D.h., es müßte der FLEX dbinfo.flx aufgerufen
werden. Dazu
braucht's ein paar #u-Variable, die man auch per FLEX herstellen kann.
So geht's:
(Zum Testen schreiben Sie mal den folgenden Text in eine Datei ff.flx
und geben dann ein: X ff )
-----------------------------------------------------
Text
$uy Info zur
Datenbank
Aufruf
$uz X dbinfo
Flip
erzeugen
perf flexoflip
end
Unterprogramm
:flexoflip
Text
$uy aufbereiten (Code 160 = Flip-Begrenzungszeichen)
var n 160
"\\ul\\cf2 " $uy "\\ul0\\cf1 " 160
und
anzeigen unter dem schon vorhandenen Text
sho +IV
$uy in
die nächste freie #uYi kopieren (dafür sorgt ~)
var $uy
asci
ins #uY~
$uz in
die nächste freie #uZi kopieren
var $uz
ins #uZ~
return
-------------------------------------------------------
3.
Das reicht aber auch noch nicht, wenn der Flip in jedem Fall sofort
bei der Anzeige eines Datensatzes aufblitzen soll! Er zeigt sich erst,
wenn der FLEX aktiviert wird - was aber eben nicht von allein passiert
und nicht aus den Exportparametern heraus veranlaßt werden kann.
Hier hilft das Konzept "autoflex" weiter (siehe h flex=autoflex).
Das einfache Rezept für diesen Fall ist folgendes: Schreiben Sie in
die Anzeigeparameter, am besten VOR die erste Zeile, die mit #
anfängt, diese Zeile
#nr "X ff!"
e"!" =X:
... wenn ff.flx der FLEX ist, um den es geht. Dann wird ff.flx immer
sofort im Anschluß an das Erzeugen der Anzeige ausgeführt.
Wenn dasselbe auch bei F5 (Umschaltung auf Kategorieanzeige) passieren
soll, dann muß diese Zeile auch in den Abschnitt der
Parameterdatei,
der mit #-( beginnt. Sie können in Ihren Autoflex
ansonsten noch
ganz andere Dinge einbauen, das ist klar - er ist ein FLEX wie jeder
andere.
Anzeigeparameter - welche Datei das in Ihrem Fall ist? Mit X
dbinfo
sehen Sie es.
Aber mit "display" kommt der Flip nicht!?
Das ist richtig. Der FLEX-Befehl disp läßt zwar
die Anzeigeparameter
abarbeiten, aber den Autoflex nicht, denn das geht dann nicht.
Wenn man aber "disp" gibt, ist man ja sowieso in einem FLEX und
kann die nötigen Befehle gleich dort mit einbauen. Oder als
nächste
Zeile nach dem "disp" den Befehl "exec ff", falls der FLEX nach dem
"disp" sowieso endet. Oder im Anschluß, wenn der eigene FLEX
fertig
ist, zweimal F5 drücken.
Vorsicht Umlaute:
Hier ist angenommen, daß der FLEX in ANSI geschrieben ist, z.B.
mit Notepad. Wichtig ist das nur, wenn Umlaute vorkommen.
Wenn man in ASCII schreibt, dann muß das Unterprogramm so
beginnen:
var $uy
ansi
ins $ux
var n 160
"\\ul\\cf2 " $ux "\\ul0\\cf1 " 160
sho +IV
$uy in
#uYx kopieren
var $uy
ins #uY~
...
Hinweis:
Daß mit \cf2 auf blau umgestellt wird, ist nicht
selbstverständlich.
Es beruht auf den Farbeinstellungen in disphead.rtf. Hat man diese
verändert, sind die Farbnummern evtl. andere.
Fortgeschrittene wollen mehr:
Der Flip soll OBERhalb des Anzeigetexts erscheinen!
Dann muß das Unterprogramm so aussehen:
:flexoflip
Anzeige speichern in body.rtf
file body.rtf
Mini-RTF-Datei mit dem Flip erzeugen:
open x
head.rtf
wri "{ " 160
"\\ul\\cf2 " $uy "\\ul0\\cf1 " 160 "\\par }"
close x
und
anzeigen ueber dem vorhandenen Text
help head
help +body
$uy in
die nächste freie #uYi kopieren (dafür sorgt ~)
var $uy
asci
ins #uY~
$uz in
die nächste freie #uZi kopieren
var $uz
ins #uZ~
return
Trick Nummer 70.4 ist das Laden von zwei Hilfetexten untereinander,
wobei hier der erste schnell mal eben erstellt wird, der zweite
ebenfalls, aber als Kopie der momentanen Anzeige mit "file body.rtf".