[Allegro] Trick 69: Feldinhalt komfortabel manuell ordnen

Bernhard Eversberg ev at biblio.tu-bs.de
Di Mär 4 08:59:59 CET 2008


Trick 69:  Schiebereien mit der Maus
            Feldinhalt manuell ordnen

Aufgabe: Im Feld #31 stehen 25 Schlagwörter, mit ; getrennt.
          Sieht ja chaotisch aus, Schnell mal eben sinnvoll umordnen!

Warum: Alphabetische Ordnung in einem Feld (s. Trick 56) ist leicht
        herzustellen, seit es den FLEX-Befehl  sort  gibt.
        Aber "sinnvolle Ordnung"?
        Mit Cut&Paste kann man das eine oder andere Schlagwort an
        eine andere Stelle verschieben, auf die Dauer ist das aber
        zeitraubend. Kann man sowas nicht heutzutage auch mit der Maus
        machen - wie in jedem vernünftigen Programm einfach rauf und
        runter verschieben oder so?

Lösung:
Genau das kann man machen, Und zwar mit aresqa! Vermutlich ist es
wenig bekannt: wenn man eine aresqa-Liste vor sich hat, kann man
jede Zeile mit der Maus ergreifen und beliebig verschieben. Sie wird
dann VOR diejenige Zeile geschoben, auf die man zeigt, im Moment des
Loslassens der linken Maustaste.

Prima, aber wie kriegt man den Feldinhalt von #31 (oder was immer es
sei) in eine aresqa-Liste? Und von da wieder zurück?
Man muß dafür sorgen, daß die zu ordnenden Elemente durch Zeilenwechsel
(Codes 13 10) getrennt sind. Das ist mit einer lokalen Ersetzung zu
lösen, aber es gibt subtile Klippen zu umschiffen dabei.
Damit es unter allen Umständen klappt, haben wir ein Unterprogramm
gemacht, das man leicht aufrufen kann. Als Vorbereitung muß man
den zu ordnenden Inhalt in  $fu  so bereitstellen, daß zwischen den
Elementen die Zeichenfolge %%% steht. Das Ergebnis kriegt man in $fs
zurück und kann die %%% wieder entsprechend zurückumwandeln.
(Warum %%%? Jede andere eindeutige (sonst nicht vorkommende) Zeichen-
folge würde es auch tun, also warum nicht diese?)
SonderBonus: In der aresqa-Liste kann man sogar jede Zeile bearbeiten:
einfach Balken drauf, Enter, Zeile bearbeiten, Enter.

Damit geht es dann folgendermaßen (statt #31 das Feld, um das es
bei Ihnen geht):

var #31
ins _; _;_
ins _;_%%%_
ins $fu
   Unterprog. f. manuelles Ordnen aufrufen:
perf feld-mord
var $fs
ins _%%%_; _
ins #31
...

include fsort.inc

---------------------------------------------------------------------

Hier ist die neue Unterprogrammdatei:
http://websvn.allegro-c.de/index/UBBS-Quelltexte/allegro/standard/flex/fsort.inc


Damit sich's aber lohnt, ist in  fsort.inc  auch gleich noch ein
Unterprogramm für das alphabetische Sortieren mit drin. Man ruft es
auf mit  perf feld-asort.

Und wie sieht es aus, das Unterprogramm  :feld-mord  für das
manuelle Ordnen? Gar nicht lang:

:feld-mord
mes Zeilen mit Maus verschieben, dann Liste mit OK speichern
var $fu
ins _%%%_^M^J_
   Liste zeigen, Nutzer kann sie bearbeiten
aresqa
   Wurde Esc gegeben? Dann $fu in $fs kopieren
if "" var $fu;ins $fs;return
   Bearbeitete Liste steht in aresqa.lst
var Faresqa.lst
ins _^M^J_%%%_
var (F"% ")
ins $fs
del aresqa.lst
return





Mehr Informationen über die Mailingliste Allegro