[h1]Verwendung von Propertys für komplexe Auswahlbelegungen - Teil 1[/h1]
Als Abwandlung von Phils altem Tip mit austauschbaren Menüpunkten hier eine recht felxible und einfach zu Erweiternde Variante.
Die Methode ist immer dann gut wenn man mehreren Strings die selben Werte zuweisen will.
Ich versuch es so gut wie Möglich zu Beschreiben, es ist aber schon etwas Abstrakt und zwei Ecken gedacht
[h1=Header]Anwendungsbeispiele[/h1]
Mögliche Anwendungen
- Widgetauswahlen
- Menüs die nicht Skriptbasiert sind
- Farbenauswahlen
- Caseauswahlen
[h2=SubHeader1]Farbauswahl[/h2]
Der gängige Weg wäre ja jetzt eine Liste mit den Farben zu erstellen die man definieren will. Sei es nun eine Gruppe von Buttons oder ein Listcontainer.
In der Art
- Hintergrund
- Textfarbe
- Schatten
- Flagfarbe
- usw..
Anhand des Focus oder was auch immer dann entweder für jede zu definierende Farbe eine Auswahlliste mit Farben, oder eine "Große" mit etwas in der Art:
<onclick condition="xxx">Skin.SetString(Hintergrund,ffe5f2f7)</onclick>
<onclick condition="xxx">Skin.SetString(Textfarbe,ffeef2f7)</onclick>
<onclick condition="xxx">Skin.SetString(Schatten,fffff2f7)</onclick>
usw..
Das kann nun je nach Umfang extrem Aufwendig sein, will man z.B. ein Menü fürs Home so erstellen wäre das hunderte Eintrage und Klicks.
Bei 20 Farben für 5 verschiedene Farbedefinitionen aber auch schon 100 Klicks mit Condition oder 5 identische Listen mit Farben die man alle
auch "Pflegen" muss wenn sich eine Farbe ändert.
Mit Conditions müssten alle 20 Klicks erweitert werden wenn eine Farbdefinition dazu kommt und es 6 wären..
[h2=SubHeader2]Die Propertys[/h2]
So, hier kommen nun Propertys ins Spiel..
Propertys sind ja nicht dauerhaft gespeichert Strings wenn man so will. Das die sich direkt im Speicher befinden muss nichts aus der guisetting erst Abgefragt werden.
Dementsprechend kann man hier auch dutzende verwenden ohne das es merklich zu Verzögerungen kommt bei Klicks.
Aber zurück zum Beispiel...
Wir haben ja 3 Farben zu besetzten. Also eine Liste mit clicks die zur Auswahl an Farben führt. Hier setzten wir nun gleich das Property "TextcolorString" mit.
In das Property schreiben wir jeweils den Namen des Strings für die Farbe.
"skinsettings" ist in dem Fall das Fenster in dem das Property gesetzt wird. Das kann auch die ID eines Custom Windows sein, muss dann aber zur Sicherheit
mit in den Property Aufruf Window(xxx).Property. Es sollte Theoretisch solange man im selben Fenster ist auch ohne gehen, schadet aber auch nicht wenns
trotzdem dabei steht.
SetFocus würde dabei zur Farbenliste führen..
<onclick>SetProperty(TextcolorString,Hintergrund,skinsettings)</onclick>
<onclick>SetFocus(9036)</onclick>
Und jetzt kommt der eigentliche Unterschied
Da nun der Stringname Variabel ist und sich in einem Property befindet, müssen wir nur noch in der Auswahlliste,
in diesem Fall Farben in einem Klick den String mit der Farbe füllen.
<onclick>Skin.SetString($INFO[Window(skinsettings).Property(TextcolorString)],ffe5f2f7)</onclick>
Der selbe click in einer Farbe wird nun bei der Auswahl "Hintergrund" umgesetzt zu
bei Auswahl "Textfarbe"
usw..
Tip
Für ganz Faule, oder die die es als Text Darstellen, könnte man mit
<label>$NUMBER[ffe5f2f7]</label>
<onclick>Skin.SetString($INFO[Window(skinsettings).Property(TextcolorString)],$INFO[System.CurrentControl])</onclick>
noch den zu schreibenden Wert aus dem aktuellen label ziehen. Dann würden alle clicks auch noch gleich aussehen!
[h2=SubHeader3]Der Aufruf[/h2]
Der Aufruf der Farbe über eine Variable für den Skin wäre mit Strings dann nur noch:
<variable name="AC_value_textcolor_light">
<value condition="!IsEmpty(skin.string(Hintergrund))">$INFO[skin.string(Hintergrund)]</value><!-- color -->
<value>TextColorLight</value><!-- nocolor -->
</variable>
Ist die Farbe nicht gesetzt wird ein Definierte Wert aus der colors.xml verwendet.