Summary

Got some feedback to show my current designs concerning listboxes. Here you are!


Oberflächen in 4D sind für mich ohne Listboxen nicht mehr aktuell. Im folgenden einige Screenshots aus dem aktuellen Betrieb.

Hierarchische Listboxen

Die meisten Listen haben mehr Einträge als auf eine Bildschirm-Seite passen. Dann verwende ich hierarchische Listboxen und klappe die älteren Einträge zu.

Zwischensummen bietet 4D nicht per se für Listboxen an. Auf die faule Art setze ich Zwischensummen über den zu summierenden Listenteil als formatierten Text. Wie im Screenshot die Kalenderwoche und dazu die Summe (∑) und die Relation zum Durchschnitt.

Habe ich die Zwischensummen nicht sowieso parat, laufe ich zweimal durch – bis wenige tausend Zeilen fällt das niemandem auf.

Den Spalten in der Hierarchie gebe ich kein Zebra-Muster, denn Hierarchie-Spalten sind nie editierbar.

Unicode im Kopf


Verwende ich boolesche Spalten oder solche mit Checkboxen, dann will ich den Breitengewinn nicht im Kopftext konterkarieren.

Dann suche ich mir ein Unicode-Zeichen. Werde ich fündig setze ich es im Kopf ein (:xliff:uniName). Nicht vergessen dem Kopfbutton einen Hilfetext zuzuweisen – ich vergesse die Bedeutung des Symbolzeichens schnellstens.

Multiline und Multistyle

Seit ich der Listbox die Zeilenhöhe in Zeilen statt in Pixeln angeben kann, gefallen mir mehrzeilige Listboxen noch besser.

Im Screenshot sind zwei mehrzeilige Listboxen zu sehen.

Die linke ist dreizeilig. Erste Spalte ist ein Bild-Array und die zweite ein Multistyle-Text. Nicht sichtbar eine dritte mit der Datensatzkennung. Klick auf eine andere Zeile übergibt die Datensatzkennung an die Subform im rechten Teil. Die Subform sichert den aktuellen Datensatz und lädt den neuausgewählten aus der Liste links.

Die rechte Listbox ist zweizeilig. Die Inhalte sind oben ausgerichtet. Der Zähler in Spalte 1 hängt oben und die zweite Spalte bricht automatisch um. Die dritte Spalte ist so breit, daß kein automatischer Umbruch nötig wird und mein Return \r PLZ und Ort in fett unter die Straße setzen kann.

Listboxen umgestalten

Ich brauche zweierlei Sortierung in der Listbox: die eine nach Service-Techniker und die andere nach Service-Datum.

Mir als Programmierer naheliegend ist die Suche nach den 4D-Befehlen und dann per Code umbauen. Also Hierarchien auflösen, Spalten verschieben, Sichtbarkeit von Spalten justieren, Farben umstellen, …

Vollkommener Quatsch. Das artet in Arbeit aus, braucht zig Zeilen Code und wenn eine bessere Darstellung gebraucht wird, fange ich von vorne an.

Stattdessen lege ich für jede Darstellung ein Duplikat der Listbox an, gebe dieser einen anderen Objektnamen und verschiebe Spalten, färbe neu ein, mache sichtbar/unsichtbar im Formular-Editor. Per Code bewege ich das benötigte Listbox-Objekt an den vorgesehenen Listbox-Platz und die nicht benötigte weit nach rechts unten im Formular. Nur die Sichtbarkeit an- und ausschalten ist nicht so gut, das blitzt und mancher Rollbalken bleibt hartnäckig.



Hierarchic Listboxes

Most lists contain more rows than can be fitted on screen. In this case a hierarchical listbox is helpful, collapsing older data by default and leaving subtotal-level visible.

Subtotals are a missing feature of 4D listboxes. My lazy subtotals are on top of the rows to be subtotaled. I use formatted text for the purpose. The screenshot shows year-of-week (KW), the sum for the week (∑) and the relative value im comparison to an average.

If I don’t have the subtotals available before filling the rows I need to loop twice. Up to a few 1000 rows nothing to be concerned of.

Those columns building the hierarchy do not get the zebra-treatment. They are not editable, which should be visible.

Unicode im Kopf


In case of boolean columns or those containing checkboxes the wording for the header eats up all the saved width. Makes no sense.

Then I look for a Unicode-character instead. If there is one, I use that instead (:xliff:uniChar). Shouldn’t omit the help-tip then – even myself forgets what that symbol was meant to symbolize.

Multiline and Multistyle


Defining row-heights in lines is much more efficient when using multiline listboxrows, than defining by pixel which are of different value depending on fonts and OS deployed.

This screenshot shows two muliline listboxes.

The left one is a 3-liner. First column contains a picture-array and the second one multistyle text. Invisible is a third one containing the record-ID for the row. Changing selection sends that record-ID to the subform shown at the right. The subforms saves the current record and loads the newly selected one from the yellow-white listbox.

The grey-white listbox is a 2-liner. Their content is top-aligned, obvious from the counter-column. The second column does line-breaks automatically. The third one is wide enough not to trigger automatic line-breaks. I build two lines by code putting bold zip and city underneath the street-address.

Reorganize Listbox


I need two kinds of listbox-sorting: one by service-technician and the other one by service-date.

Being the programmer I am I’d be checking the manual to reorganize by code. Clear the hierarchies, move columns, set columns visible/unvisible, re-color and build the new hierarchy, …

Completely nonsens. This gets into real work fast. Needs umpty lines of code and if not nice enough, I’ll start from scratch again.

Instead I duplicate the listbox in form-editor. Do my reorganisation and UI-changes and attach a meaningful objectname to both variants. Still some code needed to move the needed one into the visible part of screen and the other one to the very right and far down into land of invisibility. Just changing the visibility of the two copies is less complacent, too much flickering and sometimes scrollbars are mulish.