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:

Eine erweiterbare GUI-Engine

 
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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 22.10.2008, 00:19    Titel: Eine erweiterbare GUI-Engine Antworten mit Zitat

Die FbTk-Demo:

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

Die benötigten Bibliotheken:
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=746
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=745

Nachdem Muttonhead mich daran erinnerte das ich noch einen kleinen Quelltext versteckt hatte wollte ich den hier mal veröffentlichen.

Es geht um eine GUI-Engine auf GFX-Basis.

Man kann die GUI um eigene Steuerelemente erweitern ohne eingriffe in den Quelltext der Engine vorzunehmen.

Da es sowas wie vererbung in FB nicht gibt.. Also man keine Steuerelemente voneinander ableiten kann, gibt es eine UDT im NameSpace FbTk namens "_tko"
Was soviel darstellen soll wie die Basis für ein Toolkit-Objekt.

Wie in der Datei CustomFbTk.bi zu sehen ist, reicht es diese UDT in das eigene Steuerelement aufzunehmen, und schon kann die GUI-Engine damit "gefüttert" werden.
Die Engine kümmert sich um Ereignisse und darum das alles korrekt gezeichnet wird.

Die Engine ist noch nicht grundlegend fertiggestellt, zeigt aber die Möglichkeiten!


Man kann sich auf diese Art und weise sehr viele verschiedene "Toolkit-Objekte" vorstellen. Nicht nur Sichtbare Steuerelemente wie Schieberegler oder Buttons sondern auch Netzwerk- oder Datei- Objekte die ihre Ereignisse und Funktionen der Engine zur Verfügung stellen.

Vielleicht mag ja jemand mal reinschauen und selbst was coden lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



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

BeitragVerfasst am: 22.10.2008, 19:29    Titel: Antworten mit Zitat

(4x Suspicious pointer assignment
, ist aber erstmal nicht das problem)

Wow.... öhhmmm , nicht dass ich dies hier auch nur ansatzweise....

Versuch dem button1 nachzusteigen:

Code:
dim shared button1 as CustomFbTk._button ptr

button1 = CustomFbTk.AddButton(200,300,300,100,"Klick Knopf")
   
    'Folgende Funktion liefert die Addresse des neuen Buttons zurück
    function AddButton(x as integer,y as integer, w as integer, h as integer, caption as string) as _button ptr
        dim tmp_button as _button ptr = fbtk.NewTko(new _button)
        tmp_button->tko.x = x
        tmp_button->tko.y = y
        tmp_button->tko.w = w
        tmp_button->tko.h = h
        tmp_button->tko.RePaint = @ButtonRepaint
        tmp_button->tko.PreClick = @PressedButton
        tmp_button->caption = caption
        return tmp_button
    end function

    'Button
    type _Button
        tko as fbtk._tko                        'Es ist ein Toolkit-Objekt
        caption as string                       'Button text
    end type

    type _tko
        x as integer    'X-Position
        y as integer    'Y-Position
        w as integer    'Breite des Objekts
        h as integer    'Höhe des Objekts
        v as ubyte      'Sichtbar (<>0) = True
        OnClick as sub(tko as any ptr) = @dummysub
        OnMouseDown as sub (tko as any ptr) = @dummysub
        'OnDblClick as sub(tko as any ptr) = @dummysub  'Doppelklick muss erst noch implementiert werden
        PreClick as sub(tko as any ptr) = @dummysub     'Wird ausgeführt bevor OnClick ausgeführt wird
        'PreDblClick as sub(tko as any ptr) = @dummysub 'Doppelklick muss erst noch implementiert werden
        RePaint as sub(tko as any ptr) = @dummysub
    end type


    Sub OnMouseDown(tko as any ptr, EventSub as sub)  '<--eine sub als parameter ?
        dim tmp as _tko ptr = tko
        tmp->OnMouseDown = EventSub
    end sub


diese Fraktale kann ich noch einigermaßen in Zusammenhang bringen, obwohls mit der Referenzierung bei mir doch noch arg hängt(ist nicht das einzige!).
Aber spätestens wenn subs in einer UDT deklariert werden - steig ich aus
grinsen
Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.10.2008, 09:44    Titel: Antworten mit Zitat

Also die mehrfachen "Suspicious pointer assignment " Meldungen kann man getrost ignorieren. Man könnte es so umschreiben das es nicht auftaucht, aber im endeffekt ists nichts weiter tragisch.

Der Compiler mags nur nicht gerne wenn man die Addresse auf die ein Zeiger zeigt an einen anderen Zeiger eines anderen Typs übergibt.

Nur wie gesagt, es gibt keine Vererbung. Und der Trick den ich mir ausgedacht ist nun der das jedes "objekt" das im Kopf die selbe struktur trägt wie _tko dann kann dieses objekt von der Engine als Steuerelement verarbeitet werden.


Jap grinsen .. man kann "Subs als Parameter" an andere Subs übergeben. So wie jede Variable hat auch jede Funktion oder Sub eine Addresse und die kann man auch als Parameter übergeben.

Wenn man z.B. schreibt:

Code:

dim test as sub
test = @echtesub


dann ist die variable test ein Pointer der auf die Sub "echtesub" zeigt.
im gegensatz zu "normalen" subs kann ein Sub-Pointer nur mit:
Code:
test()

starten. (Vorrausgesetzt dem Sub Pointer wurde eine existierende Sub zugewiesen)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



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

BeitragVerfasst am: 23.10.2008, 11:07    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:

fbtk_demo.bas 'Eine interessante GUI-Engine?

Ohja, durchaus! lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 23.10.2008, 14:56    Titel: Antworten mit Zitat

5x Suspicious pointer assignment zwinkern
Ist aber kein Problem! cool
C:/fbtk/fbtk.bi(52) warning 4(1): EventSub as Any ptr)
C:/fbtk/fbtk.bi(57) warning 4(1): EventSub as Any ptr)
C:/fbtk/fbtk.bi(108) warning 4(1): = Cast(Any Ptr,@LabelRepaint)
C:/fbtk/CustomFbTk.bi(60) warning 4(1): = Cast(Any Ptr,@ButtonRepaint)
C:/fbtk/CustomFbTk.bi(61) warning 4(1): = Cast(Any Ptr,@PressedButton)

Oh ja, sehr interessant! grinsen

ich staune was alles mit FB möglich ist.... happy
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.10.2008, 16:09    Titel: Antworten mit Zitat

Zitat:
Ohja, durchaus!"

Zitat:
Oh ja, sehr interessant!

Hee... ist das jetzt ironisch gemeint? ich hab arge probleme was getextete ironie angeht...

@Volta: Werds versuchen einzubauen, hab mich aber mit "cast" noch nicht beschäftigt... wird mal wohl gesehen haben happy. Aber auf jeden Fall Danke lächeln[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



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

BeitragVerfasst am: 23.10.2008, 21:20    Titel: Antworten mit Zitat

Nein, ich hab keine [Ironie /]-Tags vergessen, es war durchaus ernst gemeint. zwinkern
_________________
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: 24.10.2008, 13:00    Titel: Antworten mit Zitat

Weiss einer ob es schon ein Projekt mit dem Namen "FreeBasic ToolKit" kurz "FbTk" gibt?

Würde gerne ein GFX-basierendes, Plattform übergreifendes, Pendant zu GTK für Freebasic programmieren...

Das würde ich dann einfach FbTk nennen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

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

Ja: http://74.125.39.104/search?q=cache:sI6nSALmIccJ:www.freebasic.net/forum/viewtopic.php%3Fp%3D102189+"FreeBasic+ToolKit"&hl=de&ct=clnk&cd=2&gl=de

Zumindest nennt dort ein User etwas von ihm so, das ist gelb markiert.
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
Seite 1 von 1

 
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