 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
bigrip
Anmeldungsdatum: 01.03.2009 Beiträge: 2
|
Verfasst am: 01.03.2009, 16:31 Titel: anfängerproblem:getmouse und input |
|
|
Also ich hab mit meinen ersten programm ein problem ,ich will ein kleines anklickbares menü am unteren Bildschirmrand.Doch es funktioniert nicht.Wenn ich auf daten klicke passiert nix.
Ist es weil input das programm anhält?Oder ist irgendwo anders der wurm drin?
Code: | Screenres 400,200
Dim As Integer x,y,taste
Dim As Single ergebniss
Dim As String gramm,kosten,jnd,daten
Do
Getmouse x, y, , taste
If taste And 1 Then
If x > 165 And x < 235 And y > 180 And y < 190 Then
jnd = "d"
End If
End If
If jnd ="n" Then
Goto anfang
End If
If jnd = "e" Then
End
End If
daten:
If jnd = "d" Then
Cls
Open "data.txt" For Input As #1
Do Until Eof (1)
Line Input #1 ,daten
Color 14
Print Mid (daten,1,5)
Sleep 250
Loop
Close #1
Locate 25,0
Color 15
Print "Fšr Weiter Space Taste Dršcken"
Sleep
End If
anfang:
Cls
Sleep 100
Locate 25,10
Color 13
Print "Nochmal(N) Daten?(D) Ende(E)"
Locate 3,3
Color 12
Input "Wieviel hast du bezahlt ? : ", kosten
Locate 6,3
Color 12
Input "Wieviel hast du bekommen ? : ", gramm
ergebniss = Val(kosten) / Val(gramm)
Cls
Locate 3,3
Color 10
Print "1 Gramm Gold Kostet = " + Str(ergebniss)
If ergebniss > 2 Then
Open "data.txt" For Append As #1
Write #1 ,ergebniss
Close #1
End If
Locate 25,10
Color 13
input "Nochmal(N) Daten?(D) Ende(E) : " ,jnd
Loop Until jnd="e"
end |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 01.03.2009, 18:38 Titel: Re: anfängerproblem:getmouse und input |
|
|
bigrip hat Folgendes geschrieben: | Ist es weil input das programm anhält? |
Genau so ist es; wenn ich es richtig sehe, dann bist du zu jedem Zeitpunkt in irgendeiner INPUT-Eingabe - außer du würdest in den wenigen Mikrosekunden zwischen der letzten und der ersten Eingabe klicken. Kannst du ausprobieren, indem du vor der Eingabe "Nochmal(N) Daten?(D) Ende(E) : " schon auf Daten klickst und die Maustaste bis nach dem Return gedrückt hältst (musst aber da anklicken, wo vorher die Daten standen).
Lösungsvorschlag: Erstelle doch auch einen Menüpunkt für die Eingabe, sodass die INPUT-Zeilen nur aufgerufen werden, wenn der entsprechende Menüpunkt angeklickt wurde. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 01.03.2009, 19:06 Titel: |
|
|
Alternativ: Multithreading
So lassen sich die Reihenfolge der Inputs beibehalten und nebenbei Mausabfragen gleichzeitig realisieren. Das ist aber nicht unbedingt Anfängergeeignet.
Man könnte auch statt Input mit Inkey tricksen und das in Do-Schleifen nacheinander mit GetMouse abfragen, ist aber auch ein wenig kompliziert.
Trennen würde ich mich auf jedenfall von den Goto's und gegen Do-Schleifen tauschen (Goto nur, wenn es wirklich nicht anders geht). Statt der If-Abfragen, wäre ein Select Case jnd auch die bessere Wahl.
Ist alles nicht nötig, macht den Code aber lesbarer und die Programmierung strukturierter. |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 01.03.2009, 19:30 Titel: |
|
|
Notfalls eine eigene Eingabe-Routine schreiben, oder meine (zu finden im Porticula-Nopaste) Umschreiben. (Tipp: Inkey)
Allernativ, bzw. ergänzen könntest du ne Button-routine erstellen (bei klick auf button wird ne sub ausgelöst o.ä)
Allerdings weiß ich nicht ob du sowas schon kannst... (auch sowas hab ich schon geschrieben, aber eher aus langeweile... xD)
Was soll dein Programm eigentlich können... ist interresant zu wissen in wie weit sich der Aufwand lohnt. _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
bigrip
Anmeldungsdatum: 01.03.2009 Beiträge: 2
|
Verfasst am: 01.03.2009, 19:47 Titel: |
|
|
Danke für euere hilfe und tips.
Das mit den neuen menüpunkt für die eingabe hat wunderbar funktioniert.
Code: | Screenres 400,200
Dim As Integer x,y,taste
Dim As Single ergebnis
Dim As String bed,gramm,kosten,daten
anfang:
Cls
Locate 25,10
Color 13
Print "Eingabe(b) Daten(D) Ende(E)"
Do
Getmouse x, y, , taste
If taste And 1 Then
If x > 70 And x < 150 And y > 180 And y < 190 Then
bed = "b"
End If
End If
If taste And 1 Then
If x > 165 And x < 235 And y > 180 And y < 190 Then
bed = "d"
End If
End If
If taste And 1 Then
If x > 255 And x < 306 And y > 180 And y < 190 Then
End
End If
End If
If bed = "d" Then
Cls
Open "data.txt" For Input As #1
Do Until Eof (1)
Line Input #1 ,daten
Color 14
Print Mid (daten,1,5)
Sleep 250
Loop
Close #1
bed ="w"
Locate 20,0
Color 15
Print "Fšr Weiter Space Taste Dršcken"
Sleep
goto anfang
End If
If bed = "b" Then
Cls
Sleep 100
Locate 3,3
Color 12
Input "Wieviel hast du bezahlt ? : ", kosten
Locate 6,3
Color 12
Input "Wieviel hast du bekommen ? : ", gramm
ergebnis = Val(kosten) / Val(gramm)
Cls
Locate 3,3
Color 10
Print "1 Gramm Gold Kostet = " + Str(ergebnis)
Locate 25,0
Color 15
Print "Fšr Weiter Space Taste Dršcken"
Open "data.txt" For Append As #1
Write #1 ,ergebnis
Close #1
bed = "w"
Sleep
Goto anfang
End If
Loop Until bed="e"
|
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 01.03.2009, 19:54 Titel: |
|
|
SUBs bieten sich halt hauptsächlich dann an, wenn ein bestimmter Programmteil mehrmals gebraucht wird oder wenn das Programm dadurch deutlich an Übersichtlichkeit gewinnt. In diesem Fall würde ich das etwa so probieren (z. T. Pseudocode):
Code: | DO
GETMOUSE x, y,, taste
' Eingabe
jnd = INKEY
IF taste AND 1 THEN
IF {Maus innerhalb des 'Nochmal'-Buttons} THEN
jnd = "n"
ELSEIF {Maus innerhalb des 'Daten'-Buttons} THEN
jnd = "d"
ELSEIF {Maus innerhalb des 'Ende'-Buttons} THEN
jnd = "e"
ENDIF
END IF
' Auswertung
SELECT CASE jnd ' oder alternativ mit IF ... ELSEIF ... END IF
CASE "n"
' Eingabe neuer Daten
CASE "d"
' Anzeige der gespeicherten Daten
END SELECT
LOOP UNTIL jnd = "e" |
edit: hat sich weitgehend erübrigt; ich habe zu lange zum Tippen gebraucht.
Das "IF taste AND 1" lässt sich bei dir aber zusammenfassen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|