Markier-Funktion

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Schoasch

Betreff: Markier-Funktion

BeitragMi, Apr 30, 2008 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey =)
Ich versuche gerade eine Markier-Funktion zu machen mit der man (wie z.B. am Desktop) sachen markieren kann. Razz
Also auf eine Stelle klicken Maustaste gedrückt lassen und ziehen. Nach einer Stunde ohne Erfolg musste ich doch aufgeben. Jetzt meine Frage:
Kennt jemand ein Tut wo das beschrieben is oder kann mir da wer helfen? Wäre euch sehr dankbar!

mfg

Eingeproggt

BeitragMi, Apr 30, 2008 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab zwar noch nie ein Tut darüber gefunden oder das problem selbst bewältigt, aber ich kann mir nciht vorstellen, wo die Probleme liegen.
Bei mouseHit geht man in den "Rechteck-zieh-modus", bei (Not MouseDown) hat man die koordinaten von dem Auswahlrechteck (Alte Mauskoordinate, neue).
Jetzt braucht man nur noch die position der Objekte überprüfen. Ich würd die Objekte dafür übrigens in Types organisieren.

mfG, Christoph.

TimBo

BeitragMi, Apr 30, 2008 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich glaube das is nicht ganz so einfach,
denn mit not Mousedown wird immer min. 1 pixel makiert ^^

ich denke (bin mir aber nicht wirklich sicher) dass man MouseUp() benutzen muss,
diesen Befehl kann man aber nicht mit Blitz machen sondern nur mit DLL'S?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Eingeproggt

BeitragMi, Apr 30, 2008 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein pixel markiert wär ja nciht so schlimm, oder.. und MouseUp:

Mal so schnell hingeklatscht:

Code: [AUSKLAPPEN]
Repeat
  If MouseDown(1) Then
    mdown=True
  Else
    If mdown Then
      ;MouseUp:-)
    Endif
    mdown=False
  Endif
Until keyHit(1)


mfG, Christoph.

TimBo

BeitragMi, Apr 30, 2008 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Code: [AUSKLAPPEN]
Repeat
  If MouseDown(1) Then
    mdown=True
  Else
    If mdown Then
      ;MouseUp:-)
      mdown=0 ;hast du vergessen
    Endif
  Endif
Until keyHit(1)


doch das mit dem einem Pixel wäre fatal ^^
denn
wen ndu schön mit deiner maus ein bereich makiert hast ist es 2 frames
später auf der größe eines Pixels XD

mfg
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Schoasch

BeitragMi, Apr 30, 2008 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die schnellen antworten - ich werde mir das morgen genauer anschaun ich muss jetzt leider off.
ich werd euch dann morgen bescheid geben obs funkt
mfg

robotx

BeitragMi, Apr 30, 2008 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein kurzer Beitrag dazu:
Code: [AUSKLAPPEN]
Graphics 800,600,16,2

Local tstartX, tstartY

Repeat
   Cls
   
   If MouseHit (1) Then
      tstartX = MouseX ()
      tstartY = MouseY ()
   EndIf
   
   markieren (tstartX, tstartY)
   
   
   Delay 10
   
   Flip
Until KeyHit (1)
End

Function markieren (startX, startY)
   
   Local width, height
   Local startX1, startY1
   
   
   If MouseDown (1) Then
      
      If startY <= MouseY () Then
         If startX <= MouseX () Then
            
            width = MouseX () - startX
            height = MouseY () - startY
            
            Rect startX, startY, width, height,0
         ElseIf startX >= MouseX () Then
            
            width = startX - MouseX ()
            height = MouseY () - startY
            
            startY1 = startY
            startX1 = startX - width
            
            Rect startX1, startY1, width, height,0
         EndIf
         
      ElseIf startY >= MouseY () Then
         If startX <= MouseX () Then
            width = MouseX () - startX
            height = startY - MouseY ()
            
            startY1 = startY - height
            startX1 = startX
            
            Rect startX1, startY1, width, height,0
            
         ElseIf startX >= MouseX () Then
            
            width = startX - MouseX ()
            height = startY- MouseY ()
            
            startY1 = startY - height
            startX1 = startX - width
            
            Rect startX1, startY1, width, height,0
         EndIf
         
      EndIf
      
   EndIf
   
   Text 10,10, "MouseX: " + MouseX ()
   Text 10,20, "MouseY: " + MouseY ()
   
   Text 10, 30, startX
   Text 10, 40, startY
   Text 10, 50, width
   Text 10, 60, height
   
End Function


mfg robotx
www.botbomb.robotzgames.de
www.robotzgames.de

Travis

BeitragMi, Apr 30, 2008 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch ein Beispiel. Geht leider nur, wenn man die Box von Linksoben, nach rechtsunten zieht.

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()
AppTitle "Selecting Sample by Travis"
SeedRnd MilliSecs()


Type Box
 Field x,y,selected
End Type


For i = 0 To 19
 b.box = New box
 b\x = Rnd(750)
 b\y = Rnd(550)
Next


Repeat
 Cls


  ; Selecting
  If MouseDown(1) Then

   If Not Selecting Then
    Selecting = 1
    StartX = MouseX()
    StartY = MouseY()
    For b.box = Each box
     b\selected = 0
     If MouseOver(b\x,b\y,20,20) Then b\selected = 1
    Next
   Else
    ZielX = MouseX()
    ZielY = MouseY()
   EndIf

  Else

   Selecting = 0 
   For b.box = Each box
    If b\x > StartX And b\x < ZielX And b\y > StartY And b\y < ZielY Then b\selected = 1 
   Next

  EndIf


  ; Draw selection
  If Selecting Then
   Line StartX,StartY,MouseX(),StartY
   Line StartX,MouseY(),MouseX(),MouseY()
   Line StartX,StartY,StartX,MouseY()
   Line MouseX(), StartY, MouseX(), MouseY()
  EndIf


  ; Draw boxes
  For b.box = Each box
   If b\selected Then
    Color 0,128,0
   Else
    Color 128,128,128
   EndIf

   Rect b\x, b\y, 20, 20
  Next


  Flip
 Until KeyHit(1)
End


Function MouseOver(x,y,w,h)
 mx = MouseX()
 my = MouseY()
 If mx > x And mx < x+w And my > y And my < y+h Return 1
End Function
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Schoasch

BeitragDo, Mai 01, 2008 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
funkt super! danke @ all =))

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group