|
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 |
Muecke Gast
|
Verfasst am: 16.01.2014, 23:08 Titel: Mausrad verändert seinen wert beim verlassen des Grafigfen.. |
|
|
Hallo miteinander,
ich habe hier im Forum jetzt sehr viel über das Mausrad gelesen und echt schöne Ansätze gefunden, so das ich mir meine eigene Routine schreiben konnte
Jetzt kann ich mit dem Mausrad in meinen Datensätzen hin und her Scrollen echt Cool .
nur leider verändert FB den Wert des Mausrades sobald die Maus nicht mehr im Grafikfenster ist was sehr unschön ist.
denn ich Überprüfe die gesamte Zeit ob sich das Mausrad verändert und reagiere darauf der echte wert des Rades ist somit für mich nicht wirklich wichtig. doch das bringt mich schon zu meinem Fehler denn der Wert des Mausrades wird "-1" wenn die Maus das Grafikfenster verlässt.
ich habe den Teil des Mausrades in eine Testdatei gepackt um es gesondert zu testen siehe Code:
der Aktuelle Frame soll nur durch das Mausrad und nicht durch das Verlassen des Fensters oder wider eintreten in das Fenster mit der Maus verändert werden.
hat mir jemand einen Tipp?
ich habe auch schon versucht die Maus System weit abzufragen da wäre das Problem nicht mit dem Rad da habe ich das Problem das ich meine Restlichen Knöpfe auf dem Monitor nicht mehr wiederfinde denn das Fenster kann ja dann hin und her bewegt werden und meine Knöpf sind dann nicht mehr dort wo ich sie vermutet.
das ist mein Code:
Code: | Dim As Integer mX, mY, mW, mW_Alt, mB, Frame_Alt, Frame_Aktueller
ScreenRes 300, 300, 32 '' Fenster erstellen
Do
GetMouse mX, mY, mW, mB
If mW_Alt < mW Then '' -->> MausRad Hoch <<--
Frame_Alt = Frame_Aktueller
Frame_Aktueller + = 1
mW_Alt = mW
ElseIf mW_Alt > mW Then '' -->> MausRad Runter <<--
Frame_Alt = Frame_Aktueller
Frame_Aktueller - = 1
mW_Alt = mW
EndIf
If Frame_Aktueller <> Frame_Alt Then '' Prüfen ob ein Neuer Frame aufgerufen werden soll
Locate 10, 10: Print Using "Aktueller Frame = #####"; Frame_Aktueller
Locate 11, 10: Print Using "Mausrad Wert = #####"; mW
Frame_Alt = Frame_Aktueller
EndIf
Sleep 1 '' Um die Auslastung durch das Prog zu minimiren
Loop Until InKey = Chr(27) '' ESC Taste
End |
EDIT: gelöst
Sorry, man ich glaube ich sollte für heute aufhören jetzt sitze ich hier uns versuche eine Lösung zu finden und dann als ich das hier im Forum fertig hatte und abgeschickt hatte, Kamm mir eine Idee ich ignoriere einfach die "-1" vom Mausrad also vom echten wert
gedacht gemacht und schon ist das Problem verschwunden
in diesem Sinne wünsche ich eine GUTE NACHT.
das ist der CODE dann dazu bei dem das Problem nicht mehr vorliegt.
Code: | Dim As Integer mX, mY, mW, mW_Alt, mB, Frame_Alt, Frame_Aktueller
ScreenRes 300, 300, 32 '' Fenster erstellen
Do
GetMouse mX, mY, mW, mB
If mW_Alt < mW And mW <> -1 Then '' -->> MausRad Hoch <<--
Frame_Alt = Frame_Aktueller
Frame_Aktueller + = 1
mW_Alt = mW
ElseIf mW_Alt > mW And mW <> -1 Then '' -->> MausRad Runter <<--
Frame_Alt = Frame_Aktueller
Frame_Aktueller - = 1
mW_Alt = mW
EndIf
If Frame_Aktueller <> Frame_Alt Then '' Prüfen ob ein Neuer Frame aufgerufen werden soll
Locate 10, 10: Print Using "Aktueller Frame = #####"; Frame_Aktueller
Locate 11, 10: Print Using "Mausrad Wert = #####"; mW
Frame_Alt = Frame_Aktueller
EndIf
Sleep 1 '' Um die Auslastung durch das Prog zu minimiren
Loop Until InKey = Chr(27) '' ESC Taste
End |
ich hätte jetzt gerne die Veränderung Rot markiert ich wies nur nicht wie das geht
das ist die Veränderung jedenfalls: "And mW <> -1" |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 16.01.2014, 23:16 Titel: |
|
|
Sobald sich die Maus außerhalb des Grafikfensters befindet, werden alle Werte mit -1 zurückgegeben. Wenn du den Rückgabewert für das Maustad nutzen willst, musst du zusätzlich den Rückgabewert von GETMOUSE selbst auswerten (siehe: GETMOUSE als Funktion) oder prüfen, ob die Koordinaten größer oder gleich 0 sind (weil hier negative Werte nur vorkommen können, wenn sich die Maus außerhalb des Fensters befindet).
Der Mausrad-Wert kann dagegen tatsächlich auch den Wert -1 annehmen; einfach nur den auszuschließen ist also nicht so zweckdienlich. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 16.01.2014, 23:19 Titel: |
|
|
@nemored .. da muss ich dir leider wiedersprechen ... das Mausrad (Z-achse) ist das einzigste element in getmaus, das auch negative werte annehmen kann, da es den wert für jede bewegung des rad's in/decrementiert.
Daher ist es sinvoll einfach nur den rückgabewert des getmouse funktionsaufrufes zu prüfen, und anhand dieses wertes zu entscheiden, ob die maus innerhalb oder auserhalb des fensters ist.
MfG
TPM
[edit] @Nemored .. grad gesehen das du das auch so geschrieben hast .. da habe ich deinen post wohl miss'gelesen .. bitte entschuldige, mein missverständniss! _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Muecke Gast
|
Verfasst am: 16.01.2014, 23:34 Titel: |
|
|
Ihr habt Recht, die Werte der x und y der Maus werden zwar auch -1 wenn man das Fenster verlässt, doch die Idee die Maus als Funktion abzurufen und es darüber dann zu Prüfen gefällt mir noch besser und ich verliere nicht ein wert beim Mausrad
dann Sicht der Code nun so aus:
Code: | Dim As Integer mX, mY, mW, mW_Alt, mB, Frame_Alt, Frame_Aktueller, mErgebnis
ScreenRes 300, 300, 32 '' Fenster erstellen
Do
mErgebnis = GetMouse (mX, mY, mW, mB) '' Mauswerte abfragen als Fungzion
'' mErgebnis = 0 bedeutet Maus nicht im Fenster
'' mErgebnis = 1 bedeutet Maus ist im Fenster
If mW_Alt < mW And mErgebnis <> 1 Then '' -->> MausRad Hoch <<--
Frame_Alt = Frame_Aktueller
Frame_Aktueller + = 1
mW_Alt = mW
ElseIf mW_Alt > mW And mErgebnis <> 1 Then '' -->> MausRad Runter <<--
Frame_Alt = Frame_Aktueller
Frame_Aktueller - = 1
mW_Alt = mW
EndIf
If Frame_Aktueller <> Frame_Alt Then '' Prüfen ob ein Neuer Frame aufgerufen werden soll
Locate 10, 10: Print Using "Aktueller Frame = #####"; Frame_Aktueller
Locate 11, 10: Print Using "Mausrad Wert = #####"; mW
Frame_Alt = Frame_Aktueller
EndIf
Sleep 1 '' Um die Auslastung durch das Prog zu minimiren
Loop Until InKey = Chr(27) '' ESC Taste
End |
veränderungen
Code: | mErgebnis = GetMouse (mX, mY, mW, mB) |
Code: | If mW_Alt < mW And mErgebnis <> 1 Then |
Code: | ElseIf mW_Alt > mW And mErgebnis <> 1 Then |
DANKE |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 16.01.2014, 23:42 Titel: |
|
|
zwecks optimierung:
es wäre sinvoll eher so vorzugehen:
Code: | If GetMouse(mX, mY, mW, mB) = 1 Then
If mW_Alt < mW Then
Frame_Alt = Frame_Aktueller
Frame_Aktueller + = 1
mW_Alt = mW
ElseIf mW_Alt > mW Then
Frame_Alt = Frame_Aktueller
Frame_Aktueller - = 1
mW_Alt = mW
EndIf
End If
|
hierbei wird der IF-Code für die "Frame..." Dinge nur dann ausgeführt, wenn die maus auch vorhanden ist.
Computerseitig wird in diesem falle ein JUMP ausgeführt. Sprich, wenn die prüfung erfolgreich ist, wird zur nächsten zeile, und wenn nicht erfolgreich war, dann zum ende des IF's gesprungen. Andernfalls (mit deinem source) wird in jedem fall die nachfolgende IF-Prüfung zum < und > von mW_Alt ausgeführt, und ZUSÄTZLICH noch ob die maus ok war. So sparst du dir eine dieser prüfungen, bzw. 2, da durch den ersten prüfungsfall, welcher negativ verläuft, das ElseIf ebenfalls durchlaufen wird.
In meinem obrigem vorschlag sparst du dir im günstigstem falle 3 (eigentlich unnötige) Vergleichsprüfungen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Muecke Gast
|
Verfasst am: 16.01.2014, 23:46 Titel: |
|
|
Das Klingt gut und vernünftig
dann Spare ich mir alle Prüfungen der Maus wenn die Maus nicht im Fenster ist, und ich Spare mir den Speicherplatz für eine weiter Variable
DANKE
[EDIT:]
eine Kleine Korrektur habe ich jedoch an deinem Code
wenn man das so abfragt kommt 0 als Ergebnis wenn die Maus im Fenster ist und nicht 1 habe es gerade getestet |
|
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.
|
|