|
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 |
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 08.03.2021, 04:02 Titel: Mauspuffer-/Tastaturpuffer leeren??? |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 08.03.2021, 17:06 Titel: |
|
|
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 .
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 09.03.2021, 21:46 Titel: |
|
|
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 |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 04.04.2021, 19:33 Titel: |
|
|
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 |
|
|
|
|
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.
|
|