[Allegro] Trick 70: FLEXoFlip oder FlippoFLEX - Flips per FLEX erzeugen

Bernhard Eversberg ev at biblio.tu-bs.de
Mi Mär 5 08:44:48 CET 2008


Trick 70:  FLEXoFlip oder FlippoFLEX?
            Flips 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".





Mehr Informationen über die Mailingliste Allegro