Menue Problem
Übersicht BlitzBasic Beginners-Corner
FlushBetreff: Menue Problem |
Sa, Apr 14, 2018 21:39 Antworten mit Zitat |
|
---|---|---|
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 . 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]
|
||
XeresModerator |
Sa, Apr 14, 2018 22:22 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Sa, Apr 14, 2018 22:37 Antworten mit Zitat |
|
---|---|---|
Hallo Xeres,
vielen Dank für Deine schnelle Antwort. Ich habe eine Globale Variable angelegt un den Code so abgeändert: BlitzBasic: [AUSKLAPPEN]
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 |
||
XeresModerator |
Sa, Apr 14, 2018 22:52 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Sa, Apr 14, 2018 22:57 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Apr 14, 2018 23:10 Antworten mit Zitat |
|
---|---|---|
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]
Viele Grüße und danke für die Mühe, Flush |
||
XeresModerator |
Sa, Apr 14, 2018 23:20 Antworten mit Zitat |
|
---|---|---|
Bitte versuche Doppelposts zu vermeiden, du kannst deine Beiträge nacheditieren.
Wenn das Snippet so aussieht: BlitzBasic: [AUSKLAPPEN] If mh1 Then 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Mo, Apr 16, 2018 19:22 Antworten mit Zitat |
|
---|---|---|
@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 |
||
XeresModerator |
Mo, Apr 16, 2018 19:42 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Mo, Apr 16, 2018 19:52 Antworten mit Zitat |
|
---|---|---|
Zitat: Kryptische Abkürzungen sind was für diese C Programmierer.
LLLLOOOLLLL, da komm ich her ! Aber auch C-Programmierer nutzen immer mehr leserliche Namen, es genügt die Standardbibliothek mit strcpy(), strcspn() etc...! Viele Grüße, Flush |
||
Flush |
Mo, Apr 23, 2018 17:49 Antworten mit Zitat |
|
---|---|---|
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]
Menue.bb BlitzBasic: [AUSKLAPPEN]
WaveView.bb BlitzBasic: [AUSKLAPPEN]
Calculations.bb: BlitzBasic: [AUSKLAPPEN]
Ich hoffe ich konnte den / die Fehler treffend beschreiben und Ihr könnt mir helfen! Vielen Dank vorab, Flush |
||
XeresModerator |
Mo, Apr 23, 2018 19:29 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Mo, Apr 23, 2018 19:57 Antworten mit Zitat |
|
---|---|---|
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 . 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 . 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 |
||
XeresModerator |
Mo, Apr 23, 2018 20:08 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Mo, Apr 23, 2018 20:33 Antworten mit Zitat |
|
---|---|---|
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 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 |
||
XeresModerator |
Mo, Apr 23, 2018 20:47 Antworten mit Zitat |
|
---|---|---|
"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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Mo, Apr 23, 2018 20:51 Antworten mit Zitat |
|
---|---|---|
@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 |
||
XeresModerator |
Mo, Apr 23, 2018 20:56 Antworten mit Zitat |
|
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Flush |
Mo, Apr 23, 2018 21:06 Antworten mit Zitat |
|
---|---|---|
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
Ich habs mit Hilfsvariablen abgefragt, in Menu steht der richtige Wert, ich glaube die Abfrage in WaveView ist falsch: BlitzBasic: [AUSKLAPPEN]
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 |
Mo, Apr 23, 2018 21:30 Antworten mit Zitat |
|
---|---|---|
Das Problem mit MouseHit(1) und MouseDown(1) hab ich gelöst , ich habs nicht verschachtelt gemacht sondern nacheinander:
BlitzBasic: [AUSKLAPPEN] If MouseDown(1) Then Wenn ich aber neben einen button klicke bekomme ich immer noch diese verdammte MAV ! Viele Grüße, Flush |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group