| 
				
					|  | 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: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 08.03.2021, 03: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: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 08.03.2021, 16:06    Titel: |   |  
				| 
 |  
				| Hallo ALWIM! 
 Du hast vergessen, die Maus auf Seite 2 erneut abzufragen (BEEP funktioniert bei meinem Rechner hardwarebedingt nicht, daher das "OK"):
 Für die Maus gibt es übrigens keinen Puffer, da ist also nichts zu leeren. 	  | 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
 | 
 
 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: 4711
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 09.03.2021, 20: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: 1048
 Wohnort: Niederbayern
 
 | 
			
				|  Verfasst am: 04.04.2021, 18: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.
 
 |  |