Mausfokus + Zorder

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Michael

Betreff: Mausfokus + Zorder

BeitragFr, Apr 22, 2005 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es jetzt endlich geschafft einen Anfang einer GUI zu schreiben.
Fenster können mit der Maus bewegt werden. Das Funktioniert soweit auch ganz gut nur leider verliert die Maus bei schnellen Bewegungen den Fokus.
Was könnte ich da tun um dieses Problem zu lösen?

Hier erstmal ein Ausschnitt aus dem Code. ich habe ihn mal aufs mindeste reduziert das es nciht zu groß wird:

BlitzBasic: [AUSKLAPPEN]
;************************************************************************************
;* Login Window *
;************************************************************************************




;Graphics
Graphics(800,600,32,1)
SetBuffer BackBuffer()

;Loading Main Graphics
Global Wallpaper = LoadImage (\"welcome.bmp\")
Global WindowBg = LoadImage (\"loginwinbg.bmp\")
Global MousePointer = LoadImage (\"pointer.bmp\")
Global MouseShadow = LoadImage (\"pointershadow.bmp\")

;Loading Window Graphics
Global Window = LoadImage (\"loginwindow.bmp\")
Global ShadowX = LoadImage (\"loginshadowx.bmp\")
Global ShadowY = LoadImage (\"loginshadowy.bmp\")


;Masking Images
MaskImage MousePointer, 255,255,255
MaskImage MouseShadow, 255,255,255
MaskImage shadowY, 255,255,255
MaskImage shadowX, 255,255,255

;*************************************************************************************

;Variables

Global WindowX = 400-80
Global WindowY = 220


;*************************************************************************************

;MainLoop Start

While Not KeyHit(1)
Cls

Main()




Flip
Wend

End

;MainLoop End

;*************************************************************************************

;Functions


Function Main()

MausSpeedX = 0
MausSpeedY = 0
MausSpeedX = MouseXSpeed()
MausSpeedY = MouseYSpeed()
MausCatchY = MouseY()
MausCatchX = MouseX()
RelAbstandX = MausCatchX - WindowX
RelAbstandY = MausCatchY - WindowY

TileImage Wallpaper, 0,0
DrawImage MouseShadow, MouseX()+4,MouseY()+4
DrawImage Window, WindowX,WindowY
DrawImage WindowBg, WindowX,WindowY+16

DrawImage ShadowX, WindowX+4,WindowY+66+16
DrawImage ShadowY, WindowX+160,WindowY+5

DrawImage MousePointer, MouseX(), MouseY()


If RectsOverlap(MouseX(),MouseY(),1,1,WindowX,WindowY,160,16)= 1 And MouseDown(1)= 1 Then
WindowY=MausCatchY - RelAbstandY + MausspeedY
WindowX=MausCatchX - RelAbstandX + MausspeedX
EndIf

End Function



So und hier mal die Datei mit allen benötigten Bildern usw zum Download.
http://www.bluescreen-security.com/problem.rar

Für die Die sich das Problem live anschauen möchten bzw müssen.
Ich hoffe das mir da jemand helfen kann.
  • Zuletzt bearbeitet von Michael am Sa, Apr 23, 2005 13:39, insgesamt einmal bearbeitet

Bms

BeitragFr, Apr 22, 2005 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte das problem auch mal (ne weile her, November im letzten Jahr), und ich habe es so gelöst:
BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,16,1
SetBuffer BackBuffer()
bild=LoadImage(\"hier-kommt-dein-dateiname-rein.bmp\")
;ResizeImage bild,40,40


;dimfeld
Const objanz=5
Dim dinge(objanz,1)
For a=0 To objanz
;zufällige positionen
dinge(a,0)=Rand(600)
dinge(a,1)=Rand(440)
Next

;breite/höhe des bildes schon mal berechnen
br=ImageWidth(bild)/2
ho=ImageHeight(bild)/2


Repeat


Cls

;x+y zwischenspeichern => schneller
x=MouseX()
y=MouseY()

;Verschieben
For a=1 To objanz
;mlinke maustaste gedrückt?
If MouseDown(1)Then
;zeigt man auf ein obj. , ist schon eins markiert?
If (markiert=0)And(RectsOverlap(dinge(a,0),dinge(a,1),br*2,ho*2,x,y,2,2))Then
;objekt jetzt ausgewählt
markiert=a
;verschieben
dinge(a,0)=x-br
dinge(a,1)=y-ho
Else
;schon markiert
If markiert=a Then
;verschieben
dinge(a,0)=x-br
dinge(a,1)=y-ho
EndIf
EndIf
Else
markiert=0
EndIf
DrawImage bild,dinge(a,0),dinge(a,1)
Next

;mauszeiger
Rect x,y,2,2

;buffer vertauschen
Flip


Until KeyDown(1)
End

es müsste sich eigentlich von selbst erklären.
Bms.
 

Michael

BeitragFr, Apr 22, 2005 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für deine Bemühungen.
Das hat mir schon etwas weitergeholfen.
Nur leider schnappen dann die Fenster wieder auf die Mauszeigermitte.
Ich hab schon versucht das mit meiner formel zu mixen aber es klappt nicht Sad
 

gamble

BeitragFr, Apr 22, 2005 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier gibts ein gutes Tutorial das zeigt, wie man Sachen anständig verschiebt. Vielleicht hilft es dir:

https://www.blitzforum.de/viewtopic.php?t=5354
 

Michael

BeitragFr, Apr 22, 2005 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Genial. Also ihr habt mir alle sehr sehr weitergeholfen. Ich habe es jetzt mit eurer Hilfe geschafft.
 

Michael

BeitragSa, Apr 23, 2005 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich bin jetzt soweit das ich mehrere Fenster flüssig bewegen kann und diese am Rand andocken usw. schaut schonmal schön aus.

Aber ist es irgendwie möglich ohne 3d und Sprites zu nutzen eine Z-Order da rein zu bringen. So das ein Fenster bei Klick hoch kommt. Bis jetzt sind ide Fenster ja in der Reihenfolge in der Z-Order wie ich sie zeichenen lasse. Für einen Denkanstoß oder einen guten Rat wäre ich dankbar.

Mfg Micha

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group