Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 20.10.2008, 21:40 Titel: sGUI - eine kleine GUI Simulation |
|
|
ein kleine GUI Simulation geschrieben in nativen FreeBASIC
Wohlbemerkt!!!das hier hat nichts mit der Programmierung von API und Konsorten zutun.
Mit ner Menge Line und Pset Befehlen und einem Eventloop wird hier versucht, eine Art GUI-Handle zu simulieren.
Liste der Gadgets/Controls:
*SimpleGadget
*BMPSimpleGadget
*ToggleGadget
*CheckmarkGadget
*RadioButton
*StringGadget
*TrackBar
*ScrollBar
*FileRequester (sehr einfach gehalten)
*SelectBox (was ähnliches )
*ComboBox
*MultiLineEditBox/TextViewBox
*einfache MessageBox
*Label
*ein kleines PullDownMenüsystem
einfach mal ansehen, Kommentare willkommen
http://www.freebasic-portal.de/downloads/sonstiges/sgui-192.html
und dessen absolut inkompatiblen Nachfolger...
https://www.freebasic-portal.de/downloads/sonstiges/sgui2-401.html
stelle das Ganze jetzt unter folgender Lizenz WTFPL
("also macht damit was ihr wollt")
Zuletzt bearbeitet von Muttonhead am 13.09.2023, 17:27, insgesamt 38-mal bearbeitet |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 21.10.2008, 09:33 Titel: |
|
|
Ich hab mir nur mal kurz das Beispielprogramm compiliert, aber von dem her hätt' ich gut Lust, sowas zu benutzen.
Evtl. einige Zahlenkonstanten noch als Enums bzw. Konstanten basteln, damit das ein bisschen leichter zu lesen wird. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 21.10.2008, 12:43 Titel: |
|
|
Das Theme-Design gefällt mir
Die Umsetzung ist allerdings hmm.. ausbaufähig
z.B.
- Deine "Gadgets" sind im Prinzip "Objekte". Und es wäre sehr schön wenn man sie auch als solche behandeln könnte.
Ein Button könnte z.B. so behandelt werden (pseudocode):
Code: |
declare sub Button1Click()
dim shared button ptr
button = AddButton(10,10,300,200,"OK")
button->OnClick = @Button1Click
dim in as string
do
in = inkey
DoEvents '(angelehnt an das DoEvents aus VBA)
loop until in <> ""
Sub Button1Click()
button->Label = "Wurde geklickt!"
End sub
|
(Die Funktion "DoEvents" arbeitet dann alle Steuerelemente ab und schaut ob irgendwelche Ereignisse an die Ereignisfunktionen der Steuerelemte abgegeben werden sollen)
Ich hab auch schon mal eine ähnliche Gui erstellt, muss mal schauen ob ich die noch mal finde, dann poste ich nochmal
- Richt schick wäre natürlich auch noch eine Auslagerung der GUI-Funktionen und Variablen in einen eigenen NameSpace.
- Eine Schnittstelle mit der man eigene "Gadgets" erstellen kann, ohne in deinen Quelltext eingreifen zu müssen.
(Ist allerdings etwas schwierig weil es in FB keine vererbung gibt) |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 12:51 Titel: |
|
|
sieht nett aus. ein kleines manko ist, dass deine "trackbar" immer ein update-event auslöst, wenn man sie klickt, auch wenn man nicht darauf rumfährt. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 21.10.2008, 19:18 Titel: |
|
|
Naaaa... immerhin ist die Idee nicht zerrissen worden...
*löööl*
@OneCypher: zu meiner Schande muss ich gestehen daß das Design eigentlich nur nen Vista Rebuild aus ca. 10 Farben ist *Asche auf mein Haupt*.
zum Code als solchen.Du hast natürlich Recht... die Umsetzung... Aber man tut was man kann - und viel können kann ich noch nicht. *lach* Man wächst mit den Aufgaben.Hab grad erst die UDTs entdeckt und hier zum erstenmal verwendet... mächtig praktisch die Dinger*lach*
Das Problem der Erweiterung hab ich ja schon jetzt, mindestens 3 Subs müssen immer angepasst werden...
Trotz deines Lastenheftes(!) , eines sollte man dabei nicht vergessen: "it must be simple to use"...
@Jojo: Stimmt das Ding feuert, auch wenn die Mouse steht... woran das liegt ist mir klar... Ist im Hauptprogramm natürlich nen Problem, wenn nen Packen Code bei jeder Message ausgeführt wird... Hmm *Kopfkratz*
(man kann doch nicht für jedes Problemchen ne Variable dimmen und nen IF THEN ELSE Block einfügen).....
Es gibt viel zu tun...... Habt Dank bis hier her Mutton |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 19:35 Titel: |
|
|
if oldmousex (bzw y bei vertikalen slidern) <> mousex then sendmessage... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 21.10.2008, 20:14 Titel: |
|
|
Ist schon richtig Jojo, das Problem ist, dad ganze basiert im wesentlichen auf 2 Events: FB.EVENT_MOUSE_BUTTON_PRESS und FB.EVENT_MOUSE_BUTTON_RELEASE
das Trackbar ist auf sende msg bei MousePress eingestellt,und solange LMB unten überm "Gadget" --->Feuer!!!
ich könnte es auch auch auf MouseRelease umstellen, ist einfach nur nen "Schalter"(Gadlist(x).reply), dann gibbet aber keene Werte mehr beim "sliden"
Mutton |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 22.10.2008, 10:44 Titel: |
|
|
Ich habe die GUI-Bibliothek inzwischen auch ausprobiert und finde sie schon - trotz des frühen Entwicklungsstadiums - recht gut. Ich finde du solltest da auf jeden Fall dranbleiben und weitere Controls/Gadgets einbauen, denn dann hat man damit eine ganz brauchbare und vor allem einfache, vorgefertigte Alternative zur umständlichen Oberflächenprogrammierung mittels WinAPI, sofern man nicht gerade Spezialcontrols wie TreeView o.ä. braucht. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
|
Nach oben |
|
|
The_Muh aka Mark Aroni
Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 23.11.2008, 19:35 Titel: |
|
|
sieht bisher ganz gut aus, aber eine bug hab ich:
dein "textfeld" is fehlerhaft... wenn man mit den cursortasten darin rumscrollt packt der die zeichen davon rein -> chr(255, x)
am besten mal nen filter reinsetzen.
Und mit entf kann man darin auch nich viel machen...
/edit: beitrag nummer 6666 im forum projektvorstellungen... *muahahaha* _________________ // nicht mehr aktiv // |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 23.11.2008, 20:40 Titel: |
|
|
@The_Muh: Hmmm,komisch - bei mir funzt es...
liefern die CursorTasten denn bei dir nen ASCII Code? Bei mir nicht.
Das Eingabefeld fügt nämlich alle ASCII Codes ab 32 hinzu.
Wie du schon sagst,das kann man filtern, aber dein Entfernen-Problem kann ich nicht nachvollziehen...
Für Entf benutze ich den Scancode 83(Taste liefert kein ASCII Code)
für Backspace Scancode 14(Taste liefert ASCII,8 glaub ich)
Cursortasten l/r Scancode 75/77 (kein ASCII)
Hätte ja gerne nur mit ASCII geabeitet, geht aber leider nicht...
edit:
@The_Muh ... würdeste diesen Code (Bestandteil von Simplegui) mal testen und mir mal sagen welchen ASCII und ScanCode die Tasten Backspace,Entf und die Cursortasten bei dir liefern?
Danke Mutton
Code: | 'WaitEventChecker
'##############################################################################
'##############################################################################
'Begin WaitEvent.bi
#INCLUDE once "fbgfx.bi"
declare sub WaitEvent
declare sub KillEvent
DIM shared AS FB.EVENT PTR event
event = ALLOCATE(20)
dim shared as integer KEY,ASCCODE,SCANCODE,LBUTTON,MBUTTON,RBUTTON,WHEEL,MOUSEX,MOUSEY,MOUSEDX,MOUSEDY,MOUSE,FOCUS,EXITPROG
const as integer PRESSED=1
const as integer RELEASED=2
const as integer DOUBLECLICKED=3
const as integer REPEATED=3
screen 18
do
WaitEvent
if EXITPROG then exit do
locate (1,1):print"ASCII:";ASCCODE;" ","SCAN:";SCANCODE;" "
loop
killevent
end
sub WaitEvent
Dim as integer ExitSub
KEY=0
ASCCODE=0
SCANCODE=0
ExitSub=0
do
IF (SCREENEVENT(event)) Then
ExitSub=1
SELECT CASE event->type
CASE FB.EVENT_KEY_PRESS
KEY=1
ASCCODE=event->ascii
SCANCODE=event->scancode
CASE FB.EVENT_KEY_RELEASE
KEY=2
ASCCODE=event->ascii
SCANCODE=event->scancode
CASE FB.EVENT_KEY_REPEAT
KEY=3
ASCCODE=event->ascii
SCANCODE=event->scancode
CASE FB.EVENT_MOUSE_MOVE
MOUSEX=event->x
MOUSEY=event->y
MOUSEDX=event->dx
MOUSEDX=event->dy
CASE FB.EVENT_MOUSE_BUTTON_PRESS
IF (event->button = FB.BUTTON_LEFT ) THEN LBUTTON=PRESSED
IF (event->button = FB.BUTTON_MIDDLE) THEN MBUTTON=PRESSED
IF (event->button = FB.BUTTON_RIGHT) THEN RBUTTON=PRESSED
CASE FB.EVENT_MOUSE_BUTTON_RELEASE
IF (event->button = FB.BUTTON_LEFT ) THEN LBUTTON=RELEASED
IF (event->button = FB.BUTTON_MIDDLE) THEN MBUTTON=RELEASED
IF (event->button = FB.BUTTON_RIGHT) THEN RBUTTON=RELEASED
CASE FB.EVENT_MOUSE_DOUBLE_CLICK
IF (event->button = FB.BUTTON_LEFT ) THEN LBUTTON=DOUBLECLICKED
IF (event->button = FB.BUTTON_MIDDLE) THEN MBUTTON=DOUBLECLICKED
IF (event->button = FB.BUTTON_RIGHT) THEN RBUTTON=DOUBLECLICKED
CASE FB.EVENT_MOUSE_WHEEL
WHEEL=event->z
CASE FB.EVENT_MOUSE_ENTER
MOUSE=1
CASE FB.EVENT_MOUSE_EXIT
MOUSE=0
CASE FB.EVENT_WINDOW_GOT_FOCUS
FOCUS=1
CASE FB.EVENT_WINDOW_LOST_FOCUS
FOCUS=0
CASE FB.EVENT_WINDOW_CLOSE
EXITPROG=1
END SELECT
end if
Sleep 1
loop until ExitSub=1
end sub
sub KillEvent
deallocate event
end sub
'End Waitevent.bi
'##############################################################################
'############################################################################## |
edit2:
wie es scheint, hängt der Scancode einer Taste vom Layout des Keyboards ab... ist also ungünstig
andererseits erkennt FB anscheinend weder Entf noch die Cursortasten,
mit asc(inkey) liefern alle diese Tasten ASCII 255
GROSSES PROBLEM
Mutton |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 23.11.2008, 23:16 Titel: |
|
|
Diese Tasten liefern Chr(255) plus ein weiteres Zeichen |
|
Nach oben |
|
|
The_Muh aka Mark Aroni
Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 24.11.2008, 00:22 Titel: |
|
|
den code werd ich morgen mal testen... bzw heute xD
Welches OS hast du? habe bei der entwicklung von Muhedit festgestellt das ENTF bei Linux nen anderen Scancode hat als bei windows...
ausschnitt aus MuhEdit:
Code: | #IFdef __fb_linux__
case 127 'ENTF
if L >= spalte + a then
tzeile(zeile+A) = left(tzeile(zeile+A),B + spalte-1) + right(tzeile(zeile+A),L -(spalte+B))
elseif L < spalte + a then
redim preserve tzeile(ubound(tzeile) + 1)
rest = tzeile(zeile + a +1)
tzeile(zeile + a) = tzeile(zeile +a) + rest
for x as integer = zeile+a+1 TO max(tzeile())
tzeile(x) = tzeile(x+1)
next
redim preserve tzeile(ubound(tzeile) -1)
end if
if zeile + a > max(tzeile()) and L = 0 and zeile > 3 then
zeile -= 1
redim preserve tzeile(zeile + A)
end if
#endif
|
Das is der teil für den Scancode, hab mal den Linux-teil genommen ums zu verdeutlichen.. bei mir ist entf chr(127), bei windows isses chr(255,83)
noch nen MuhEdit ausschnitt:
Zitat: | case 32 to 127,9,245, 132,142,148,153,129,154,225 |
Das ding filtert alle zeichen die nicht in einen text gehören. allerding hab ich 2 case-blöcke: einen für chr(255,x) und einen für chr(<>255), was ich dir auch empfehle. (den tipp hab ich von TPM)
Vll solltest du dir mal nen paar sachen aus muhedit angucken, könnte ganz hilfreich seien.
mfg
The_muh _________________ // nicht mehr aktiv // |
|
Nach oben |
|
|
Devilkevin aka Kerstin
Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 24.11.2008, 02:18 Titel: |
|
|
Habs kurz anprobiert, is für den Anfang ganz gelungen - wäre gut wenn du das weiter ausbaust _________________ www.piratenpartei.de |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 25.11.2008, 23:05 Titel: |
|
|
Hmmm.... jaaaa .... da eine Teil meines Programms unter Linux nicht so funktionuckelt, dachte ich mir: machste mal nen bisschen Platz auf der HD und installierst mal UBUNTU und FreeBASIC, um dein Programm mal unter Linux zu testen...
Kann doch sooo schwer nicht sein....
Nachdem ich allerdings stundenlang aufm Terminal mit mir völlig unbekannten Befehlen rumhantiert habe... ohne Ergebnis (ich war sogar schon root!!!!)- bin ich jetzt doch der Meinung: nööööö, ähhm... muss ich nicht hammm *lach*
Mutton
*immernoch lach* |
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 26.11.2008, 15:30 Titel: |
|
|
@Muttonhead:
So super einfach wie unter windows ist es nicht, aber bei weitem nicht das komplizierteste unter linux. Da gehören ein paar dutzend packe nachinstalliert. Im wesentlichen "build-essentials".. Aber das findet man alles nach und nach raus.. wenn man die geduld hat |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 26.11.2008, 22:32 Titel: |
|
|
Hab grad Sun's VirtualBox installiert und pack jetzt da mal UBUNTU rein...Vllcht kann ich mich ja doch damit anfreunden, ohne jedesmal nen Reset machen zu müssen...die Monitoreinstellungen zwischen Vista und UBUNTU waren eh irgendwie verschieden: selbe Auflösung aber immer nen Versatz zwischen beiden Darstellungen, und jedesmal am Monitor rumfiddeln zu müssen... na mal sehen
Mutton |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.11.2008, 09:32 Titel: |
|
|
dann war eine andere bildwiederholrate eingestellt. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 27.11.2008, 11:16 Titel: |
|
|
VirtualBox und Ubuntu kann ich aber auch wärmstenst empfehlen! Ist nur nach wie vor schade das es nie wirklich 3D-Beschleunigung in einer VM geben wird... denke ich mal. |
|
Nach oben |
|
|
The_Muh aka Mark Aroni
Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 27.11.2008, 14:11 Titel: |
|
|
Ich rate in letzter zeit eher von Ubuntu ab. Ubuntus 'unterbau' ist nur noch ein wackliges gerüst. Ich würde eher zu Zenwalk raten, das läuft schneller, ist stabiler und gibts auch für Gnome- und KDE-Fans.
Außerdem is Zenwalk idiotensicher (soweit ich das nach nem Test mit Zenlive beurteilen kann).
mfg
The_Muh _________________ // nicht mehr aktiv // |
|
Nach oben |
|
|
|