 |
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 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 24.04.2006, 18:03 Titel: Konflikt zwischen GETMOUSE und Texteingabe |
|
|
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.
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 24.04.2006, 18:44 Titel: |
|
|
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 |
|
 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 24.04.2006, 18:58 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 24.04.2006, 19:10 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 24.04.2006, 19:12 Titel: |
|
|
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 |
|
 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 25.04.2006, 17:59 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 25.04.2006, 18:08 Titel: |
|
|
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 |
|
 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 25.04.2006, 18:21 Titel: GETMOUSE klemmt auch mit GETKEY |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.04.2006, 18:56 Titel: |
|
|
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.  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 25.04.2006, 19:50 Titel: FB Version |
|
|
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
 |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 25.04.2006, 19:56 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.04.2006, 20:04 Titel: |
|
|
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 |
|
 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 26.04.2006, 10:50 Titel: |
|
|
Hallo miteinander,
ich habe das neuste Komplettpaket mit der Version 0.15 installiert. Jetzt geht´s! Vielen Dank für Eure Bemühungen!
Lothar
 |
|
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.
|
|