Button mit Maus anklicken

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

wellensittich

Betreff: Button mit Maus anklicken

BeitragDo, Aug 28, 2008 9:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also dann meld ich mich auch mal wieder xD
ich hab mal versucht einen kleinen Taschenrechner zu programieren,
nun wollte ich aber nicht, dass man die rechnung nur eingibt, sonder dass das programm
zahlen von 1 bis 9 (inklusive 0) und +,-,/,* auf dem bildschirm darstellt.
nun mein problem:
wie stell ich das an, dass man diese ziffern mit der maus auswählen kann?? Question

Ich hoffe ihr könnt mir helfen!
MFG wellensittich

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Aug 28, 2008 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Am einfachsten finde ich es mit einer verschachtelten For-Schleife:

Code: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

Const XOFFSET=100
Const YOFFSET=100
Const SIZE=40

Local Timer=CreateTimer(75)
Local MX,MY,MT
Local X,Y

Dim Map$(3,3)

Restore Taschenrechner

For Y=0 To 3
   For X=0 To 3
      Read Map(X,Y)
   Next
Next




While Not KeyHit(1)
   MX=MouseX()
   MY=MouseY()
   MT=MouseHit()
   
   For Y=0 To 3
      For X=0 To 3
         Text XOFFSET+X*SIZE,YOFFSET+Y*SIZE,Map(X,Y)
         Rect XOFFSET+X*SIZE,YOFFSET+Y*SIZE,SIZE,SIZE,0
         If RectsOverlap(MX,MY,1,1,XOFFSET+X*SIZE,YOFFSET+Y*SIZE,SIZE,SIZE) Then
            Text 20,20,"Feld: "+X+"."+Y
         End If
      Next
   Next
   
   WaitTimer(Timer)
   Flip 0
   Cls
Wend
End


.Taschenrechner
Data "1","2","3","+"
Data "4","5","6","-"
Data "7","8","9","*"
Data ".","0"," ","/"
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Nova

BeitragDo, Aug 28, 2008 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst einfach nur mit MouseX() und MouseY() den Standort der Maus herrausfinden. Sollten die in einem bestimmten Bereich sein und die Maus gedrückt werden [MouseHit(1)] dann wird die Zahl gespeichert.
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

xaerox

BeitragDo, Aug 28, 2008 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

If MouseX ()>=buttonx And MouseX ()<=(buttonx+breite) Then
If MouseY ()>=buttony And MouseY ()<=(buttony+höhe) Then

If MouseHit (1) Then
Print "Du hast soeben einen Button geklickt!"

EndIf
EndIf
EndIf

das hat bei mir auch einer gepostet und ich verwende immer diesen code
kein plan von wem nochmal aber danke an ihm...
Biker sind wahre Helden.
Auch Musiker.

The_Nici

BeitragDo, Aug 28, 2008 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Xaerox, wobei man beachten muss, dass man 1. MouseX bzw MouseY in Variablen speichert, 2. Mousehit ebenfalls, 3. wenn möglich Rectsoverlap benutzt, tut das gleiche.

MfG Wink
 

Ava

Gast

BeitragDo, Aug 28, 2008 18:26
Antworten mit Zitat
The_Nici hat Folgendes geschrieben:
Xaerox, wobei man beachten muss, dass man 1. MouseX bzw MouseY in Variablen speichert, 2. Mousehit ebenfalls, 3. wenn möglich Rectsoverlap benutzt, tut das gleiche.


Deine Kritikpunkte 1 + 2 sind auf Xaerox's Methode bezogen quark. Bei anderen Methoden mögen sie durchaus Sinn machen, aber dieses Beispiel oben ist genau richtig so wie es ist. Und Dein Kritikpunkt Nr 3 ist wohl eher Geschmacksache ... obwohl ich da auch eher von RectsOverlap abraten würde, da diese Funktion zwei weitere (unnötige) Variablen mit einbezieht... Rolling Eyes


Ganz exakt müsste der Code oben eigentlich übrigens so aussehen:
Code: [AUSKLAPPEN]

If MouseX() >= buttonx And MouseX() < (buttonx+breite) Then
If MouseY() >= buttony And MouseY() < (buttony+höhe) Then
If MouseHit(1)

[...blah..]

EndIf
EndIf
EndIf

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Aug 28, 2008 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, aber beim Fragesteller ''wellensittich'' ist klar, das dieser einen Taschenrechner programmieren möchte, und da macht es schon Sinn die Variablen von MouseX() und MouseY() zwischen zu speichern, da mehrere - mindestens 10 Buttons bereist für die Zahlen weg gehen. Aber ehrlich, ich finde schon folgende Codezeile: If MouseX() >= buttonx And MouseX() < (buttonx+breite) Then besser, wenn man die Mauskoordinaten zwischen speichert, als zweimal den selben Funktionsaufruf zu machen.

Das mit RectsOverlap ist in der Tat reine Geschmackssache. Ich sage da nur; Marc wird schon wissen wie er es am besten und optimiert macht. In diesem Fall ein Funktionsaufruf vs. zwei doppelte mit And verknüpfte If-Abfragen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group