Alle Extends Funktionen auf einmal aufrufen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: Alle Extends Funktionen auf einmal aufrufen

BeitragSa, Jul 24, 2010 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Ich schreibe mir grade eine Mini-GUI, die größer werden soll. Ich habe dort ein Grund-Gadget aus dem ich mir mit Extends die anderen Gadgets wie Buttons oder Windows baue. Jedes Gadget hat seine eigene Init-Funktion ind der Bilder und so geladen werden. Ist es jetzt möglich an hand meines Standard-Gadgets alle diese Funktionen aufzurufen? Oder musst ich jedes Gadget einzeln initialisieren?

Hier ein Beispiel:
BlitzMax: [AUSKLAPPEN]
Type gadget Abstract
End Type

Type window Extends gadget
Function Init()
End Function
End Type

Type button Extends gadget
Function Init()
End Function
End Type


Muss ich jetzt folgendes schreiben?
BlitzMax: [AUSKLAPPEN]
window.Init()
button.Update


Oder kann ich das irgendwie direkt von gadget aus machen?

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

mpmxyz

BeitragSa, Jul 24, 2010 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht nicht ohne eine modifizierte Variante von brl.Reflection, welche Funktionen von Types auflisten kann.
Mache es lieber anders:
Erstelle eine Factory-Klasse!
Dort gibt es die Methode "Init".
Parallel zu jeder Gadget-Klasse gibt es eine Factory-Klasse mit einer Instanz, welche alle Ressourcen verwaltet.
So habe ich es bei meiner GUI gemacht. Jeder Gadget-Typ hatte eine von der Factory-Basis erbende Klasse gehabt, wovon automatisch ein Objekt erstellt war. Die Factory-Basis hat eine Liste von allen erstellten Objekten geführt.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Der Eisvogel

BeitragSa, Jul 24, 2010 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, was genau meinst du mit Factory-Klasse? Hast du vielleicht ein Beispiel? Ich kann mir das grad nicht so recht vorstellen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

mpmxyz

BeitragSa, Jul 24, 2010 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist ein kleines Beispiel:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Type TFactory Abstract
Global _first:TFactory
Field _succ:TFactory
Method New()
_succ=_first
_first=Self
EndMethod

Function CallChain()
Local curFac:TFactory=_first
While curFac
curFac.DoSomething()
curFac=curFac._succ
Wend
EndFunction

Method DoSomething() Abstract
EndType

'Gadget 1
New TFactory1
Type TFactory1 Extends TFactory
Method DoSomething()
Print "1"
EndMethod
EndType

'Gadget 2
New TFactory2
Type TFactory2 Extends TFactory
Method DoSomething()
Print "2"
EndMethod
EndType

TFactory.CallChain()

In deinem Fall wäre "DoSomething" die Initialisierungsmethode.

mfG
mpmxyz
Edit: Die Idee hatte aber jemand anderes. Razz (Siehe BlitzMax-Code)
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Sa, Jul 24, 2010 18:40, insgesamt einmal bearbeitet

Der Eisvogel

BeitragSa, Jul 24, 2010 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool. Das ist eine gute Idee. Danke!
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group