Fenst mit Typs verwalten
Übersicht

FWeinbehemals "ich"Betreff: Fenst mit Typs verwalten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also Ich bins mal wieder,
Habe die idee gehabt ein Programm zu schrieben mit dem man Textadvantur ertellen kann. Es soll so aufgebaut sein das man fenster ertellen kann und die Antwortmöglichkeiten eistellen kann. Mein problem ist nun nur das ich typs benutze aber dieser code funktioniert nicht richtieg, wenn ich ein fenster mit der maus anklick kann ichs verschieben aber wenn ich ein zweites fenster mach werden beide, wenn ich eins ankliek verschoben und überannander gelegt. Hoffe ich habs gut genug erklärt und ihr könnt mir helfen |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du musst beim Anklicken bestimmen, welches Fenster angeklickt wird (über einen einfache Check in welchem Rechteck sich die Maus befindet) und dann nur dieses verschieben.
Es klingt als würdest du das verschieben aktuell mit einer Schleife über alle Types laufen lassen ... |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja das mache ich ich zeig euch am besten mal den code
Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global code$,code1$ Type textbox1 Field x Field y Field groy Field txt$ Field grox Field txtbe$ Field anz Field antw Field frage$ End Type w.textbox1= New textbox1 anz=anz+1 w\x=100 w\y=300 w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" While Not KeyHit(1) For w.textbox1= Each textbox1 If MouseX()>w\x And MouseX()<w\x+w\grox And MouseY()>w\y And MouseY()<w\y+w\groy Then If MouseDown(1) Then bewegen=1 EndIf If MouseDown(2) Then gtxt() FlushMouse EndIf EndIf Rect w\x,w\y,w\grox+20,w\groy,0 If anz<>1 Then Text w\x+(w\grox/2),w\y+5,w\anz,1 Else Text w\x+(w\grox/2),w\y+5,"Anfang",1 EndIf Text w\x+10,w\y+(w\groy/2)-5,w\txtbe$ Text w\x+5,w\y+w\groy-20,"1" Text w\x+w\grox-15,w\y+w\groy-20,"0" If bewegen=1 Then w\x=MouseX() w\y=MouseY() If MouseDown(1)=0 Then bewegen=0 EndIf EndIf Next If MouseHit(2) Then w.textbox1= New textbox1 anz=anz+1 w\x=MouseX() w\y=MouseY() w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" EndIf Flip Cls Wend Function gtxt() Cls While Not MouseHit(1) For w.textbox1= Each textbox1 Text 400,200,"Angezeigter text: "+w\txt,1,1 Text 400,250,"Antwortmöglichkeiten: "+w\antw,1,1 Text 400,300,"Frage: "+w\frage,1,1 Next Flip Wend End Function |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich seh das Problem
du gehst davon aus dass irgend jemand in 0,1 Millisekunden die Maustaste loslassen könnte, um bewegen wieder zurück zu setzen. Kann verständlicherweise niemand, deswegen nimm die If Abfrage raus und setze bewegen einfach vor next wieder auf 0, denn das nächste Fenster wird sich aus prinzip am Anfang der Überprüfung noch nicht bewegen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so aber wie aber wenn ich jetzt das fenster anklick bewegt es sich einmal zum mauszeiger hin und das wars
Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global code$,code1$ Type textbox1 Field x Field y Field groy Field txt$ Field grox Field txtbe$ Field anz Field antw Field frage$ End Type w.textbox1= New textbox1 anz=anz+1 w\x=100 w\y=300 w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" While Not KeyHit(1) For w.textbox1= Each textbox1 If MouseX()>w\x And MouseX()<w\x+w\grox And MouseY()>w\y And MouseY()<w\y+w\groy Then If MouseDown(1) Then bewegen=1 EndIf If MouseDown(2) Then gtxt() FlushMouse EndIf EndIf Rect w\x,w\y,w\grox+20,w\groy,0 If anz<>1 Then Text w\x+(w\grox/2),w\y+5,w\anz,1 Else Text w\x+(w\grox/2),w\y+5,"Anfang",1 EndIf Text w\x+10,w\y+(w\groy/2)-5,w\txtbe$ Text w\x+5,w\y+w\groy-20,"1" Text w\x+w\grox-15,w\y+w\groy-20,"0" If bewegen=1 Then w\x=MouseX() w\y=MouseY() EndIf bewegen=0 Next If MouseHit(2) Then w.textbox1= New textbox1 anz=anz+1 w\x=MouseX() w\y=MouseY() w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" EndIf Flip Cls Wend Function gtxt() Cls While Not MouseHit(1) For w.textbox1= Each textbox1 Text 400,200,"Angezeigter text: "+w\txt,1,1 Text 400,250,"Antwortmöglichkeiten: "+w\antw,1,1 Text 400,300,"Frage: "+w\frage,1,1 Next Flip Wend End Function |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das liegt allerdings nicht daran, sondern primär daran, dass du bei den Fenster keinen Zustand gespeichert hast.
Was dein Code tut ist das Fenster springen lassen, nicht ziehen. Deswegen ist die Position auch falsch wenn du drauf klickst (es springt nämlich nicht wieder so hin, dass die Maus am gleichen Ort innerhalb des Fensters ist) Wenn du das Fenster ziehen lassen willst, musst du dir merken, welches überhaupt das aktive Fenster ist, denn es kann nur 1 Fenster auf einmal aktiv sein (sonst passiert das was bei dir passiert ist). Hab dir den Code mal entsprechend angepasst. Bitte beachte die Codeformatierung. So wie dein Code oben gepostet ist, wirste wahrscheinlich keine Hilfe erhalten sonst, weil der einfach nur unlesbar ist! (gibt in der Tutorial Boardabteilung meines Wissens nach ein Artikel darüber. Empfehle SEHR den zu lesen!) Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global code$,code1$ Global activeWindow.textbox1 Global mdx% Global mdy% Type textbox1 Field x Field y Field groy Field txt$ Field grox Field txtbe$ Field anz Field antw Field frage$ End Type w.textbox1= New textbox1 anz=anz+1 w\x=100 w\y=300 w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" While Not KeyHit(1) For w.textbox1= Each textbox1 If MouseX()>w\x And MouseX()<w\x+w\grox And MouseY()>w\y And MouseY()<w\y+w\groy Then mdx = MouseX() - w\x mdy = MouseY() - w\y If MouseDown(1) Then bewegen=1 activeWindow = w DebugLog "Fenster " + w\anz + " wurde aktiviert." ElseIf w = activeWindow activeWindow = Null bewegen = 0 EndIf If MouseDown(2) Then gtxt() FlushMouse EndIf EndIf Rect w\x,w\y,w\grox+20,w\groy,0 If anz<>1 Then Text w\x+(w\grox/2),w\y+5,w\anz,1 Else Text w\x+(w\grox/2),w\y+5,"Anfang",1 EndIf Text w\x+10,w\y+(w\groy/2)-5,w\txtbe$ Text w\x+5,w\y+w\groy-20,"1" Text w\x+w\grox-15,w\y+w\groy-20,"0" If w = activeWindow And bewegen=1 Then w\x=MouseX() - mdx w\y=MouseY() - mdy EndIf Next oldMX = MouseX() oldMY = MouseY() If MouseHit(2) Then w.textbox1= New textbox1 anz=anz+1 w\x=MouseX() w\y=MouseY() w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" EndIf Flip Cls Wend Function gtxt() Cls While Not MouseHit(1) For w.textbox1= Each textbox1 Text 400,200,"Angezeigter text: "+w\txt,1,1 Text 400,250,"Antwortmöglichkeiten: "+w\antw,1,1 Text 400,300,"Frage: "+w\frage,1,1 Next Flip Wend End Function |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab noch ein problem ,
ich weis nicht wie ich die Fenster verlinken soll, also das ich z.b. eine linie von einm zu anderen ziehe und diese dann beim verschieben mit geändert wird dieses soll so sein, dass ich in einem fenster eine 1 und eine 0 stehen habe diese sollen für die antworten stehen die es giebt. Die sollen dann mit einer line verbunden werden Also einen sehr komplitzierte soche und nicht einfach zu erklären hoffe ihr habs verstanden und wenn nicht dann fragt mich einfach |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist auf alle Fälle schonmal recht schwer versäntlich was du willst.
Hier eine Lösung für die Linie: Code: [AUSKLAPPEN] local a.textbox1 local b.textbox1 for a = each textbox1 b = after a if b <> null then line a\x,a\y,b\x,b\y endif next |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also ihr ist der code den ich bis jetzt habe
Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global code$,code1$ Global activeWindow.textbox1 Global activeinfo.textbox1 Global activever.textbox1 Global mdx% Global mdy% Type textbox1 Field x Field y Field groy Field txt$ Field grox Field txtbe$ Field anz Field antw Field frage$ Field verbmit End Type w.textbox1= New textbox1 anz=anz+1 w\x=100 w\y=300 w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" While Not KeyHit(1) Text 0,0,"X: "+MouseX()+" Y: "+MouseY() For w.textbox1= Each textbox1 If MouseX()>w\x And MouseX()<w\x+w\grox And MouseY()>w\y And MouseY()<w\y+w\groy Then mdx = MouseX() - w\x mdy = MouseY() - w\y If MouseDown(1) Then bewegen=1 activeWindow = w DebugLog "Fenster " + w\anz + " wurde aktiviert." ElseIf w = activeWindow activeWindow = Null bewegen = 0 EndIf If MouseHit(2) Then activeinfo = w info=1 DebugLog "info " + w\anz + " wurde aktiviert" EndIf If MouseX()>w\x+5 And MouseX()<w\x+10 And MouseY()>w\y And MouseY()<w\y+w\groy Then If MouseHit(1) Then verbinden=1 activever=w DebugLog "Verbinden " + w\anz + " wurde aktiviert." EndIf EndIf If verbinden=1 And MouseHit(1) Then w\verbmit=activever\anz verbinden=0 EndIf EndIf Rect w\x,w\y,w\grox+20,w\groy,0 If anz<>1 Then Text w\x+(w\grox/2),w\y+5,w\anz,1 Else Text w\x+(w\grox/2),w\y+5,"Anfang",1 EndIf Text w\x+10,w\y+(w\groy/2)-5,w\txtbe$ Text w\x+5,w\y+w\groy-20,"1" Text w\x+w\grox-15,w\y+w\groy-20,"0" If w = activeWindow And bewegen=1 Then w\x=MouseX() - mdx w\y=MouseY() - mdy EndIf If w = activeinfo And info=1 Then While Not MouseHit(1) Cls Text 400,200,"Angezeigter text: "+w\txt,1,1 Text 400,250,"Antwortmöglichkeiten: "+w\antw,1,1 Text 400,300,"Frage: "+w\frage,1,1 Flip Wend info=0 FlushMouse EndIf If Verbinden=1 And activever=w Then Line w\x+5,w\y+w\groy-20,MouseX(),MouseY() EndIf Next oldMX = MouseX() oldMY = MouseY() If MouseHit(2) Then Cls w.textbox1= New textbox1 anz=anz+1 w\x=MouseX() w\y=MouseY() w\groy=100 w\txt$=Input("Text Eingeben:") w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$=Input("Frage eingeben:") EndIf Flip Cls Wend Man kann jetzt die fenster verschieben und mit der anderen moustaste ein nues erstelln und wenn man mit der rechten mousetast auf ein fenster doppelklickt kommten deren eigenschaften mit einm klick der anderen maustste verschwinden die und wenn man auf eine eins in einm kestchen klick wird schon eine linen gezeichnet mein Problem ist jetzt nur noch wie ich es machen kann das ich die line wenn sie gezogen ist beibehlte also das sie nicht wegget mene ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Soo. Erstmal für Außenstehende: Wir haben im Chat bissl gequatscht, deswegen weiß ich einigermaßen, was er überhaupt will. ![]() Ich: Jedes Fenster/jede Frage (eine Frage ist ja ein Fenster) hat ja genau 2 Antworten/Möglichkeiten. Auf jeder dieser Antwort folgt eine andere Frage. Also musst du einfach im Typeeintrag des Fenster die 2 Nachfolger speichern. Bzw. du speicherst sie ja nicht, sondern nur einen Verweis (auch Zeiger (engl. Pointer) genannt). Dazu machst du in den Type zwei neue Einträge: Code: [AUSKLAPPEN] Type listbox1
... [bisherigen Eigenschaften] ... Field next1.listbox1 Field next2.listbox1 Die Namen kannst du natürlich anpassen. So, wenn du jetzt eine Linie ziehst, das heißt eine Antwort mit der nächsten Frage verbinden willst, musst du, sobald das gelang, einfach die nächste Frage (also den Type Eintrag dazu) in next1 bzw. next2 eintragen (je nachdem welche Antwort es ist). Unabhängig davon geschieht das Zeichnen der Linien bereits vorhandener Verbindungen: Du gehst einfach in einer Schleife alle Fenster durch und prüfst jeweils einzeln für next1 und next2 ob NULL in ihnen gespeichert ist (d.h sie auf nichts zeigen). Falls nicht, kannst du so ne Linie malen: (l ist hier einfach mal vom type listbox1, also die variable, mit der wir alle Fragen durchgehen) Code: [AUSKLAPPEN] Line l\x,l\y, l\next1\x, l\next1\y
Das mit NULL prüfen ist wichtig: Ist next1 hier NULL, dann stürzt das Programm an genau der Stelle ab. Noch fragen? |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
fast also er läst die linen zwar aber nicht dar wo er soll trotzdem danke
Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global code$,code1$ Global activeWindow.textbox1 Global activeinfo.textbox1 Global activever.textbox1 Global mdx% Global mdy% Type textbox1 Field x Field y Field groy Field txt$ Field grox Field txtbe$ Field anz Field antw Field frage$ Field nachte1.textbox1 Field nachte2.textbox1 End Type w.textbox1 = New textbox1 anz=anz+1 w\x=100 w\y=300 w\groy=100 w\txt$="Du bist in einem raum und suchst die tür was machst du" w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$="1. du sucht nach licht 2. du sucht nach dem licht schlater" While Not KeyHit(1) Text 0,0,"X: "+MouseX()+" Y: "+MouseY() For w.textbox1= Each textbox1 If MouseX()>w\x And MouseX()<w\x+w\grox And MouseY()>w\y And MouseY()<w\y+w\groy Then mdx = MouseX() - w\x mdy = MouseY() - w\y If MouseDown(1) Then bewegen=1 activeWindow = w DebugLog "Fenster " + w\anz + " wurde aktiviert." ElseIf w = activeWindow activeWindow = Null bewegen = 0 EndIf If MouseHit(2) Then activeinfo = w info=1 DebugLog "info " + w\anz + " wurde aktiviert" EndIf If MouseX()>w\x+5 And MouseX()<w\x+10 And MouseY()>w\y And MouseY()<w\y+w\groy Then If MouseHit(1) Then verbinden=1 activever=w DebugLog "Verbinden " + w\anz + " wurde aktiviert." EndIf EndIf If verbinden=1 And MouseHit(1) Then w\nachte1=w verbinden=0 EndIf EndIf Rect w\x,w\y,w\grox+20,w\groy,0 If anz<>1 Then Text w\x+(w\grox/2),w\y+5,w\anz,1 Else Text w\x+(w\grox/2),w\y+5,"Anfang",1 EndIf Text w\x+10,w\y+(w\groy/2)-5,w\txtbe$ Text w\x+5,w\y+w\groy-20,"1" Text w\x+w\grox-15,w\y+w\groy-20,"0" If w = activeWindow And bewegen=1 Then w\x=MouseX() - mdx w\y=MouseY() - mdy EndIf If w = activeinfo And info=1 Then While Not MouseHit(1) Cls Text 400,200,"Angezeigter text: "+w\txt,1,1 Text 400,250,"Antwortmöglichkeiten: "+w\antw,1,1 Text 400,300,"Frage: "+w\frage,1,1 Flip Wend info=0 FlushMouse EndIf If Verbinden=1 And activever=w Then Line w\x+5,w\y+w\groy-20,MouseX(),MouseY() EndIf If w\nachte1<>Null Then Line w\x+5,w\y+w\groy-20,(w\nachte1\x/2),w\nachte1\y EndIf Next oldMX = MouseX() oldMY = MouseY() If MouseHit(2) Then Cls w.textbox1= New textbox1 anz=anz+1 w\x=MouseX() w\y=MouseY() w\groy=100 w\txt$=Input("Text Eingeben:") w\txtbe$=Mid(w\txt,1,12)+" ..." w\grox=StringWidth(w\txtbe) w\anz=anz w\antw=2 w\frage$=Input("Frage eingeben:") EndIf Flip Cls Wend wenn jemand so nett ist kann der mal schauen was da falsch ist |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group