Mal wieder was zu meinem Messprogramm! Das programm funktioniert soweit auf einem meiner Rechner. Auf dem anderen jedoch bewegt sich das Fadenkreuz erst verzögert wenn ich die Mouse bewege (beim langsameren Rechner ist alles bestens; beim schnelleren die Verzögerung).
Nun habe ich versucht sowohl das Koordinatensytem als auch das Fadenkreuz durch eine andere Methode darzustellen.
Nun meine Frage/n
1) Ist das so ok oder gibt es schnellere Lösungen (wenn ja, was ist besser)
2) Muss ich in jedem durchlauf der Procedure - Fadenkreuz() - die CreateSprite(#Fadenkreuz, 800,800) aufrufen oder kann ich das Sprite auch sozusagen leeren?
Hier der Code:
Code: Alles auswählen
Enumeration
#Koordinatensystem
#Fadenkreuz
#Window_1
#Window_2
#Button_1
#File_1
EndEnumeration
;---------------------------------------------------------------------------------------------------
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitSprite3D() = 0
MessageRequester("Error", "Can't open DirectX 7 or later", 0)
End
EndIf
;---------------------------------------------------------------------------------------------------
Procedure Fadenkreuz()
MouseX.w = DesktopMouseX() - 5
MouseY.w = DesktopMouseY() -25
CreateSprite(#Fadenkreuz, 800,800)
If StartDrawing(SpriteOutput(#Fadenkreuz))
If MouseY < 710 And MouseY > 30
LineXY(2, MouseY, 795, MouseY,$FF0000) ;X
Else
If MouseY > 710
LineXY(5, 710, 795, 710,$FF0000) ;X
MouseY = 710
Else
LineXY(5, 5, 795, 5,$FF0000)
MouseY = 5
EndIf
EndIf
If MouseX < 751 And MouseX > 30
LineXY(MouseX, 2, MouseX, 718,$FF0000) ;Y
Else
If MouseX > 751
LineXY(751, 5, 751, 710,$FF0000) ;Y
MouseX = 750
Else
LineXY(30, 2, 30, 718,$FF0000)
MouseX = 30
EndIf
EndIf
StopDrawing()
EndIf
EndProcedure
;---------------------------------------------------------------------------------------------------
If OpenWindow(#Window_1, 0, 0, 1400,1280, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Window_1))
ButtonGadget(0, 170, 135, 45, 20, "Quit")
EndIf
If OpenWindowedScreen(WindowID(#Window_1), 0, 0, 800, 800, 0, 0, 0)
LoadSprite(#Koordinatensystem, "f:\PB\TempMessung\Messwerte.bmp", 0)
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
;---------------------------------------------------------------------------------------------------
LoadSprite(#Koordinatensystem, "f:\PB\TempMessung\Messwerte.bmp", 0)
CreateSprite(#Fadenkreuz, 792,792)
Repeat
EventID=WindowEvent()
EventWindowID = EventWindow()
EventGadgetID= EventGadget()
EventMenuID = EventMenu()
Select EventWindowID
Case #Window_1 ; Handling #Window_1
Select EventID
Case #WM_MOUSEMOVE
Fadenkreuz()
Case #PB_Event_Gadget
Select EventGadgetID
Case #Button_1
EndSelect
Case #PB_Event_CloseWindow
Window_1_IsClosed = #True
EndSelect
;---------------------------------
If EventID = #PB_Event_Menu
MenuID = EventMenu()
If MenuID = #File_1
EndIf
EndIf
;---------------------------------
Case #Window_2 ; Handling #Window_2
Select EventID
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
CloseWindow(#Window_2)
Window_2_IsClosed = #True
EndSelect
EndSelect
FlipBuffers()
ClearScreen(0)
DisplaySprite(#Koordinatensystem, 0, 0)
DisplayTranslucentSprite(#Fadenkreuz, 1, 1,128)
Delay(1)
Until Window_1_IsClosed = #True ;And Window_2_IsClosed = #True
End
Danke für die Hilfe
Martin