[Allegro] a99: Flips und verborgener Text

Thomas Berger ThB at Gymel.com
Sa Jul 14 11:15:35 CEST 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lieber Herr Eversberg, liebe Liste,

Seit ich vor einigen Jahren meinen Testrechner von Windows'95 auf XP
umgestellt habe, hatte ich mich nicht mehr systematisch mit den
Faehigkeiten des RichEdit-Controls des a99-Anzeigefelds
auseinandergesetzt. Inzwischen scheint ja z.B. Folklore, dass das
Fenster Unicode "kann" (und daher elaborierte Fontumschaltungen
zwischen verschiedenen 8bit-Codierungen eigentlich ueberfluessig sind).

Eine gute Zusammenfassung der Feature History habe ich im Blog eines
Microsoft-Mitarbeiters gefunden:

http://blogs.msdn.com/murrays/archive/2006/10/14/richedit-versions.aspx

Klar ist damit:
- - Windows '98 und besser kommen mit RichEdit Version 2.0 und
  unterstuetzen das TOM (Text Object Model), das recht gut dokumentiert
  ist, damit sollten klickbare Inhalte eigentlich keine Zauberei mehr
  sein.

[- Spannend: XHTML-Unterstuetzung ab Office 2003]

- - Windows 2000 und besser kommen mit dem Control Version 3.0 oder neuer
  und unterstuetzen z.B. UTF-8 RTF, und verborgenen Text:

Traditionell bestehen die a99-Flips ja aus Paaren von Text und
Flip-Kommando in Anwendervariablen #uY<x> und #uZ<x>. Probleme dabei
sind:

1. entsprechender Speicherbedarf im Hintergrundspeicher

2. Gleicher (manchmal sogar nur aehnlicher) Anzeigetext (etwa
   Personenname) soll zu unterschiedlichen Aktionen fuehren, beim
   Klick wird etwas "falsches" Ausgeloest
Abhilfe => Winzig und ungefaerbt (oder verborgen?) formatiert eine
   eindeutige Nummer zum aktiven Text ergaenzen. Ganz unsichtbar
   scheint das aber nicht zu gehen.

3. Inhalte (etwa Bandzaehlungen) mit eckigen Klammern sind
   problematisch, da die Klammerung einen eigenen Flip-aktiven Bereich
   definiert.
Abhilfe => fuer die Anzeige durch runde Klammern ersetzen (vorher
   ggfls. analysieren, ob die eckigen Klammern *das Ganze* umschliessen)
   und hoffen, dass der Font so schlecht ist, dass es nicht auffaellt.

4. Mehr als ca. 206 Flips sind nicht drin (ein reales Problem etwa
   bei allegro-HANS, wo es fuer Stammbuecher manchmal eine dreistellige
   Zahl von Unteraufnahmen gibt, die alle per Flip ansteuerbar sein
   sollen und verlinkte Verfasser haben)
Abhilfe => in Ausl.flx und fnam.flx angewandt, auf dem Anwendertreffen
von Herrn Eversberg in Erinnerung gerufen: *Einen* aktiven Text mit
Aktion, die mittels "var zc" den Kontext des geklickten Inhalts selber
analysiert.

Ich wollte diese Idee fortentwickeln und vor jeden ehemals aktiven
Text ein diskretes klickbares "->" setzen, dahinter dann als verborgener
Text "{\v ...}" formatiert in einer eigenen Klammerung (zum
wiederfinden: "<?< ... >?>" das Flip-Kommando, das sonst nach #uZ~
kaeme.

Bei Ausloesung mit F2 funktioniert dies gut ("var zc" liefert in #uZC
einen Ausschnitt der aktuellen Zeile mit klar erkennbarer Marke "__"
und daran anschliessend formatierungsunabhaengig allen Text, also
auch das Flip-Kommando in seiner Klammerung.

Beim Doppelklick funktioniert es aber nicht. Zu beobachten sind die
merkwuerdigsten Phaenomene, auch Aufhaengen von a99 und Abstuerze.
Auffaellig ist, dass bei Anwesenheit von Verborgenen Text der Cursor
beim Klick die Tendenz hat, hinter den auf die aktuelle Position
folgenden verborgenen Text zu springen. Bei den Abstuerzen z.B. zu
beobachten ist vorausgehend ein Flackern (Higlight an/aus) des darauf
folgenden Wortes.

Mit folgender Modifikation an der d-1.apr kann man diverse Effekte
schoen studieren:
In #(s  (Aufbereitung von Schlagworten)

vier Zeilen einschieben:

#-&
...
#usw C e";" e"_" F" " p{ t72 } P{ t104 }

#nr p"XXX!" e"!" =Yz
#nr p"x var zc\mess flip!" E"!" =Zz
#usW P{"1>?>}" t72 "XXX" t104 "..."} p{"...{\v <?<"}
#usW P{"2>?>}" t72 "XXX" t104 "..."} p{"...{\v <?<"}

#usw +& b";" f" " =sw
#)s


Es entsteht dann hinter den klickbaren Schlagworteintragungen
noch Text ... XXX ... XXX ..., wobei *vor* den XXX noch
verborgener Text steckt.


Bei einer Schlagwortzeile funktioniert Klick auf das zweite XXX
korrekt, Klick auf das erste XXX loest hingegen den Flip fuer
den Original-SW-Eintrag aus.

Bei Datensaetzen mit zwei Schlagwortzeilen loest Klick auf ein XXX
eine Endlosschleife mit staendig auf- und zuklappenden Indexfenster
aus, d.h. der zum Original-Eintrag gehoerende Flip wird immer und
immer wieder ausgeloest.

Bei Datensaetzen mit drei Schlagwortzeilen ditto, allerdings mit
rueckstandslosem Verschwinden von a99 nach knapp einer Sekunde.

Mein Eindruck ist, dass dies keine Probleme des RichEdit-Controls sind,
sondern solche der Verarbeitung der Callbacks (Notification events),
insofern moechte ich die Entwicklungsabteilung bitten, sich die Sache
einmal genauer anzusehen.

viele Gruesse
Thomas Berger

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFGmJQ3hKFJT0F1FsoRAj/dAJ4uZfFzwMBP8F06zdP9GweI68NK6ACdFt6o
YDN/MHsD/G5/UfVkfKSiZ3I=
=MWWf
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste Allegro