| |
|
|
- Seite 1 - |
|
| { ... } = gui.* ( ...
Die Funktionsgruppe gui bietet Funktionen für die Grafische Benutzeroberfläche.
Keywords: Controls, Buttons, Eingabe |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| Textcontrol in Zelle erzeugen:
gui gui.text,[grid,x,y],"Hallo Welt" |
|
|
| |
|
|
|
| Hab die Kalkulation der Zellen nochmals überarbeitet.
Kann man das so schreiben und ist es halbwegs verständlich oder kann man das kürzen?
Hinweise zur Berechnung: Egal ob es sich um die Höhen oder der Breiten der Zellen handelt: Beim Anlegen eines Grids sind alle Zellen immer gleich groß - also Höhe und Breite sind "auto".
Definiert man eine Breite o. Höhe für alle Zellen sodass keine übrige Zelle bliebe als Kompensator für die tatsächliche Breite o. Höhe des Parent-Controls, dann gelten alle Breite o. Höhe -Angaben als "Verhältnis" zueinander. Hat ein Grid also 3 Spalten und setzt mal alle Spalten auf die Breite 100, dann werden alle Spalten gleich breit sein.
Hat die mittlere Spalte (also die 2.) die Größe 200, dann wird die mittlere Spalte doppelt so breit wie die beiden anderen Spalten. So kann dann z.B. statt 100,200,100 genauso auch 1,2,1 angegeben werden oder 1000,2000,1000. Sobald aber mindestens 1 Angabe auf "auto" steht, wird die betreffende Zelle sich strecken und alle anderen Zellen erhalten genau die angegebene Größe.
Haben mehrere Zellen keine Größenangabe, so werden alle Zellen mit Größenangabe genau auf die angegebene Größe gebracht und die Zellen ohne Größenangabe teilen sich den Rest gleich auf. Wäre ein Grid größer als sein Parent, was nur dann passieren kann wenn mindestens 1 Zellengröße "auto" ist und andere Zellengrößen addiert schon größer sind als das Parent, dann werden alle Zellengrößen zu gleichen Teilen herunterskaliert bis auf die genaue Passgröße des Parent-Controls. |
|
|
| |
|
|
|
HofK | ... habs sofort verstanden, ist voll ok und könnte viel schneller mein mit Android Studio den ganzen Vormitttag lang gebasteltes "schönes" Grid mit Text (und Buttons) implementieren |
|
|
| |
|
|
|
| Ja, das normale Prinzip von Android ist komplett anders und recht nervig - darum habe ich mir auch die Grids einfallen lassen.
Hab oben noch ein paar Beispiele eingekloppt:
Ein Grid auf gui.hwnd erstellen bestehend aus 3 Spalten und 3 Zeilen und das Handle des Grids in myGrid speichern:
var myGrid=gui(gui.grid,gui.hwnd,[3,3])
Ein 6x3 Grid erstellen in Zelle 2,2 vom Grid myGrid und das Handle des 2. Grids speichern:
var myGrid2=gui(gui.grid,[myGrid,2,2],[6,3])
In Zelle 3,1 vom ersten Grid ein Text-Control erstellen:
var myTxt=gui(gui.text,[myGrid,3,1],"Hallo Welt")
Die Höhe einer einzelnen Zeile bzw. der ersten Zeile vom ersten Grid auf 100 Pixel setzen:
gui gui.height,[myGrid,1],100
Alle 3 Höhen vom ersten Grid setzen auf 100 Pixel außer die Höhe der mittleren Zeile die sich automatisch ergeben soll:
gui gui.height,myGrid,[100,null,100] |
|
|
| |
|
|
|
| Hab mal das mit der Gravitation beschrieben:
Gravitation von Zellen definieren:
Zellen besitzen eine horizontale Gravitation, wobei die Gravitation auf den Inhalt der Zelle wirkt und nicht auf die Zelle selbst. Um die Gravitation einer Zelle zu setzen ist gui gui.gravi,[grid,x,y],Wert zu nutzen. Wert kann 1,2 oder 3 sein. 1 steht für links, 2 für mittig und 3 für rechts. Die Gravitation von Zelle 2,2 eines Grids setzen auf rechts+oben: gui gui.gravi,[myGrid,2,2],3 |
|
|
| |
|
|
|
| Neu: gui.button
var myButton=gui(gui.button,[myGrid,x,y],"ButtonText",myButtonProc)
Erstellt ein Button in Rasterzelle x,y auf myGrid.
myButtonProc ist eine selbstdefinierte Proc die 2 Parameter empfängt:
proc myButtonProc(long buttonHandle,long event)
In buttonHandle steht das Handle des Buttons, damit man für mehrere Buttons eine gemeinsame ButtonProc definieren kann. Natürlich kann jedem Button auch eine eigene ButtonProc zugewiesen werden.
Events:
0: Button ist gedrückt, Finger liegt auf 1: Button wurde losgelassen 2: Finger wurde weggezogen bzw. verschoben auf dem Button
Es werden niemals Events 0,2,1 ausgeworfen, entweder werden die Events 0,1 oder die Events 0,2 ausgeworfen, damit man einfach unterscheiden kann, ob vielleicht eine D&D-Operation oder einfach nur ein (erfolgreicher) "Klick" gemeint sind. |
|
|
| |
|
|
|
| Neu:
gui.text kann auch eine myButtonProc übergeben werden, sodass auch für reine Textcontrol Touchereignisse ausgewertet werden können!
var myText=gui(gui.text,[myGrid,x,y],"Text",myButtonProc)
Erstellt ein TextControl in Rasterzelle x,y auf myGrid.
myButtonProc ist eine selbstdefinierte Proc die 2 Parameter empfängt:
proc myButtonProc(long buttonHandle,long event)
In buttonHandle steht das Handle des TextControls, damit man für mehrere Controls eine gemeinsame ButtonProc definieren kann. Natürlich kann jedem TextControl auch eine eigene ButtonProc zugewiesen werden.
Events:
0: Button ist gedrückt, Finger liegt auf 1: Button wurde losgelassen 2: Finger wurde weggezogen bzw. verschoben auf dem Button
Es werden niemals Events 0,2,1 ausgeworfen, entweder werden die Events 0,1 oder die Events 0,2 ausgeworfen, damit man einfach unterscheiden kann, ob vielleicht eine D&D-Operation oder einfach nur ein (erfolgreicher) "Klick" gemeint sind. |
|
|
| |
|
|
|
| Neu:
gui.textcolor jetzt auch um die Schriftfarbe der Buttons zu setzen.
gui gui.textcolor,myButton,rgb(255,0,0) |
|
|
| |
|
|
|
| Hinweis: Grid-Zellen können keine Textfarbe besitzen da sie keinen Text zeigen. Wenn farbiger Text angezeigt werden soll, dann ein Textcontrol auf einer Grid-Zelle erzeugen und dem Textcontrol eine Farbe zuordnen.
Hinweis: Text-Controls können keine Hintergrundfarbe besitzen, aber die Grid-Zelle auf der ein Text-Control erstellt ist. Wenn für ein Text-Control die Option gui.bgcolor angewandt wird, dann wird sie umgeleitet um die Hintergrundfarbe der Grid-Zelle zu setzen. |
|
|
| |
|
|
|
| Neu: gui.bgcolor jetzt auch für Buttons! |
|
|
| |
|
|
|
| Neu:
Android hat Farbverläufe intern leicht gemacht sodass ich das an AndroidProfan weitergeben möchte.
Deshalb:
Farbverläufe für Hintergründe mit: gui.bgcolor
Mit gui.bgcolor kann nicht nur eine einzelne Farbe als Hintergrund definiert werden, sondern auch ein beliebig komplexer linearer Farbverlauf per Array:
[Winkel,[%,col],[%,col],...
Col ist mit der Funktion rgb(r,g,b[,a]) zu beziehen, % steht für einen Prozentwert long 0 bis 100.
Ausführlicher:
[WinkelInGrad,[ProzentWert,rgb(r,g,b [,a])],[ProzentWert,rgb(r,g,b [,a])],...]
Hinweis: Es können beliebig viele Abschnitte definiert werden, mindestens jedoch müssen 2 Abschnitte definiert werden. Startet der erste Abschnitt nicht bei Prozentwert 0, dann wird automatisch ein Wert für Prozentwert 0 eingefügt mit der selben Farbe wie die erste Farbe im Array. Endet der letzte Abschnitt nicht bei Prozentwert 100, dann wird automatisch ein Wert für Prozentwert 100 angehängt mit der selben Farbe wie die letzte Farbe im Array.
Winkel ist so zu verstehen: 0° zeigt nach oben, also 12 Uhr, 90° nach rechts (also 3 Uhr).
Beispiel für einen Farbverlauf für gui.hwnd, von oben nach unten, von schwarz nach weiß:
gui gui.bgcolor , gui.hwnd , [180 , [0,rgb(0,0,0)] , [100,rgb(255,255,255)] ]
|
|
|
|
| |
|
|
|
| Tolle neue Tolligkeit: <-- blinkt!
var myGrid=gui(gui.grid,gui.hwnd,[[100,null,100],[100,null,100]])
Siehe der 3 Parameter, der bisher nur so anzuwenden war: [X-Zellen-Anzahl,Y-Zellen-Anzahl] und wenn man dann die Breiten und Höhen der Zellen definieren wollte dann blieb bisher nur: gui gui.width,myGrid,[...
Nun kann man gleich beim Erstellen des Grids sein komplexes Layout definieren, einfach wenn man statt:
[X-Zellen-Anzahl,Y-Zellen-Anzahl] ein Array angibt:
[ [Breite,Breite,...] , [Höhe,Höhe,...] ] Aus der Anzahl der Einträge jedes Arrays wird die Anzahl der X oder Y Zellen bezogen und es werden gleich die Breiten und Höhen gesetzt. |
|
|
| |
|
|