| 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: 570
 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: 1876
 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 |  | 
	
		|  | 
	
		|  |