Menue Problem

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

Flush

Betreff: Menue Problem

BeitragSa, Apr 14, 2018 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich habe ein kleines Menue geschrieben um die Funktionen eines Programms zu steuern.

Wird auf den Button mit der Aufschrift "Start X-Wave" geklickt wird eine kleine Animation ausgeführt, bei Klick auf "Start Y-Wave" eine andere.
Das klappt soweit ganz gut.

Wird auf den Button mit der Aufschrift "Periode +" geklickt wird ein Zähler hochgezählt (iPeriode). Dieses höchzählen soll Inkrement für Inkrement während auf den Button geklickt wird angezeigt werden.
Das funktioniert aber nicht Sad .

Wird nach ein paar Klicks (z.B. 6 Mal) auf "Periode +" dann wieder "Start X-Wave" betätigt wird das Inkrement angezeigt (6) aber nicht Schritt für Schritt.

Um es etwas zu konkretisieren genau ein Klick auf "Periode +" also ein Inkrement wird direkt in die Animation übernommen und angezeigt dann wird aus der If MouseHit(1) Abfrage zurück in die Main() gesprungen!

Wie muss ich die Sache ändern damit das klappt?

Ich hoffe meine Frage war präzise und der Teilcode aussagekräftig genug!

Vielen Dank vorab,
Flush


BlitzBasic: [AUSKLAPPEN]

Function Main()
Repeat
MouseOver ()
If MouseHit(1) Then
If Cntrl(Menu)\sCaption = "Start X-Wave"Then
Repeat
ViewWave("hrzt")
Until MouseHit (1)
EndIf
If Cntrl(Menu)\sCaption = "Start Y-Wave"Then
Repeat
ViewWave("vert")
Until MouseHit (1)
EndIf
If Cntrl(Menu)\sCaption = "Periode +"Then
iPeriode = iPeriode + 1
CalcSin(iAmplitude, iPeriode)
Repeat
ViewWave("hrzt")
Until MouseHit (1)
EndIf
EndIf
Until KeyHit (1)

End Function

Xeres

Moderator

BeitragSa, Apr 14, 2018 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachdem Mousehit aufgerufen wurde, wird der interne Zustand zurückgesetzt. Tasten- und Mausdrücke am besten in Globale Variablen speichern.

Code: [AUSKLAPPEN]
Repeat
mh1 = MouseHit (1)

;...

Until mh1
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Apr 14, 2018 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Xeres,
vielen Dank für Deine schnelle Antwort.
Ich habe eine Globale Variable angelegt un den Code so abgeändert:

BlitzBasic: [AUSKLAPPEN]

Repeat

MouseOver ()
mh1 = MouseHit (1)
If mh1 Then
If Cntrl(Menu)\sCaption = "Start X-Wave" Then
Repeat
ViewWave("hrzt")
Until mh1
ElseIf Cntrl(Menu)\sCaption = "Start Y-Wave" Then
Repeat
ViewWave("vert")
Until mh1
ElseIf Cntrl(Menu)\sCaption = "Periode +" Then
iPeriode = iPeriode + 1
CalcSin(iAmplitude, iPeriode)

Repeat
ViewWave("hrzt")
Until mh1
EndIf
EndIf
Until mh1


Leider funktioniert das nicht, der Screen ist jetzt schwarz.
Übrigens ich habe den Code aus Ideal per copy/ paste eingefügt, warun ist die Formatierung so schlecht?
Kann ich das irgendwie verbessern?

Viele Grüße,
Flush

Xeres

Moderator

BeitragSa, Apr 14, 2018 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If mh1 Then
;...
Until mh1

Wenn die Variable gesetzt ist, wird auch die Schleife wieder abgebrochen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Apr 14, 2018 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Xeres,

kannst Du ein wenig genauer beschreiben was Du meinst?
Hast Du vllt. ein CodeSnippet oder so?

Ich glaub ich seh grad den Wald vor lauter Bäumen nicht!


Viele Grüße,
Flush

Flush

BeitragSa, Apr 14, 2018 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das ganze wie folgt abgeändert.
Aber nach wie vor wird aus der Schleife gesprungen in die Main() dann wieder in die Schleife.
Die Werte werden nicht kontinuierlich in der Animation angezeigt!
BlitzBasic: [AUSKLAPPEN]

Global mh1 = MouseHit (1)
;--------------------------------------------------------------
Function MainWave()

Repeat
mh1 = MouseHit (1)

MouseOver ()

If mh1 Then
If Cntrl(Menu)\sCaption = "Start X-Wave" Then
mh1 = 0
Repeat
ViewWave("hrzt")
Until MouseHit (1)
ElseIf Cntrl(Menu)\sCaption = "Start Y-Wave" Then
Repeat
ViewWave("vert")
Until MouseHit (1)
ElseIf Cntrl(Menu)\sCaption = "Periode +" Then
iPeriode = iPeriode + 1
CalcSin(iAmplitude, iPeriode)
mh1 = 0
Repeat
ViewWave("hrzt")
Until MouseHit (1)
EndIf
EndIf
Until mh1

End Function




Viele Grüße und danke für die Mühe,
Flush

Xeres

Moderator

BeitragSa, Apr 14, 2018 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte versuche Doppelposts zu vermeiden, du kannst deine Beiträge nacheditieren.

Wenn das Snippet so aussieht:
BlitzBasic: [AUSKLAPPEN]
If mh1 Then
If Cntrl(Menu)\sCaption = "Start X-Wave" Then
Repeat
ViewWave("hrzt")
Until mh1
End If
End If

Dann wird die erste Bedingung wahr, wenn mh1 = 1 ist. Dann kommt man irgendwann in die Schleife rein - und die sieht das mh1 = 1 und beendet sich wieder. ViewWave wird also genau einen frame ausgeführt.

Nach deiner Änderung speicherst du mh1, ggf. überschreibst du mh1 wieder mit 0 und fragst danach MouseHit wieder ab, was an der stelle vermutlich 0 ist.
Dein Ansatz ist schlicht zu verschachtelt. Warum hast du Schleifen innerhalb der Hauptschleife? Bau dein Programm so um, dass die Tastendrücke Steuerungsvariablen setzen und diese die Animation abspielen - ein Layer an Abstraktion.

Und ich würde von Ungarischer Notation abraten.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragMo, Apr 16, 2018 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres
Ja jetzt isses wieder klar. Ich hatte das gleiche Problem vor ein paar Monaten mit einer Animation. Die Hilfsvariable war auch da die Lösung.
Und mein Code war ziemlich crappy! Man sollte keine Fragen und Code-Snippets posten wenn man übermüdet ist!!!!

Jetzt läuft alles wie es soll.

Du würdest von der System Hungarian abraten nehm ich an aber nicht von der Apps Hungarian?! Oder gibt es sonst noch Alternativen?


Viele Grüße,
Flush

Xeres

Moderator

BeitragMo, Apr 16, 2018 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
In Blitzbasic, wo im Zweifel alles als Int repräsentiert wird, macht es besonders Sinn, seine Variablennamen gut zu wählen. "T" als Prefix für Types ist weitgehend Standard um die Definition von Objektinstanzen zu unterscheiden. Davon abgesehen lese ich persönlich lieber "fileHandle" als "hFile" oder "caption" als "sCaption" und "TileMapImage" als ... was wäre eine Bildressource? Eigentlich ist es ein handle - aber alles in Blitzbasic ist ein handle.
Mein Punkt ist: Lange, leserliche Namen sind gut. Kryptische Abkürzungen sind was für diese C Programmierer.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragMo, Apr 16, 2018 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Kryptische Abkürzungen sind was für diese C Programmierer.


LLLLOOOLLLL, da komm ich her Wink !

Aber auch C-Programmierer nutzen immer mehr leserliche Namen, es genügt die Standardbibliothek mit strcpy(), strcspn() etc...!


Viele Grüße,
Flush

Flush

BeitragMo, Apr 23, 2018 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich habe nocheine Frage betreffend meines Menues deshalb habe ich die Frage im gleichen Thread gepostet und den gesamten Source ebenfalls. Was fehlt um das Programm laufen zu lassen ist ein .jpg Image.

Das Menue besteht momentan aus 2 Teilen 1. einem Hauptmenue (MainMenue) und 2. einem Untermenue (WaveMenue). Bei Klich auf einen der Buttons im Hauptmenue soll man später in das entsprechende Untermenue gelangen.
Wird im Hauptmenue auf den 1. Button (Image Sine Waves) genau auf das I von Image geklickt gelangt man ins entsprechende Untermenue auf den Button der direkt unter dem Button des Hauptmenues liegt.

https://imgur.com/a/JDcQi41

https://imgur.com/a/CyOH2no

Klickt man nicht direkt auf das I oder irgendwo zwischen die Buttons des Hauptmenues bekomme ich eine "Memory Access Violation".
Im Untermenue ist es das gleiche. Die Buttons tun ihre Arbeit aber klickt man dazwischen kommt es zu einer
"Memory Access Violation"!
Wie kann ich diesen Fehler beheben?

Das Programm besteht aus 4 kleinen Teilen, SinusEffekte ist die Hauptdatei!

Sinus Effekte.bb:
BlitzBasic: [AUSKLAPPEN]


Graphics 1280, 720, 24, 3
AppTitle ">>> Sinus Effekte <<<"
SetBuffer BackBuffer()

;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Include "Menue.bb"
Include "WaveView.bb"

;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Global BildBreite% = 0
Global BildHoehe% = 0
Global Bild% = 0

Bild = LoadImage ("Farbrausch.jpg")
BildBreite = ImageWidth (Bild)
BildHoehe = ImageHeight (Bild)

;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CreateMainMenue()

;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Menu = ObjektIndex
Repeat

MouseOver ()

If MouseHit(1) Then

If dButton(Menu)\cmdCaption = "Image Sine Waves" Then DeleteMenueGraphics() : MainWave()
If dButton(Menu)\cmdCaption = ">>>> END <<<<" Then Quit()

EndIf

Until KeyHit(1)

Function CreateMainMenue()

SetButton("Image Sine Waves", 50, 50, 300, 50)
SetButton("Image Sine Motion", 50, 120, 300, 50)


SetButton("Image Split X/Y" ,50, 190, 300, 50)
SetButton("Image Split in Motion" , 50, 260, 300, 50)

SetButton("Image Roll" ,50, 330, 300, 50)

SetButton("Image Double Split" , 50, 400, 300, 50)
SetButton("Image Rubber Split" , 50, 470, 300, 50)

SetButton("Copperbars" , 450, 50, 300, 50)
SetButton("Copperbars Sinepatch" , 450, 120, 300, 50)
SetButton("Copperbars Splits" , 450, 190, 300, 50)

SetButton("Circle" , 850, 50, 300, 50)
SetButton("Sins Char Scroller" , 850, 120, 300, 50)
SetButton("Sine Rubber Scroller" , 850, 190, 300, 50)
SetButton("Circle Char Scroller" , 850, 260, 300, 50)
SetButton("Circle Rubber Scroller" , 850, 330, 300, 50)

SetButton(">>>> END <<<<" , 950, 650, 300, 50)

CreateEnableDisableImage()

End Function

Function CreateWaveMenue()

Viewport(10, 50, 200, 300)

SetButton("X-Wave", 50, 50, 110, 30)
; SetButton("Y-Wave", 20, 130, 110, 30)
SetButton("Periode +", 20, 10, 100, 30)
; SetButton("Periode -", 160, 130, 100, 30)

SetBorder(400, 100, 800, 413)

CreateEnableDisableImage()

End Function


Menue.bb
BlitzBasic: [AUSKLAPPEN]

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
font = LoadFont("Arial", 24, 1, 0, 0) ;Font Variablen
SetFont font ;Font setzen

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Global maus = CreateImage(1,1) ;Grafik für Maus Pointer

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Global Menu = 0 ;Hilfsvariable zur Menüsteuerung bzw. zum umschalten der Menüfunktionen

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Type tCommandButton ;Type für die Eigenschaften der Buttons deklarieren
Field cmdCaption$ ;Beschriftung
Field cmdXPos% ;XPosition
Field cmdYPos% ;YPosition
Field cmdWidth% ;Breite
Field cmdHeight% ;Höhe
Field cmdlActive% ;Bild bei aktiviertem Control
Field cmdNotActive% ;Bild bei inaktiviertem Control
Field ControlNumber% ;Controlnummer/ Index
End Type

Global ButtonNum = 0 ;Variable für die Nummer/ Index des Controls
Dim dButton.tCommandButton (200) ;DimFeld aus Types deklarieren

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Type tBorder ;Type für die Eigenschaften der Rahmen deklarieren
Field bdrXPos% ;XPosition
Field bdrYPos% ;YPosition
Field bdrWidth% ;Breite
Field bdrHeight% ;Höhe
Field BorderNumber% ;Bordernummer/ Index
End Type

Global BorderNum = 0 ;Variable für die Nummer/ Index des Controls
Dim dBorder.tBorder (17) ;DimFeld aus Types deklarieren

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Global ObjektIndex = 1

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Function SetButton(cmdCaption$, cmdXPos%, cmdYPos%, cmdWidth%, cmdHeight%)

ButtonNum = ButtonNum + 1 ;Index des einzulesenden Buttons
dButton (ButtonNum) = New tCommandButton ;Neuen Button mit Indexnummer (ButtonNum) und zugehörigem Type erstellen

dButton(ButtonNum) \cmdCaption = cmdCaption ;Beschriftung
dButton(ButtonNum) \cmdXPos = cmdXPos ;XPosition
dButton(ButtonNum) \cmdYPos = cmdYPos ;YPosition
dButton(ButtonNum) \cmdWidth = cmdWidth ;Breite
dButton(ButtonNum) \cmdHeight = cmdHeight ;Höhe
dButton(ButtonNum) \cmdlActive = 0 ;Bild bei aktiviertem Button
dButton(ButtonNum) \cmdNotActive = 0 ;Bild bei inaktiviertem Button
dButton(ButtonNum) \ControlNumber = ButtonNum ;Buttonnummer/ Index

End Function

Function SetBorder(bdrXPos%, bdrYPos%, bdrWidth%, bdrHeight%)

BorderNum = BorderNum + 1 ;Index des einzulesenden Rahmens
dBorder (BorderNum) = New tBorder ;Neuen Border mit Indexnummer (BorderNum) und zugehörigem Type erstellen

dBorder(BorderNum) \bdrXPos = bdrXPos ;XPosition
dBorder(BorderNum) \bdrYPos = bdrYPos ;YPosition
dBorder(BorderNum) \bdrWidth = bdrWidth ;Breite
dBorder(BorderNum) \bdrHeight = bdrHeight ;Höhe
dBorder(BorderNum) \BorderNumber = BorderNum ;Bordernummer/ Index

End Function

Function MouseOver()

Local XPosMouse = MouseX()
Local YPosMouse = MouseY()
Menu = 0

For ObjektIndex = 1 To ButtonNum
If ImageRectOverlap (maus, XPosMouse, YPosMouse, dButton(ObjektIndex)\cmdXPos, dButton(ObjektIndex)\cmdYPos, dButton(ObjektIndex)\cmdWidth, dButton(ObjektIndex)\cmdHeight) Then
DrawMenueGraphics("enabled")
Menu = ObjektIndex
Else
DrawMenueGraphics("disabled")
EndIf
Next
Flip
Cls

End Function

Function CreateEnableDisableImage()

iRot% = 0
iGruen% = 0
iBlau% = 255

iRot = 0 : iGruen = 0 : iBlau = 255

For i = 1 To ButtonNum
dButton(i)\cmdNotActive = CreateImage(dButton(i)\cmdWidth, dButton(i)\cmdHeight)
SetBuffer ImageBuffer(dButton(i)\cmdNotActive)
Color iRot, iGruen, iBlau
Rect 0, 0,dButton(i)\cmdWidth, dButton(i)\cmdHeight
Color 255, 255, 255
Text 0.5 * (dButton(i)\cmdWidth - StringWidth (dButton(i)\cmdCaption)), 0.5 * (dButton(i)\cmdHeight - FontHeight()) , dButton(i)\cmdCaption
Next
iRot = 100 : iGruen = 0 : iBlau = 255
For i = 1 To ButtonNum
dButton(i)\cmdlActive = CreateImage(dButton(i)\cmdWidth, dButton(i)\cmdHeight)
SetBuffer ImageBuffer(dButton(i)\cmdlActive)
Color iRot, iGruen, iBlau
Rect 0, 0,dButton(i)\cmdWidth, dButton(i)\cmdHeight
Color 255, 255, 255
Text 0.5 * (dButton(i)\cmdWidth - StringWidth (dButton(i)\cmdCaption)), 0.5 * (dButton(i)\cmdHeight - FontHeight()) , dButton(i)\cmdCaption
Next
SetBuffer BackBuffer ()

End Function

Function DrawMenueGraphics(State$)

Local Index = 0

If State = "enabled" Then
DrawImage dButton(ObjektIndex)\cmdlActive, dButton(ObjektIndex)\cmdXPos,dButton(ObjektIndex)\cmdYPos
ElseIf State = "disabled" Then
DrawImage dButton(ObjektIndex)\cmdNotActive, dButton(ObjektIndex)\cmdXPos, dButton(ObjektIndex)\cmdYPos
EndIf

For Index = 1 To BorderNum
Color 255, 255, 255
Rect dBorder(Index)\bdrXPos, dBorder(Index)\bdrYPos, dBorder(Index)\bdrWidth, dBorder(Index)\bdrHeight, 0
Next

End Function

Function DeleteMenueGraphics()

Local Index% = 1
Dim dButton.tCommandButton (2)
ButtonNum = 0

End Function

Function Quit()
FreeFont font
FreeImage Bild
End
End Function


WaveView.bb
BlitzBasic: [AUSKLAPPEN]

Include "Calculations.bb"
Include"Menue.bb"
Include"Calculations.bb"
;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Global Zaehler% = 0
Global HilfsVar% = 0
Global Amplitude% = 18
Global Periode% = 3
CalcSin(Amplitude, Periode)

;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Function MainWave()

CreateWaveMenue()

Menu = ButtonNum
Repeat

MouseOver ()

If MouseHit(1) Then
If dButton(Menu)\cmdCaption = "X-Wave" Then CalcSin(18, 2 ):ViewWave("horizontal")
ElseIf MouseDown(1)Then
If dButton(Menu)\cmdCaption = "Periode +" Then
HilfsVar = 1
If HilfsVar = 1 Then
Periode = Periode + 1
CalcSin(18, Periode )
ViewWave("horizontal")
EndIf
EndIf
EndIf

Until MouseHit(1)

End Function

Function ViewWave(Direction$)

Local Index% = 0

Repeat
MouseOver()
If Direction = "horizontal" Then
If HilfsVar = 1 Then HilfsVar = 0
For Index = 0 To BildBreite
DrawImageRect Bild, 600 + SinusWerte[(Index + Zaehler)Mod 360], (200 + Index) + HilfsVar, 1, Index, BildBreite, 1
Next
Zaehler = (Zaehler + 1) Mod 360 ;Ersetzt >>> Zaehler = Zaehler+1 und If Zaehler = 360 Then Zaehler = 0 <<<
Else If Direction = "vertikal" Then
For i = 0 To BildHoehe
DrawImageRect Bild, 600 + Index, 200 + SinusWerte[(Index + Zaehler)Mod 360] ,Index ,1 , 1, BildHoehe
Next
Zaehler = (Zaehler + 1) Mod 360
EndIf
Until MouseHit(1)

End Function



Calculations.bb:
BlitzBasic: [AUSKLAPPEN]


Global SinusWerte%[360]

Function CalcSin(Amplitude%, Periode%)

For j% = 0 To 359
sinus = Sin(j * Periode ) * Amplitude
SinusWerte[j] = sinus
Next

End Function


Ich hoffe ich konnte den / die Fehler treffend beschreiben und Ihr könnt mir helfen!

Vielen Dank vorab,
Flush

Xeres

Moderator

BeitragMo, Apr 23, 2018 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du den Quelltext postest, geht er nicht so schnell verloren - aber es ist unpraktisch für Leute, die dir helfen wollen.
Du kannst Code und Bilder zippen, in unserem Archiv hochladen und hier den Link posten.

Bitte verzichte auch darauf, in Codeboxen Zeilen ohne Leerzeichen zu posten - die brechen das Forendesign auseinander.

Und zu guter letzt: Ein MAV ist sozusagen der Standarderror von BB. Mach den Debugger an und guck dir an, in welcher Zeile bei welchem Befehl etwas schief geht.
Was anderes können die Leute im Forum auch kaum machen (wenn es sich nicht um was super-auffälliges handelt).
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragMo, Apr 23, 2018 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Xeres,

natürlich habe ich den Debugger gestartet und nachgesehen was schief läuft. Ich weiß daß ein Bild nicht gefunden wird aber ich weiß nicht warum. Ich versuche das schon seit ca. 8 Tagen zu beheben, hab den Code ausgemistet, Teile neu geschrieben etc. aber ich befinde mich in einer Sackgasse und weiß nicht mehr weiter Embarassed . Für einen B3D Profi st das vllt. nur ein Witz wenn er den Fehler sieht aber bei mir ist sinnvolle Analyse schierer Verzweiflung gewichen Confused .
Ich kann nur hoffen daß Ihr mir da helfen könnt.
Ich habe die Files (.bb und Image) ins Archiv geladen:

https://www.blitzforum.de/upload/file.php?id=13349

Zitat:
Codeboxen Zeilen ohne Leerzeichen zu posten - die brechen das Forendesign auseinander

Das tut mir leid und soll nicht mehr vorkommen aber wo sind da "....Zeilen ohne Leerzeichen...."?

Ich weiß daß Blitz3D eigentlich nicht für Programme mit einer GUI geeignet ist (trotz Escape etc.) darum hab ich mir diese Mini Menue Engine entwicket.
Hoffentlich könnt Ihr mir helfen, ich bin total ratlos.

Vielen Dank für Eure Hilfe vorab,
Flusher

Xeres

Moderator

BeitragMo, Apr 23, 2018 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Kommentare hier mit
Code: [AUSKLAPPEN]
;---------------[...]

habe ich gemeint. Will dir ja nichts vorschreiben - aber was macht das in der IDE übersichtlicher?

Egal, Problem könnte sein:
BlitzBasic: [AUSKLAPPEN]
Bild = LoadImage ("Farbrausch.jpg")

Aber das Bild heißt "farbrausch.jpg"
Kann man Prüfen, indem man testet, ob die Variable Bild danach <>0 ist.

Definition und Zuweisung von Variablen muss man nicht trennen - gibt keinen Grund und macht für den Leser eher unklar, was da passieren soll.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragMo, Apr 23, 2018 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
@Xeres
Zitat:
;---------------[...]

Werd ich mir in Zukunft sparen.

Der Name war leider nicht das Problem. Das Programm arbeitet wie es soll. Es läd die Bitmap, zeigt die Buttons an und reagiert auf die Klicks.
Nur wenn ich zwischen die Buttons des Hauptmenues oder nicht auf die bestimmte Stelle des 1. Buttons im Hauptmenue klicke hinter dem dann beim Umschalten auf das Untermenue ein Button des Untermenues liegt bekomme ich im Debug Modus den Fehler "Object does not exist" an dieser Stelle BlitzBasic: [AUSKLAPPEN]
If dButton(Menu)\cmdCaption = "Image Sine Waves" Then DeleteMenueGraphics() : MainWave()

in der Datei SinusEffekte.bb.

Im Untermenue bekomme ich beim Klick zwischen die Buttens im Debug Modus die gleich Fehlermeldung an dieser Stelle BlitzBasic: [AUSKLAPPEN]
If dButton(Menu)\cmdCaption = "X-Wave" Then CalcSin(18, 2 ):ViewWave("horizontal")
in der WaveView.bb.

Es wird ein Object ==> Bild gesuch, das ist klar aber warum?
Es wurden alle erstellt und/ oder geladen da wo hingeklickt wird ist kein Bild, soll es auch nicht???????

Ändere ich in der WaveView die Buttonabfrage wie folgt dButton(Menu) ==> dButton(1) bzw. dButton(2):
BlitzBasic: [AUSKLAPPEN]
	If MouseHit(1) Then 
If dButton(1)\cmdCaption = "X-Wave" Then CalcSin(18, 2 ):ViewWave("horizontal")
ElseIf MouseDown(1)Then
If dButton(2)\cmdCaption = "Periode +" Then


Dann kommt keine Fehlermeldung egal wohin ich klicke aaaaber es wird bei jedem Klick die Periode erhöht egal auf welchen Button ich klicke auch wenn ich irgendwo in den Raum klicke, es findet anscheinend keine Abfrage mehr statt????.

Kann es daran liegen dass ich in einem MouseHit(1)-Ereignis ein MousDown(1)-Ereignis abfrage/ abfange und wenn ja wie kann ich's sonst machen dass sich bei m Betätigen des Periode + Buttons die Periode ständig ändert?

Vielen Dank für Eure Hilfe und Mühe,
Flush

Xeres

Moderator

BeitragMo, Apr 23, 2018 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
"Object does not exist" - Dann ist die Variable dButton(Menu) nicht mit einem gültigen Objekt - sprich Type - befüllt. Bilder sind keine Objekte.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragMo, Apr 23, 2018 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres
Ja das ist richtig. Ich versuch schon tagelang herauszufinden warum/ wo der Wert von Menue falsch gesetzt ist/ wird und wie es richtig sein müsste. Es kann nur in der WaveView.bb oder in der MouseOver() Funktion von Menue.bb sein aber ich finds einfach nicht!

Vielleicht ist es auch eine Kobination aus 2 Fehlern ?!

Ist das mit MouseHit(1) und dem darauffolgenden MouseDown (1) in der WaveView.bb in Ordnung?

Viele Grüße und Danke für Eure Hilfe,
Flush

Xeres

Moderator

BeitragMo, Apr 23, 2018 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Debuggen! Was steht in Menu drin? Fang am Anfang an und step mit dem Debugger so lange Zeile per Zeile durch, bis du siehst, was passiert.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragMo, Apr 23, 2018 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab Windows 10 Pro, BlitzView und IDEal springen zwar noch in den DebugModus aber ich kann leider nicht mehr Step by Step durchgehen da klappt gar nichts meht Crying or Very sad

Ich habs mit Hilfsvariablen abgefragt, in Menu steht der richtige Wert, ich glaube die Abfrage in WaveView ist falsch:

BlitzBasic: [AUSKLAPPEN]

If MouseHit(1) Then
If dButton(Menu)\cmdCaption = "X-Wave" Then CalcSin(18, 2 ):ViewWave("horizontal")
ElseIf MouseDown(1)Then
If dButton(Menu)\cmdCaption = "Periode +" Then
HilfsVar = 1
If HilfsVar = 1 Then
Periode = Periode + 1
CalcSin(18, Periode )
ViewWave("horizontal")
EndIf
EndIf
EndIf


MouseHit(1) und MouseDown(1) zusammen klappt anscheinend nicht. Aber wie ist die richtige Syntax?
Gibt es in den Tiefen des Archives CodeSnippets mit haupt- und Untermenues.
Ich hab mich schon fast wund gesucht aber alle was ich gefunden hab waren Tastaturgeschichten?!


Viele Grüße und Danke für Eure Hilfe,
Flush

Flush

BeitragMo, Apr 23, 2018 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem mit MouseHit(1) und MouseDown(1) hab ich gelöst Very Happy , ich habs nicht verschachtelt gemacht sondern nacheinander:

BlitzBasic: [AUSKLAPPEN]
		If MouseDown(1) Then 
If dButton(Menu)\cmdCaption = "X-Wave" Then CalcSin(18, 2):ViewWave("horizontal")
EndIf

If MouseDown(1)Then
If dButton(Menu)\cmdCaption = "Periode +" Then
HilfsVar = 1
If HilfsVar = 1 Then
Periode = Periode + 1
CalcSin(18, Periode )
ViewWave("horizontal")
EndIf
EndIf
EndIf


Wenn ich aber neben einen button klicke bekomme ich immer noch diese verdammte MAV Confused !

Viele Grüße,
Flush

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group