| |
|
|
| §60 - GUI, Ausgaben, Zeichnen und Farben
GUI-Befehle, Funktionen und Erläuterungen zur Arbeitsweise von Infinity-Profan mit Fenstern und Controls.
|
|
|
| |
|
|
|
H.Brill | KompilierenMarkierenSeparieren Wäre es da nicht besser, die Konstanten left, right, top und bottom OHNE " " zu implementieren ? KompilierenMarkierenSeparieren Die " würde ich an deiner Stelle ausschließlich den Stringliteralen bzw. Stringvariablen zuordnen. Es könnte ja mal durchaus sein, daß man mit den Konstanten rechnen will : z.B. : left + 10 das dann das Menü 10 Pixel neben dem linken Rand plaziert.
Ich glaube, das führt sonst früher oder später zu Verwirrungen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 18.01.2015 ▲ |
|
|
|
|
| Tatsächlich wirds eine menge Konstanden geben, schau mal am Beispiel arr: [...]
1: sortiert das Array numerisch 2: sortiert das Array alphanumerisch 3: kehrt die Reihenfolge der Elemente um (reverse)
Da wird man dann auch schreiben können:
a=arr(arr.sortnum,[10,30,20])
oder
a=arr(arr.sort,[10,30,20])
oder
a=arr(arr.reverse,[10,30,20])
Oder am Beispiel fattr: [...]
0: Größe der Datei oder -1 wenn nicht existiert oder -2 wenn Verzeichnis (selbe wie fattr(datei)) 1: Datei oder Verzeichnis existiert 2: ist eine Datei 3: ist ein Verzeichnis 4: ist "versteckt"/ hidden 5: ist lesbar, Ausleserecht 6: ist beschreibbar, Beschreiberecht 7: ist ausführbar, Ausführungsrecht 8: Zeitpunkt letzte Änderung als Unixzeitstempel
Wirds dann geben:
fattr(fattr.exists,"datei") fattr(fattr.isfile,"datei") .isdir .hidden .canread .canwrite .canexecute .lastmodified
Insofern wäre es dann auch:
createmenu(createmenu.left,createmenu.top)...
aber bei CreateMenu bin ich mir sowieso noch nicht ganz sicher obs denn so heißen soll. Da bin ich quasi noch nicht angekommen. |
|
|
| |
|
|
|
H.Brill | Danke für die Info. War noch nie so mein Ding, daß auch sowas mit Profan geht. Da graust es mich sogar als alter DOS-Programmierer : KompilierenMarkierenSeparieren Da wandelt Roland ja intern um. Würde ich auch nie so für meine Programme verwenden. Ich halte mich da lieber an die Konventionen der Datentypen und verwende sie auch dementsprechend.
Mag zwar hilfreich für absolute Einsteiger sein, aber man sollte dennoch von Anfang an den richtigen Umgang mit den Datentypen lernen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 18.01.2015 ▲ |
|
|
|
|
| AndroidProfan macht es etwas anders, hat imho aber auch eine komplexere Betrachtung der Variablen denn deren Typ darf sich ständig ändern.
So kannst Du da:
var a="10" //hier ist a string a=5.5 //hier float
bei print 10+"20" kommt 1020 raus, ebenso bei print "10"+20, bei print 10+20 natürlich 30
So gesehen wandle ich nichts um sondern hebe auf den kleinstmöglichen Typ in der Reihenfolge:
null bool long float string array
Darum ist dies auch eine Fließkommazahl:
print 5+10.5
istgleich 15.5
und dies aber eine Fließkommazahl plus String
print 5+10.5+"test"
istgleich 15.5test
Und dies:
5+10.5+"test"+10+3.3
ergibt:
15.5test103.3
Versuche also von links nach rechts den Typ kleinstmöglich zu halten. |
|
|
| |
|
|
|
E.T. |
5+10.5+"test"+10+3.3 ergibt: 15.5test103.3
Und warum nicht 15.5test13.3 ?? |
|
|
| XProfan X2Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 18.01.2015 ▲ |
|
|
|
|
HofK | Test ist erster string von links, ab da string |
|
|
| |
|
|
|
| @E.T: Weil "test"+10 "test10" ergibt und "test10"+3.3 ergibt "test103.3". Es wäre imho nicht richtig wenn ich mal von links und mal von rechts rechne. |
|
|
| |
|
|
|
| Ich schätze ich habe mir jetzt ein tolles Konzept für die Positionierung, Anordnung und Ordnung von Controls und für das "Bildschirm-Design" einfallen lassen.
Meine Idee: "The Grid", das Raster! (Klar, Tron...): Man erzeugt ein Raster-Control mit beliebig vielen Zeilen und Spalten und kann Raster-Controls wiederum auch in Raster-Zellen erzeugen und jede Raster-Zelle hat eine eigene "Gravity".
Man stelle sich z.B. ein 9er Raster vor:
XXX XXX XXX
Jedes X steht für eine Raster-Zelle.
Möchte man nun ein Design das z.B. den Bildschirm vertikal teilt und oben aber 3 Buttons dann erzeugt man ein Raster 1x2 und in Raster-Zelle 1 erzeugt man ein Raster 3x1 - ergibt:
XXX ....... ------ ....... .......
Die Gravitation einzelner Zellen wird zunächst automatisch bestimmt und kann auch manuell modifiziert werden. Die Gravitation einer Raster-Zelle wirkt sich horizontal und vertikal aus, z.B. LinksOben, MitteOben, RechtsOben, LinksMitte, MitteMitte, RechtsMitte, LinksUnten, MitteUnten, RechtsUnten.
So erzeugt man ein 3x3 Raster auf hwnd und speichert sein Handle in die Variable mygrid: KompilierenMarkierenSeparieren Hierbei wird ein 3x3 Raster auf hwnd erzeugt, alle Raster-Zellen sind gleich groß und das Raster hat die Größe vom Parent (hwnd) - füllt also den Bildschirm aus.
Solch Raster selbst sind unsichtbar und deren Größe ist nicht manuell änderbar sondern deren Größe ergibt sich immer aus den Maßen der Eltern-Raster-Zelle.
Jede einzelne Raster-Zelle besitzt ebenso ein Handle. So hat die erste Raster-Zelle vom Raster mygrid das Handle mygrid+1, die letzte Raster-Zelle vom o.g. Raster hat das Handle mygrid+9.
Nun kann man natürlich auch in einer Raster-Zelle ein weiteres "Unterraster" erzeugen, z.B. ein Unterraster in Zelle 2 erzeugen das selbst aber nur 2 Spalten besitzt: KompilierenMarkierenSeparieren Natürlich kann man auch die Maße einer Rasterzelle selbst bestimmen, sieht dann z.B. so aus: KompilierenMarkierenSeparieren setzt die Breite von Rasterzelle 1 vom Raster mygrid auf 300 Pixel.
Das Konzept erlaubt mir eine automatische Anpassung auch bei Bildschirmrotation damit das Layout immer konsistent bleibt und es ermöglicht dem Programmierer ein einfaches Erstellen beliebig komplexer Layouts ohne auf jede Bildschirmauflösung reagieren zu müssen.
Mehr zum Thema schreibe ich dann bei der Funktionserklärung zur Funktion gui. |
|
|
| |
|
|
|
HofK | Scheint mir ein sehr praktikabler Ansatz.
iF (24.01.15)
Jede einzelne Raster-Zelle besitzt ebenso ein Handle. So hat die erste Raster-Zelle vom Raster mygrid das Handle mygrid+1, die letzte Raster-Zelle vom o.g. Raster hat das Handle mygrid+9.
Bei etwas größeren Verschachtelungen kommt man eventuell mit den Inizes durcheinander. Könnte man nicht eventuell auch die Notation mygrid+11, mygrid+12, mygrid+13, mygrid+21, ... , mygrid+33 nutzen und intern auf 1,... 9 umrechnen? |
|
|
| |
|
|
|
| Es gibt einen Trick den ich dafür eingebaut habe: Als Array-Angabe. So kannst Du statt mygrid+9 auch angeben: [mygrid,3] In diesem Fall rechnet das System für dich die Rasterzellennummer aus. (grid+y*yy+x)
Habe mich für diesen Sonderfall bewusst gegen [mygrid,2] für Position 9 entschieden (also nicht bei 0 beginnend) da diese Schreibweise ja eben ausschließlich für die Übersichtlichkeit gedacht ist. |
|
|
| |
|
|
|
| Das tolle bei Android ist dass man die Customcontrols relativ einfach (nicht so kompliziert wie bei Windows über Subclassing) optisch anpassen kann, also alles kann ein Hintergrundbild besitzen/ Schriftfarbe etc blabla. Da werde ich schöne gui(gui.mod,gui.*'s herstellen können und sogar Schatten sind drin etc. |
|
|
| |
|
|