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:

Wie funktioniert getmouse?

 
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 15.12.2016, 09:02    Titel: Wie funktioniert getmouse? Antworten mit Zitat

Mein Problem wird aus diesem Programm deutlich:

Wenn ich mit der Maus die 2 anklicke, musste die Variable Zahl doch wohl den Wert 2 annehmen oder?

DIM shared AS INTEGER buttons,Breite,hoehe,x,y,zahl
dim shared as string eingabe,sz
screeninfo Breite,hoehe
SCREENRES breite,hoehe,32
Width breite\8,hoehe\16
color,RGB(139,90,43)
CLS:zahl=0
?" Bitte waehle eine Zahl:"
?:?:?" 1"
?:?:?:?:?:?" 2"
Do
GetMouse x,y,,buttons
If buttons and x>0 and y<1000 Then zahl=1
If buttons and x>0 and y>1000 Then zahl=2
eingabe=INKEY
IF eingabe<>"" then zahl=100
Loop While zahl=0
?:?" zahl muesste 2 oder 100 sein; zahl=";zahl:getkey
if zahl=100 then goto tastatureingabe
goto ProgZuweisung
tastatureingabe:
eingabe=input(1)
zahl=val(eingabe):
ProgZuweisung:
CLS
?" zahl=";zahl
getkey:end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 15.12.2016, 09:44    Titel: Antworten mit Zitat

Wenn ich es mal kurz überfliege: Da du Schrifthöhe 16px eingestellt hast und, wenn ich mich nicht verzählt habe, die "2" in der zehnten Zeile steht, müsste y, wenn du "2" anklickst, einen Wert von 160 bis 176 annehmen, aber keinesfalls >1000. Lass dir doch in einer Schleife mal die Rckgabewerte von GETMOUSE ausgeben, dann siehst du besser, wie die Werte funktionieren.
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 15.12.2016, 10:41    Titel: Antworten mit Zitat

danke, nemored.
Habe mir vor der fertigstellung des programms die x-, y-werte angesehen. die werte sind wohl wegen des grafikbildschirms so hoch. mit deinen werten habe ich es auch versucht, aber es klappt nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 15.12.2016, 11:08    Titel: Antworten mit Zitat

Hallo HD!

Wenn du das Programm um ein paar Zeilen ergänzt, kannst du sehen, wo das Problem liegt:
Code:
...
Do
GetMouse x,y,,buttons
Locate 2,1,0
? "x =";x;"   "
? "y =";y;"   "
If buttons and x>0 and y<1000 Then zahl=1
If buttons and x>0 and y>1000 Then zahl=2
eingabe=INKEY
IF eingabe<>"" then zahl=100
Loop While zahl=0
...


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 15.12.2016, 11:43    Titel: danke grindstone! Antworten mit Zitat

die routine habe ich angewandt. Vielleicht haben Du und nemored die vielen print-befehle zwischen q und 2 uebersehen.
gruss HD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 15.12.2016, 12:20    Titel: Antworten mit Zitat

Ihr hattet recht.
Mein Fehler lag inder Anzeige:

Locate 1,1:Print Using "Maus-Position: ###:###";x;y; -

- hier hatte ich die falschen werte abgelesen.
Darauf waere ich allein nicht so schnell gekommen.
Vielen dank fuer die hilfe und schoene feiertage!

HD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 15.12.2016, 16:05    Titel: Antworten mit Zitat

Wenn du halt einen y-Wert von > 1000 haben willst, müsstest du dich schon in der 63. Textzeile befinden. Und 63 PRINT-Anwesiungen habe ich tatsächlich nicht gesehen. grinsen
Aber jetzt kennst du ja die richtigen Werte. lächeln

Was anderes: Wenn du mit Textausgabe und Positionsabfrage arbeitest, würde ich im Grafikfenster statt der PRINT-Anweisungen DRAW STRING empfehlen. Da kannst du pixelgenau positionieren.
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 16.12.2016, 16:43    Titel: Antworten mit Zitat

Lieber nemored, vielen Dank!
Kannst Du mir auch noch sagen, wieso das folgende nur kaum veraenderte programm nicht funktioniert? ich bekomme da nicht einmal die eingabe-aufforderung zu sehen.

Code:
DIM shared AS INTEGER buttons,Breite,hoehe,x,y,zahl
dim shared as string eingabe,sz
screeninfo Breite,hoehe
SCREENRES breite,hoehe,32
Width breite\8,hoehe\16
color,RGB(139,90,43)
zahl=0
CLS:?" Bitte waehle eine Zahl:"
?:?:?" 1           2"
Do
GetMouse x,y,,buttons
'Locate 1,1.0:? "x =";x;"   ":? "y =";y;"   "
If buttons and x<60 and y<70 Then zahl=1
If buttons and x>60 and y<70 Then zahl=2
eingabe=INKEY
IF eingabe<>"" then zahl=100
Loop While zahl=0
if zahl=100 then goto tastatureingabe
goto ProgZuweisung
tastatureingabe:
eingabe=input(1)
zahl=val(eingabe):
ProgZuweisung:
CLS
?" zahl=";zahl
getkey:end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 16.12.2016, 20:54    Titel: Antworten mit Zitat

Das ist einer der ganz gemeinen Fehler, nach denen man sich totsuchen kann: Wenn sich der Mauszeiger ausserhalb das Grafikfensters befindet, werden alle Werte von GetMouse auf -1 gesetzt, und damit ist dann die erste If - Bedingung erfüllt. Versuch's mal so:
Code:
...
Do
   GetMouse x,y,,buttons
   '   Locate 1,1,0':? "x =";x;"   ":? "y =";y;"   "
   If buttons = 1 And x<60 And y<70 Then zahl=1
   If buttons = 1 And x>60 And y<70 Then zahl=2
   eingabe=Inkey
   If eingabe<>"" Then zahl=100
Loop While zahl=0
...

Damit fragst du gezielt die linke Maustaste ab und das Problem ist gelöst.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 17.12.2016, 06:46    Titel: Antworten mit Zitat

Lieber grindstone, vielen Dank!

Es funktioniert. Aber wenn ich in einem untermenu noch einmal abfragen will, bekomme ich da wieder nicht einmal die eingabe-aufforderung zu sehen, ausser ich entreme das getkey, aber das stoert:

Code:
DIM shared AS INTEGER buttons,Breite,hoehe,x,y,zahl
dim shared as string eingabe,sz
screeninfo Breite,hoehe
SCREENRES breite,hoehe,32
Width breite\8,hoehe\16
color,RGB(139,90,43)
Hauptmenue:
?" 1 "
?" 2 "
?" - Nummer des gewuenschten Programms?"
Do
GetMouse x,y,,buttons
'Locate 1,1.0:? "x =";x;"   ":? "y =";y;"   "
If buttons=1 and x>0 and y> 0 and y<15 Then zahl=1
If buttons=1 and x>0 and y>14 and y<30 Then zahl=2
eingabe=INKEY
IF eingabe<>"" then zahl=100
Loop While zahl=0
if zahl=100 then goto tastatureingabe1
goto ProgrammZuweisung1
tastatureingabe1:
zahl=0
input eingabe
eingabe=lcase(eingabe)
if eingabe="e" or eingabe="k" then end
zahl=val(eingabe):
ProgrammZuweisung1:
cls
if zahl=1 then ?:?" zahl=";zahl
if zahl=2 then ?:?" zahl=";zahl
?:?
'getkey
untermenue:
zahl=0
?" Bitte waehle eine Zahl:"
?:?:?" 1           2"
Do
GetMouse x,y,,buttons
'Locate 1,1.0:? "x =";x;"   ":? "y =";y;"   "
If buttons=1 and x<60 Then zahl=1
If buttons=1 and x>60 Then zahl=2
eingabe=INKEY
IF eingabe<>"" then zahl=100
Loop While zahl=0
if zahl=100 then goto tastatureingabe
goto ProgZuweisung
tastatureingabe:
eingabe=input(1)
zahl=val(eingabe):
ProgZuweisung:
CLS
?" zahl=";zahl
getkey:end


gruss HD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 17.12.2016, 08:30    Titel: Antworten mit Zitat

Zitat:
Das ist einer der ganz gemeinen Fehler, nach denen man sich totsuchen kann: Wenn sich der Mauszeiger ausserhalb das Grafikfensters befindet, werden alle Werte von GetMouse auf -1 gesetzt, und damit ist dann die erste If - Bedingung erfüllt.

Ansonsten kann man auch den Rückgabewert von GETMOUSE überprüfen; der muss 0 sein, wenn der Aufruf erfolgreich war.

Zitat:
Aber wenn ich in einem untermenu noch einmal abfragen will, bekomme ich da wieder nicht einmal die eingabe-aufforderung zu sehen

Du meinst diesen Teil?
Code:
tastatureingabe:
eingabe=input(1)
zahl=val(eingabe):

In dieser zweiten Abfrage steht keine Eingabe"aufforderung". Da hast du nur ein "eingabe=input(1)"; das wartet auf eine Taste, gibt aber keine Aufforderung oder Rückmeldung dazu aus.
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 17.12.2016, 11:04    Titel: Antworten mit Zitat

nein, ich meine den gesamten zweiten teil meines programms,
der mit 'untermenue:' anfaengt. Wenn du davor getkey entremst,
funktioniert alles. aber das getkey stort mich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 17.12.2016, 12:51    Titel: Antworten mit Zitat

Du hast ein Timingproblem: Wenn das Programm bei der zweiten Mausabfrage ankommt, ist die Taste immer noch gedrückt, so daß es gleich munter weitergeht. Vor dem Sprung nach ProgrammZuweisung1 (oder wahlweise auch anstelle des GetKey) solltest du auf das Loslassen der Taste warten.
Code:
Do While buttons
   GetMouse x,y,,buttons
Loop


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 17.12.2016, 13:47    Titel: Antworten mit Zitat

jetz bisse scho a gute progammer!
un erklaert hattus auch.
ich denke, dass ich jetzt klarkomme.
vielen dank!
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