Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

sGUI - eine kleine GUI Simulation
Gehe zu Seite 1, 2, 3 ... 12, 13, 14  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 20.10.2008, 21:40    Titel: sGUI - eine kleine GUI Simulation Antworten mit Zitat

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 zwinkern )
*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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 21.10.2008, 09:33    Titel: Antworten mit Zitat

Ich hab mir nur mal kurz das Beispielprogramm compiliert, aber von dem her hätt' ich gut Lust, sowas zu benutzen. Daumen rauf!

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 21.10.2008, 12:43    Titel: Antworten mit Zitat

Das Theme-Design gefällt mir lächeln

Die Umsetzung ist allerdings hmm.. ausbaufähig lächeln

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 lächeln

- 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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 12:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 21.10.2008, 19:18    Titel: Antworten mit Zitat

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(!) zwinkern, 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)..... grinsen


Es gibt viel zu tun...... Habt Dank bis hier her Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 19:35    Titel: Antworten mit Zitat

if oldmousex (bzw y bei vertikalen slidern) <> mousex then sendmessage... Zunge rausstrecken
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 21.10.2008, 20:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 22.10.2008, 10:44    Titel: Antworten mit Zitat

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. lächeln
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 23.11.2008, 19:04    Titel: Antworten mit Zitat

Hier mal ein 2.Demo..

was es bisher kann:
Standard Button
Texteingabefeld
Checkmark
TextOptionsbutton
Trackbar horizontal
Trackbar vertikal

was noch dazu kommt:
RadioButton
Slider(Bildlaufleiste)(hor. und vert.)
Arrow(up ,dwn left,right)


die .bi:

http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=760

das demo:

http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=761

viel Spass Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 23.11.2008, 19:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 23.11.2008, 20:40    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 23.11.2008, 23:16    Titel: Antworten mit Zitat

Diese Tasten liefern Chr(255) plus ein weiteres Zeichen zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 24.11.2008, 00:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 24.11.2008, 02:18    Titel: Antworten mit Zitat

Habs kurz anprobiert, is für den Anfang ganz gelungen - wäre gut wenn du das weiter ausbaust
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 25.11.2008, 23:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 26.11.2008, 15:30    Titel: Antworten mit Zitat

@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 zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 26.11.2008, 22:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.11.2008, 09:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 27.11.2008, 11:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 27.11.2008, 14:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3 ... 12, 13, 14  Weiter
Seite 1 von 14

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz