Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

anfängerproblem:getmouse und input

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
bigrip



Anmeldungsdatum: 01.03.2009
Beiträge: 2

BeitragVerfasst am: 01.03.2009, 16:31    Titel: anfängerproblem:getmouse und input Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 01.03.2009, 18:38    Titel: Re: anfängerproblem:getmouse und input Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 01.03.2009, 19:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 01.03.2009, 19:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
bigrip



Anmeldungsdatum: 01.03.2009
Beiträge: 2

BeitragVerfasst am: 01.03.2009, 19:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 01.03.2009, 19:54    Titel: Antworten mit Zitat

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. happy
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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz