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:

Konflikt zwischen GETMOUSE und Texteingabe

 
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
Lothar Schirm



Anmeldungsdatum: 24.04.2006
Beiträge: 65
Wohnort: Bayern

BeitragVerfasst am: 24.04.2006, 18:03    Titel: Konflikt zwischen GETMOUSE und Texteingabe Antworten mit Zitat

Ich möchte gern mit der linken Maustaste auf den Bildschirm klicken und an der angeklickten Stelle eine Variable eingeben können (z.B. mit INPUT). Das soll so lange gehen, bis ein "END"-Button (beginnend in Zeile 24, Spalte 40) angeklickt wird. Typische Anwendung wäre zum Beispiel das Ausfüllen einer Eingabemaske auf dem Bildschirm. Das funktioniert jedoch nicht, nach der ersten Eingabe mit INPUT rutscht der CURSOR immer wieder in die zuerst angeklickte Position.

Das Programm ist unten angegeben. Wenn man statt INPUT z.B. INKEY verwendet, passiert der selbe Fehler. Nur Anzeigen von Text funktioniert, d.h. wenn man statt der INPUT-Anweisung z.B. in das Programm PRINT "Hallo!" einbaut, kann man den ganzen Bildschirm mit "Hallo" zuklicken.


missbilligen
Code:
SCREEN 0
WIDTH 80, 25

LOCATE 24, 40
COLOR 15, 3
PRINT "ENDE"

COLOR 7, 0
DO
  GETMOUSE x, y,, buttons
  IF BIT(buttons, 0) THEN
    LOCATE y, x
    INPUT a$
  END IF
LOOP UNTIL BIT(buttons, 0) AND (x >= 40) AND (x <= 43) AND (y >= 24)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 24.04.2006, 18:44    Titel: Antworten mit Zitat

Hi,
kein Fehler, versuch mal als erste Zeile
Code:
Dim As Integer x,y,buttons
SCREEN 0
WIDTH 80, 25

LOCATE 24, 40
COLOR 15, 3
PRINT "ENDE"

COLOR 7, 0
DO
  GETMOUSE x, y,, buttons
  IF BIT(buttons, 0) THEN
    LOCATE y, x
    INPUT a$
  END IF
LOOP UNTIL BIT(buttons, 0) AND (x >= 40) AND (x <= 43) AND (y >= 23)
und letzte Zeile '(y >= 23)'.
Aber nicht wundern, erst wenn du Imput mit der 'Return-Taste' abschließt wird die Do-Loop-Schleife beendet.
Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lothar Schirm



Anmeldungsdatum: 24.04.2006
Beiträge: 65
Wohnort: Bayern

BeitragVerfasst am: 24.04.2006, 18:58    Titel: Antworten mit Zitat

Hallo Volta,

vielen Dank! Die Zeile mit DIM ändert das Verhalten des Programms nicht. Wie würdest Du die Mausroutine schreiben, damit es funktioniert? Oder blockiert INPUT generell die Mausklickerei?

Herzliche Grüße,
Lothar
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 24.04.2006, 19:10    Titel: Antworten mit Zitat

INPUT wartet generell, bis die Eingabe mit ENTET bestätigt wurde.
Vielleicht solltest du dir selber eine eigene Eingaberoutine basteln...
Anregungen siehe MonsterFAQ unter Tastatureingabe.

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 24.04.2006, 19:12    Titel: Antworten mit Zitat

ja, hab ich auch gerade gemerkt.
Was mich zum stolpern brachte waren die x,y Werte von Getmouse, x wird 0-79 und y wird 0-24.
Zitat:
Oder blockiert INPUT generell die Mausklickerei?
Blockiert nicht, aber die Programmausführung wartet bis zum Betätigen der Return-Taste, das ist normal!
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lothar Schirm



Anmeldungsdatum: 24.04.2006
Beiträge: 65
Wohnort: Bayern

BeitragVerfasst am: 25.04.2006, 17:59    Titel: Antworten mit Zitat

Hallo, da bin ich wieder. Dass die Input-Anweisung auf die Enter-Taste wartet, ist klar. Das von mit beschriebene Verhalten tritt auf, wenn man die erste Input-Anweisung mit "Enter" beendet hat. Der Cursor rutscht dann wieder dorthin, wo vorher mit der Maustaste hingeklickt wurde (nicht auf die nächste Zeile, wie man es nach "INPUT" + Enter erwarten würde). Man kann dann auch mit der Maus den Cursor nirgends mehr hinklicken, d.h. anscheinend hängt das Programm nach der Abarbeitung der ersten INPUT-Anweisung in einer Schleife

LOCATE y, x
INPUT a$

und kommt da nicht mehr raus. Bleibt vielleicht die Bedingung
BIT(buttons, 0) = 1 weiterhin aktiv, obwohl die Maustaste längst losgelassen wurde? Eigentlich hatte ich erwartet, dass man nach der Enter-Taste den Cursor durch einen erneuten Mausklick woanders hinsetzen kann und dann dort eine erneute INPUT-Anweisung abarbeiten kann.

Viele Grüße,
Lothar
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 25.04.2006, 18:08    Titel: Antworten mit Zitat

Bei mir funktioniert es auch.

Mal wieder eine Runde Bug suche:
Welche Freebasic Version hast du?
Welches Betriebssystem?
(Es kann durchaus ein Fehler in Freebasic selbst sein)

Zitat:
BIT(buttons, 0) = 1 weiterhin aktiv, obwohl die Maustaste längst losgelassen wurde?

BIT(buttons, 0) = 1 ist nur solange gültig (="Aktiv"), wie die Maustaste gedrückt wird.
Wenn du sie los lasst, wird die Bedinung ungultig (="Inaktiv").

Hier ein kleines Prüfprogramm für den GETMOUSE Befehl:
Code:
DO
    locate 1,1
    GETMOUSE x, y,, buttons
    ? x
    ? y
    ? buttons
    ? BIT(buttons, 0)
    sleep 1
LOOP

Du siehst, BIT(buttons, 0) ist nur solange eins wie du drückst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Lothar Schirm



Anmeldungsdatum: 24.04.2006
Beiträge: 65
Wohnort: Bayern

BeitragVerfasst am: 25.04.2006, 18:21    Titel: GETMOUSE klemmt auch mit GETKEY Antworten mit Zitat

Hallo Michael,

Betriebssystem ist Windows XP Home Edition. Ich habe die FBIde 0.4.2 (Rundum-Sorglos-Paket, Download im Januar). Das folgende Programm hängt sich ebenfalls auf, und zwar nach der nach der ersten Tastenbetätigung (Anweisung GETKEY):

Code:
Dim As Integer x,y,taste
SCREEN 0
WIDTH 80, 25

LOCATE 24, 40
COLOR 15, 3
PRINT "ENDE"

COLOR 7, 0
DO
  GETMOUSE x, y,, taste
  IF BIT(taste, 0) THEN
    LOCATE y, x
    GETKEY
  END IF
LOOP UNTIL BIT(taste, 0) AND (x >= 40) AND (x <= 43) AND (y >= 23)


Viele Grüße,
Lothar
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 25.04.2006, 18:56    Titel: Antworten mit Zitat

Hi,
die Probleme hab ich mit ME garnicht.
So geht es ganz gut:
Code:
Screen 0
Width 80, 25

Color 15, 12
Locate 1, 2 : Print __FB_VERSION__

Locate 10, 2 : Print "Vorname :"
Locate 15, 5 : Print "Name :"
Color 15, 3
Locate 24, 40 : Print "ENDE"

Color 7, 0
e=0
Do
  GetMouse x, y,, buttons
  Locate y, x
  If Bit(buttons, 0) Then
    If y=10 Then
      Locate 10, 11
      Input a$
    END If
    If y=15 Then
      Locate 15, 11
      Input b$
    End If
    If (x >= 39) And (x <= 42) And (y >= 23) Then
      e=1
    End If
  End If
Loop Until e>0
und so siehst du auch deine FB-Version. grinsen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lothar Schirm



Anmeldungsdatum: 24.04.2006
Beiträge: 65
Wohnort: Bayern

BeitragVerfasst am: 25.04.2006, 19:50    Titel: FB Version Antworten mit Zitat

Hallo Volta,

Dein Programm hat bei mir das gleiche Problem wie gehabt. Dein Befehl Print __FB_VERSION__ führt bei mir zur Anzeige "0.14". Vielleicht ist das das Problem. Welche Version ist die neueste freigegebene? 0.15b?

Viele Grüße,
Lothar

verlegen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 25.04.2006, 19:56    Titel: Antworten mit Zitat

Aktuell ist 0.15 Stable und 0.16 Testing.

Übrigens:
Es gibt auch eine Neu IDE Version.
Hier der Link zum Aktuellen komplett Paket:
Komplett Paket

Nur IDE

Nur Freebasic 0.15
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 25.04.2006, 20:04    Titel: Antworten mit Zitat

obligatorische Warnung!
installiere in ein neues Verzeichnis, nicht über die alte FB 0.14 Version überbügeln!!
Das führt zu Komplikationen mit den bi-Dateien.
EDIT\
Michael, tritt der Fehler den Lothar beschreibt denn bei dir (ich vermute bei dir XP ,FB .16) auch auf??
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lothar Schirm



Anmeldungsdatum: 24.04.2006
Beiträge: 65
Wohnort: Bayern

BeitragVerfasst am: 26.04.2006, 10:50    Titel: Antworten mit Zitat

Hallo miteinander,

ich habe das neuste Komplettpaket mit der Version 0.15 installiert. Jetzt geht´s! Vielen Dank für Eure Bemühungen!

Lothar

happy
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