Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 22.10.2008, 00:19 Titel: Eine erweiterbare GUI-Engine |
|
|
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 |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 22.10.2008, 19:29 Titel: |
|
|
(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
Mutton |
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.10.2008, 09:44 Titel: |
|
|
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 .. 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:
starten. (Vorrausgesetzt dem Sub Pointer wurde eine existierende Sub zugewiesen) |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 23.10.2008, 11:07 Titel: |
|
|
OneCypher hat Folgendes geschrieben: |
fbtk_demo.bas 'Eine interessante GUI-Engine?
|
Ohja, durchaus! _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1874 Wohnort: D59192
|
Verfasst am: 23.10.2008, 14:56 Titel: |
|
|
5x Suspicious pointer assignment
Ist aber kein Problem!
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!
ich staune was alles mit FB möglich ist.... _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.10.2008, 16:09 Titel: |
|
|
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 . Aber auf jeden Fall Danke [/quote] |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 23.10.2008, 21:20 Titel: |
|
|
Nein, ich hab keine [Ironie /]-Tags vergessen, es war durchaus ernst gemeint. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 24.10.2008, 13:00 Titel: |
|
|
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 |
|
|
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
|
Nach oben |
|
|
|