Trick 69:
Schiebereien mit der Maus
Feldinhalt manuell
sinnvoll sortieren durch Verschieben mit Maus
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