24. Apr. 2011

for english readers

Dynamische Etiketten

noLabel

Sehe ich dddd@mettre.de, weiß ich, das ist eine eMail-Adresse. Eine Telefon-/Fax- und Mobil-Nummer erkenne ich meist ohne Etikett am Feld, dito in den meisten Fällen bei Vorname, Nachnamen, Firma und Adresse. Ich könnte mir in vielen Fällen das Etikett am Formularobjekt sparen und damit wertvollen Platz auf dem Formular gewinnen.

Ist noch kein Wert eingegeben, geht es nicht ohne Etikett: was soll jetzt hier rein?. Ich brauche dynamische Labels.

searchLabel

Sehr schön sind die Etiketten im Hintergrund wie in der Standard-Suche oder im OSX-Adressbuch bis zum Leoparden. Hätte ich gerne überall.

    Doch die Nachteile:
  • man sieht sie während der Eingabe nicht
  • müssen im Editor zu jedem Feld angelegt sein
haben mich bisher davon abgehalten. Es ist mir zu viel Arbeit. Ich brauche was anderes. Es sollte
  • nur ein Objekt sein, das gepflegt werden muß
  • während der Eingabe sichtbar bleiben
  • nachträglich mit wenig Aufwand einzurichten sein.

withLabel

Ich habe mich für ein Etikett rechtsbündig auf dem Eingabefeld entschieden. Im Bild rechts wird die Eingabe der Handy-Nummer erwartet.

dynFormvar

Das Etikett ist eine dynamische Form-Variable, also eine unbenannte Variable mit Objektnamen. Die Formatierung – Schrift, Schriftfarbe, Transparenz – habe ich im Formular-Editor festgelegt.

In der Formular-Methode wird im Event On Getting Focus die Methode Label_Helper ("Label_Display"; Focus object; 0; "helpText_Obj") aufgerufen und das Label für das Eingabeobjekt angezeigt. Entsprechend in On Losing Focus das Etikett wieder ausgeblendet Label_Helper ("Label_Hide"; Focus object; 0; "helpText_Obj")

    Die Parameter im Detail:
  1. = was soll getan werden ("Label_Display" oder "Label_Hide")
  2. = für welches Objekt (oder über Object Get pointer ermitteln)
  3. notEmptyWithLabel
  4. = Longint (0 nur für leere Objekte, 1 für alle Objekte*)
  5. = Objektname der dynamischen Formvariable
  6. = Text des Etiketts.
Ich kann mir den fünften Parameter (Text der angezeigt wird) sparen, da ich auf mein Data-Dictionary zugreife.

Meine Experimente mit außerhalb des Eingabefeldes angezeigten Etiketten, sei es als Label oder als gelb hinterlegter Hilfetext, führen sehr schnell zu Kollisionen mit anderen Objekten oder sie reichen über den Rand des Formulars hinaus. Es mir zu viel Arbeit und sieht nicht gut aus.

Rechtsbündig im Feld ist der beste Kompromiss: wenig Arbeit und sieht gut aus. Für boolsche Felder zeige ich das Etikett nicht an, da ich dort sowohl in der Checkbox wie in Radio-Buttons die Etiketten bereits als Teil des Objektes darstelle.

* Ein boolscher Parameter würde reichen aber mir fällt bestimmt noch etwas ein

Sie möchten den Sourcecode haben? Kein Problem! Überweisen Sie, was es Ihnen wert ist auf mein PayPal-Konto: info@mettre.de. Was ist denn üblich?

lieber auf deutsch

Dynamic Labels

noLabel

It's obvious that something like dddd@mettre.de is an email-address, or how phone-/fax-/mobile-numbers look like. Same is true for most names and addresses. So I could save myself a lot of real estate on forms, not having every field labeled.

But it won't work if the field is empty and it helps while entering data. I need dynamic labels.

searchLabel

I very much like lables like the search-label underneath the enterfield for the search. Similarly how addressbook of OSX displays the labels. I'd like to have that kind of purposedriven labels everywhere.

    Disservices are:
  • you don't see those labels while entering data
  • I have to create objects for every enterable field.
and that kept me from implementing. It's too much work. I need something different. It should be
  • only one object to be managed
  • visible during data-entry
  • implementable later with few keystrokes.

withLabel

I've settled with labels right-justified on top of the entry-field. The picture on the right displays the label Handy for the mobile phone-field.

dynFormvar

The label is a dynamic form-variable, that is a unnamed variable with a unique objectname. The display characteristics – font, color, transparency – are set in the form-editor.

The formmethod-event On Getting Focus triggers Label_Helper ("Label_Display"; Focus object; 0; "helpText_Obj") and displays the label as shown. Analogical in On Losing Focus the label is hidden like this: Label_Helper ("Label_Hide"; Focus object; 0; "helpText_Obj")

    The Parameters in detail:
  1. = what shall be done ("Label_Display" or "Label_Hide")
  2. = which object has the focus (or found via Object Get pointer)
  3. notEmptyWithLabel
  4. = Longint (0 only show if object is empty, 1 show for all objects*)
  5. = objectname of the dynamic form-variable
  6. = text of the label.
I can save myself the 5th parameter (which text to display) because this is handled by my Data-Dictionary.

First I experimented with labels outside of the entry-field. But this didn't work out because of collisions with other objects or the label reaching outside of the formborders. That was too much work and didn't look good.

Right-aligned on top of the field is the best solution yet. Not much work and looking good. I don't display labels for boolean objects, because those usually display the label as part of the object, both checkboxes and radio-buttons.

* a boolean parameter should fit, but I'll find further options later, I suppose

You want to have the source-code? No problem! Send a descend amount of $ or € to my PayPal-account: info@mettre.de. Finding out how much?