|
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 |
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 15.12.2016, 10:02 Titel: Wie funktioniert getmouse? |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 15.12.2016, 10:44 Titel: |
|
|
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 15.12.2016, 11:41 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 15.12.2016, 12:08 Titel: |
|
|
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 15.12.2016, 12:43 Titel: danke grindstone! |
|
|
die routine habe ich angewandt. Vielleicht haben Du und nemored die vielen print-befehle zwischen q und 2 uebersehen.
gruss HD |
|
Nach oben |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 15.12.2016, 13:20 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 15.12.2016, 17:05 Titel: |
|
|
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.
Aber jetzt kennst du ja die richtigen Werte.
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 16.12.2016, 17:43 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 16.12.2016, 21:54 Titel: |
|
|
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 17.12.2016, 07:46 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 17.12.2016, 09:30 Titel: |
|
|
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 17.12.2016, 12:04 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 17.12.2016, 13:51 Titel: |
|
|
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 |
|
|
HD
Anmeldungsdatum: 14.11.2015 Beiträge: 35 Wohnort: Polen
|
Verfasst am: 17.12.2016, 14:47 Titel: |
|
|
jetz bisse scho a gute progammer!
un erklaert hattus auch.
ich denke, dass ich jetzt klarkomme.
vielen dank! |
|
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.
|
|