Typeproblem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Stephan

Betreff: Typeproblem

BeitragMi, Jan 18, 2006 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöchen,

kann mir vielleicht jemand helfen Question

Ich brauche dringend eine möglichkeit um zu einem Type wieder mehrere Types hinzufügen zu können.

Etwa so:

ParentType\ChildType\X=100
Print ParentType\ChildType\X

Ich habe schon eine ähnliche Möglichkeit gefunden allerdings werden dann alle vorhandenen ChildTypes wieder an das neu erzeugte ParentType angehängt. Ich möchte allerdings, dass ein neu erzeugtes ParentType komplett lehr ist und ich wieder mehrere ChildTypes hineinbasteln kann. Um das mal mit einer Gui zu vergleichen ist es bei mir zur Zeit etwa so als würde mann jedes Gadget in jedes Fenster machen.

Bitte helft mir (ich sitze schon seit ca. 3 Wochen an einem Lösungsversuch) Crying or Very sad

Vielen, vielen Dank im Voraus

Mfg Stephan

Jan_

Ehemaliger Admin

BeitragMi, Jan 18, 2006 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hm,

du drückst dich etaws unverständlich aus

ich hoffe mal, das ich das beantworte, was du gefragt hast.
Code: [AUSKLAPPEN]

Type blub
  field child.blub ; Zeigt auf einen Type, mit dem gleichen Eiogenschaften, aber anderen inhalten
end type

a.blub = new blub
b.blub = new blub
a\child=b
between angels and insects
 

Stephan

BeitragMi, Jan 18, 2006 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich hab mich wohl wirklich etwas doof ausgedrückt.
Ich habe einmahl ein Beispiel geschrieben welches mein Problem darstellt:

Code: [AUSKLAPPEN]
Type AttributeType
   Field AttributName$,Wert
End Type

Type ChildType
   Field AttributeType.AttributeType,X,Y,W,H
End Type

Type ParentType
   Field ChildType.ChildType,a,b
End Type


ParentType.ParentType=New ParentType
ParentType\ChildType.ChildType=New ChildType
ParentType\ChildType\AttributeType.AtributeType=New AttributeType


ParentType\a=-3
ParentType\b=-2

ParentType\ChildType\X=1
ParentType\ChildType\Y=2

ParentType\ChildType\AttributeType\AttributName$="Eigenschaft1"
ParentType\ChildType\AttributeType\Wert=10


ParentType\ChildType\AttributeType=New AttributeType

ParentType\ChildType\AttributeType\AttributName$="Eigenschaft2"
ParentType\ChildType\AttributeType\Wert=20



Print ParentType\a
Print ParentType\b

Print ParentType\ChildType\X
Print ParentType\ChildType\Y

For ParentType\ChildType\AttributeType.AttributeType =Each AttributeType
Print ParentType\ChildType\AttributeType\AttributName$+"="+ParentType\ChildType\AttributeType\Wert
Next



ParentType\ChildType.ChildType=New ChildType
ParentType\ChildType\AttributeType=New AttributeType

ParentType\ChildType\AttributeType\AttributName$="Eigenschaft3"
ParentType\ChildType\AttributeType\Wert=30

ParentType\ChildType\AttributeType=New AttributeType

ParentType\ChildType\AttributeType\AttributName$="Eigenschaft4"
ParentType\ChildType\AttributeType\Wert=40


;In der folgenden ausgaben sollten nur die letzten beiden Eigenschaften stehen da diese ja zum nächsten ChildType hinzugefügt wurden
;Statt dessen stehen aber wieder alle 4 Eigenschaften da. Warum? Der Zeiger müsste doch auf das nächste ChildType
;gesprungen sein zu welchem nun wieder nur 2 Attribute hinzugefügt wurden.
For ParentType\ChildType\AttributeType.AttributeType =Each AttributeType
Print ParentType\ChildType\AttributeType\AttributName$+"="+ParentType\ChildType\AttributeType\Wert
Next




Repeat
Forever


Ich wollte eigentlich eine Gui machen welche genau auf diesem Prinziep funktioniert aber leider gelingt mir das nicht. Crying or Very sad

Das erste mal darauf aufmerksam geworden bin ich als ich mit B+ ein Eigenes Tabellengadget geschrieben habe welches auch wunderbar funktioniert.Very Happy

Will ich aber nun ein zweites verwenden dann zeigen beide genau den selben Inhalt an. Crying or Very sad

!!!Bitte helft mir!!!

Mfg
Stephan
 

E. Urbach

ehemals "Basicprogger"

BeitragMi, Jan 18, 2006 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Problem ist folgendes:

Zitat:

For ParentType\ChildType\AttributeType.AttributeType =Each AttributeType


Each findet wirklich JEDES AttributeType und somit werden auch alle 4 aufgelistet.
Du kannst nicht einfach den Zeiger verschieben.

Wenn du willst, dass nur die neuen Eigenschaften angezeigt werden, dann bau davor noch folgendes ein: (dadurch werden alle alten Einträge gelöscht, aber dies ist nicht weiter schlimm, denn du speicherst ihre Speicherposition ja sowieso nicht )
Code: [AUSKLAPPEN]

For test.AttributeType  = Each AttributeType
 Delete test
Next


Edit:

Mir fällt gerade noch eine Möglichkeit ein:

Code: [AUSKLAPPEN]


Type AttributeType
   Field AttributName$,Wert
   Field parent_child.ChildType
End Type

;...

For test.AttributeType  = Each AttributeType
 If test\parent_child = ParentType\ChildType Then
   Print test\Wert
 EndIf
Next

The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
  • Zuletzt bearbeitet von E. Urbach am Mi, Jan 25, 2006 15:58, insgesamt einmal bearbeitet
 

Stephan

BeitragMi, Jan 18, 2006 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja die Idee an sich ist nicht übel nur besteht nun glaube ich das Problem, dass ich die Attribute nicht einfach so löschen kann denn dan würden ja wenn man das mal an einem Gui-bezogenen Beispiel betrachtet die Gadgets ihre Attribute verlieren.

Das zweite Beispiel funktioniert glaube ich nicht weil man kein nicht schon definiertes Type "Fielden" kann. Wenn man erst das ChildType erzeugt fehlt das AttributeType und wenn man erst das AttributeType erzeugt fehlt das ChildType. (vielleicht bin ich einfach zu blöd)

Aber wie funktioniert das nun z.B. bei Windows, dass man zu einem Childtauglichen Gadget immer ein Child hinzufügen kann?

Ich dachte mir ja, dass man so eine Hierarchie ohne viel Rechenaufwand nachempfinden kann indem man erst das oberste Type nimmt z.B. Desktop und dann Fenster und Buttons hinzufügt indem die Hierarchie der Types genau der, der Gadgets gleicht.

z.B.:
Man erzeugt ein DesktopType und fügt dann in das DesktopType beliebig viele WindowTypes ein.

In die WindowTypes kann man nun beliebig Buttons etc. einfügen.

Wenn man nun aber ein weiteres Window erzeugt finden sich darin die selben Buttons.

Grob gesagt so:

Desktop\Window=New Window ;Fenster 1
Desktop\Window\Button=New Button ;Button 1

Desktop\Window=New Window ;Fenster 2
Desktop\Window\Button=New Button ;Button 2

Nun bestehen aber nicht 2 Fenster mit jeweils einem Button sondern 2 Fenster mit jeweils 2 Buttons.

Warum wird das ChildType nun zu allen ParentTypes hinzugefügt und nicht nur zu dem auf welchem der Zeiger steht. Mann könnte doch so eine Schleife machen die alle Gadgets nach und nach schnell ausliest oder?

For Window.Window=Each Window
For Window\Button.Button=Each Button

next
next

Aus meiner Sicht würde das erste Window ausgewählt und dann doch eigentlich nur die Gadgets die im ersten Window gespeichert sind, oder? Wenn alle Gadgets des ersten Windows abgearbeitet sind wird das zweite Window ausgewählt und so weiter. Es kann natürlich sein, dass ich das Kapitel Types total falsch verstanden habe. Embarassed


Ich möchte das auf diese weise Lösen weil ich glaube dass man damit ganz einfach alle Gadgets prüfen, und zeichnen kann.

Mann könnte eine Buttonposition z.B. so ermitteln:

Desktop\Window\X+Desktop\Window\Button\X

und an diese Stelle ein Button zeichnen was denke ich einfacher ist als erst alle Types nach der passenden ID abzuklappern und dann erst die Position zu ermitteln. (Bitte berichtigt mich wenn ich falsch liege!)

Wie kann ich mich noch verständlicher ausdrücken?
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Jan 19, 2006 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Das zweite Beispiel funktioniert glaube ich nicht weil man kein nicht schon definiertes Type "Fielden" kann.
doch
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

Stephan

BeitragMi, Jan 25, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich glaube ich bin tatsächlich zu doof denn bei mir kommt immer so etwas wie "Illegal Type conversation" oder "Typefield not found".

Was mach ich nur falsch?
 

E. Urbach

ehemals "Basicprogger"

BeitragMi, Jan 25, 2006 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe gerade bemerkt, dass ich einen Tippfehler gemacht habe:
Statt einem Punkt sollte es ein Backslash sein:

Code: [AUSKLAPPEN]

Type AttributeType
   Field AttributName$,Wert
   Field parent_child.ChildType
End Type

;...

For test.AttributeType  = Each AttributeType
 If test\parent_child = ParentType\ChildType Then
   Print test\Wert
 EndIf
Next


P.S.: Hachja, 10-Finger Tippsystem... Rolling Eyes
P.S. 2: Das Prob hat mit B3D recht wenig zu tun (gehört zu Allgemein)
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

EPS

BeitragMi, Jan 25, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Stephan,

so ein System funktioniert. In meinem neuen GUI, mGUI, verwende ich es auch. Was du tun könntest ist folgendes (meine Methode).

Ich betrachte zunächst einmal jedes Element des GUIs gleich, egal ob Button oder Window etc. Daraus ergibt sich das jedes Element auch in einer gleichartigen Type Struktur gehalten werden kann. Nennen wir sie mal WIDGET. Innerhalb dieser Type Definition gibt es ein FIELD wo sie sich selbst als Parent definiert. Klingt jetzt bekloppt, deshalb hier mal ein Codeschnipsel:

Code: [AUSKLAPPEN]
Type widget
   Field id
   Field x
   Field y
   Field w
   Field h
   Field parent.widget
End Type


Wenn du nun das erste Element (den Desktop) anlegst, gibt es natürlich noch kein Parent, das macht aber nichts, da dieses Element sowieso von dir, also vom Programm angelegt wird.

Alle weiteren Elemente können dann ihren Parent bekommen. Beispiel:

Code: [AUSKLAPPEN]
desktop.widget = new widget
desktop\id = 0
desktop\x = 0
desktop\y = 0
desktop\w = graphicswidth()
desktop\h = graphicsheight()
desktop\parent = null

win1.widget = new widget

win1\id = 1
win1\x = 10
win1\y = 10
win1\w = 250
win1\h = 150
win1\parent = desktop


Über die ID, oder weitere Fields, kannst du z.B. die Art des Elements speichern, also ob es ein Fenster, ein Button usw. ist. Anhand dieser Art und/oder einer ID kannst du dann in weiteren Type Listen die spezifischen Arten des Elements festlegen, z.B. Beschriftung, Farbe etc.

Über das Parent selbst kannst du z.B. prüfen ob und wenn ja welches Element das Parent eines anderen ist. So ist z.B. der Parent des Win1 der Desktop:

Code: [AUSKLAPPEN]
if win1\parent = desktop then print "True"


Hättest du im Win1 noch einen Button drin sehe das dann z.B. so aus:

Code: [AUSKLAPPEN]
 if btn1\parent = win1 then print "True"


Ich hoffe das gibt einen Denkansatz für dich.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

Silbersurfer

BeitragDo, Jan 26, 2006 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
da habe Ich auch noch so ein Problem, wobei Ihr mir vieleicht
Helfen könnt.
Ich bin gerade dabei ein Farbmenü zu erstellen funzt so weit auch gut
Nun habe Ich das ganze in Types untergebracht alles läuft prima,
nur wenn Ich ein rückgabe-wert von meiner Function haben will
bekommen Ich keine zurück.
Meine Frage nun, ist da ein fehler in meiner Function oder geht das vieleicht so gar nicht ?

Code: [AUSKLAPPEN]
Function pinselabfrage(x,y,taste=0)
For pinsel.pinsel=Each pinsel
   If x=>pinsel\x And y=>pinsel\y And x<=pinsel\b+pinsel\x And y<=pinsel\h+pinsel\y         
      Select taste
         Case 1            
            pinseldraw(pinsel\x,pinsel\y,pinsel\b,pinsel\h)
            Return pinsel\id            
         Case 2
         
      End Select
   EndIf    
Next

End Function


Hierbei bleibt der Return meiner id immer=0 was ist da falsch?
das Programm gibt auch keine fehler aus Crying or Very sad
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip
 

Silbersurfer

BeitragDo, Jan 26, 2006 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry wegen Doppelpost,

aber es hat sich erledigt habe den Fehler gefunden,
lag nicht an der Function die läuft
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip
 

Stephan

BeitragMo, Jan 30, 2006 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist das auch erst kurz nachdem ich fertig war aufgefallen das dies zu Allgemein gehört.

Aber erstmal danke für die vielen Antworten, ich denke, dass ich nun in der Lage bin eine Gui zu entwickeln. (Ansonsten nerve ich einfach mit weiteren Fragen)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group