Typeproblem
Übersicht

StephanBetreff: Typeproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallöchen,
kann mir vielleicht jemand helfen ![]() 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) ![]() Vielen, vielen Dank im Voraus Mfg Stephan |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() Das erste mal darauf aufmerksam geworden bin ich als ich mit B+ ein Eigenes Tabellengadget geschrieben habe welches auch wunderbar funktioniert. ![]() Will ich aber nun ein zweites verwenden dann zeigen beide genau den selben Inhalt an. ![]() !!!Bitte helft mir!!! Mfg Stephan |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() 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. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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... ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
-------------------------------------------------------
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group