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:

Mausrad verändert seinen wert beim verlassen des Grafigfen..

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Muecke
Gast





BeitragVerfasst am: 16.01.2014, 23:08    Titel: Mausrad verändert seinen wert beim verlassen des Grafigfen.. Antworten mit Zitat

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 lächeln

Jetzt kann ich mit dem Mausrad in meinen Datensätzen hin und her Scrollen echt Cool lächeln.

nur leider verändert FB den Wert des Mausrades sobald die Maus nicht mehr im Grafikfenster ist traurig was sehr unschön ist.

denn ich Überprüfe die gesamte Zeit ob sich das Mausrad verändert lächeln 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 traurig denn das Fenster kann ja dann hin und her bewegt werden traurig 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 lächeln
gedacht gemacht und schon ist das Problem verschwunden lächeln
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 traurig
das ist die Veränderung jedenfalls: "And mW <> -1"
Nach oben
nemored



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

BeitragVerfasst am: 16.01.2014, 23:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 16.01.2014, 23:19    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 16.01.2014, 23:34    Titel: Antworten mit Zitat

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 lächeln und ich verliere nicht ein wert beim Mausrad lächeln

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]

BeitragVerfasst am: 16.01.2014, 23:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Muecke
Gast





BeitragVerfasst am: 16.01.2014, 23:46    Titel: Antworten mit Zitat

Das Klingt gut und vernünftig lächeln

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 lächeln

DANKE


[EDIT:]
eine Kleine Korrektur habe ich jedoch an deinem Code lächeln
wenn man das so abfragt kommt 0 als Ergebnis wenn die Maus im Fenster ist und nicht 1 habe es gerade getestet lächeln
Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen 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