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:

Mauspuffer-/Tastaturpuffer leeren???

 
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
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1037
Wohnort: Niederbayern

BeitragVerfasst am: 08.03.2021, 03:02    Titel: Mauspuffer-/Tastaturpuffer leeren??? Antworten mit Zitat

Ich schreibe gerade ein Programm mit 2 Seiten, wo man mit der Maus auf einen Button klicken kann (der Button wurde selber geschrieben). Wenn ich mit der Maus auf den Button in Seite 1 klicke, dann komme ich zur Seite 2. Genau an der selben Stelle, bei Seite 2 ist ebenfalls ein Button, der eine Funktion ausführt. Klicke ich mit der Maus auf den Button in der 1. Seite, dann wird automatisch auch auf den Button auf der 2. Seite geklickt, obwohl ich die Maus noch nicht mal losgelassen habe!!! Der Versuch das ganze mit "Mausk = 0" oder ähnliches zu umgehen, funktioniert nicht. Den Tastaturpuffer leeren, führt auch nicht zum gewünschten Erfolg. Ich müsste irgendwie den Mauspuffer leeren können, falls so etwas möglich ist. Einen der Buttons an eine andere Stelle verschieben, ist fast nicht möglich. Ich könnte theoretisch den Button schon verschieben, aber das wäre mit extrem viel Aufwand verbunden, was ich unbedingt vermeiden will.

Beispiel:

Code:
SCREENRES 640, 320, 32

DIM SHARED AS INTEGER Seite
DIM SHARED AS INTEGER mausx, mausy, mausk

LINE (97, 40)-(182, 60), &hFFFFFF, BF ' Button anzeigen

Seite = 1

DO
   GETMOUSE mausx, mausy,,mausk

   SELECT CASE mausk
      CASE 1

         ' Seite 1
         IF Seite = 1 THEN
            SELECT CASE mausx
               CASE 97 TO 182
                  SELECT CASE mausy
                     CASE 40 TO 60
                        Seite = 2 ' Seite 2 wird aufgerufen
                       
                        ' DO - LOOP Schleife erst verlassen, wenn Mausbutton losgelassen wird
                        DO
                           GETMOUSE mausx, mausy,, mausk
                           IF mausk = 0 THEN EXIT DO
                           SLEEP 1
                        LOOP
                  END SELECT
            END SELECT
         END IF

         ' Seite 2 - Button soll erst nach dem erneuten drücken der Maustaste gedrückt werden können. Funktion wird ausgelöst, wenn Button auf Seite 1 gedrückt wird!!!
         IF SEITE = 2 THEN
            SELECT CASE mausx
               CASE 97 TO 182
                  SELECT CASE mausy
                     CASE 40 TO 60
                        BEEP ' Eine Funktion wird aufgerufen
                  END SELECT
            END SELECT
         END IF
   END SELECT

   IF MULTIKEY(&h02) THEN Seite = 1 ' mit Taste 1 die Seite 1 aufrufen
   IF MULTIKEY(&h03) THEN Seite = 2 ' mit Taste 2 die Seite 2 aufrufen

   LOCATE 1,5: PRINT "Seite: "; Seite; " "
   SLEEP 1
   IF MULTIKEY(&h01) THEN END
LOOP


Wie schaffe ich es, dass der Button auf Seite 2 nicht automatisch gedrückt wird, wenn ich auf den Button der Seite 1 klicke? Immer wenn ich auf den Button der Seite 1 klicke, wird auch der Button auf Seite 2 automatisch gedrückt. Eigentlich sollte das ganze durch die DO-LOOP Schleife bei Button 1/Seite 1 verhindert werden?!
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 08.03.2021, 16:06    Titel: Antworten mit Zitat

Hallo ALWIM!

Du hast vergessen, die Maus auf Seite 2 erneut abzufragen (BEEP funktioniert bei meinem Rechner hardwarebedingt nicht, daher das "OK"):
Code:
ScreenRes 640, 320, 32

Dim Shared As Integer Seite
Dim Shared As Integer mausx, mausy, mausk

Line (97, 40)-(182, 60), &hFFFFFF, BF ' Button anzeigen

Seite = 1

Do
   GetMouse mausx, mausy,,mausk

   Select Case mausk
      Case 1

         ' Seite 1
         If Seite = 1 Then
            Select Case mausx
               Case 97 To 182
                  Select Case mausy
                     Case 40 To 60
                        Seite = 2 ' Seite 2 wird aufgerufen

                        ' DO - LOOP Schleife erst verlassen, wenn Mausbutton losgelassen wird
                        Do
                           GetMouse mausx, mausy,, mausk
                           If mausk = 0 Then Exit Do
                           Sleep 1
                        Loop
                  End Select
            End Select
         End If

         ' Seite 2 - Button soll erst nach dem erneuten drücken der Maustaste gedrückt werden können. Funktion wird ausgelöst, wenn Button auf Seite 1 gedrückt wird!!!
         If SEITE = 2 Then
            Select Case mausx
               Case 97 To 182
                  Select Case mausy
                     Case 40 To 60
                        '################################################
                        GetMouse mausx, mausy,, mausk
                        If mausk Then
                           ' DO - LOOP Schleife erst verlassen, wenn Mausbutton losgelassen wird
                           Do
                              GetMouse mausx, mausy,, mausk
                              If mausk = 0 Then Exit Do
                              Sleep 1
                           Loop
                           Locate 20,20
                           ? "OK"
                        EndIf
                        Beep ' Eine Funktion wird aufgerufen
                        '################################################
                  End Select
            End Select
         End If
   End Select

   If MultiKey(&h02) Then Seite = 1 ' mit Taste 1 die Seite 1 aufrufen
   If MultiKey(&h03) Then Seite = 2 ' mit Taste 2 die Seite 2 aufrufen

   Locate 1,5: Print "Seite: "; Seite; " "
   Sleep 1
   If MultiKey(&h01) Then End
Loop
Für die Maus gibt es übrigens keinen Puffer, da ist also nichts zu leeren.

In meiner Fluglotsensimulation BER Approach kannst du dir ansehen, wie ich die Sache mit dem Mausmenü gelöst habe (Function mouseMenu). Vielleicht sind da ja ein paar Anregungen für dich dabei lächeln .

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
nemored



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

BeitragVerfasst am: 09.03.2021, 20:46    Titel: Antworten mit Zitat

Für die Maus: Das Problem liegt an deiner Verwendung der Verzweigung. Im ersten IF (Seite 1) wird die Variable seite auf 2 gesetzt, und damit landest du anschließend gleich im zweiten IF (Seite 2). Auch mit einem ELSEIF solltest du das lösen können (dann ist keine zusätzliche Abfrage der Maus nötig).

Code:
DO
   GETMOUSE mausx, mausy,,mausk

   SELECT CASE mausk
      CASE 1
         IF Seite = 1 THEN
            ' ...
         ELSEIF SEITE = 2 THEN
            ' ...
         END IF
   END SELECT

_________________
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
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1037
Wohnort: Niederbayern

BeitragVerfasst am: 04.04.2021, 18:33    Titel: Antworten mit Zitat

Jetzt grabe ich das Thema nochmals aus, da ich mir das ganze einfach nochmals angeschaut habe. Der Tipp mit dem ELSEIF ist klasse! Das ist genau der Befehl den ich brauche. Alles funktioniert so wie ich es haben will...
_________________
SHELL SHUTDOWN -s -t 05
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