Für die es wissen möchten wie man die Pfeilrichtung ändert und den Fokus-Rahmen entfernt. (OS-Windows)
Update: Kleine CanvasGadget Spielerei hinzugefügt ... (TrackBar in Prozent mit zwei Komma-Stellen)
Code: Alles auswählen
;-TOP
#ProgramTitle = "TrackBar Example"
#ProgramVersion = "v1.01.3"
Enumeration Windows
#Main
EndEnumeration
Enumeration MenuBar
#MainMenu
EndEnumeration
Enumeration MenuItems
#MainMenuAbout
#MainMenuExit
EndEnumeration
Enumeration Gadgets
#MainCanvas
#MainTrackBarV
#MainTrackBarH
EndEnumeration
Enumeration StatusBar
#MainStatusBar
EndEnumeration
Macro LOWORD(dwValue) : dwValue & $FFFF : EndMacro;
Macro HIWORD(dwValue) : dwValue >> 16 : EndMacro;
Macro MAKELPARAM( loWord, hiWord) : (hiWord << 16 | loWord) : EndMacro;
Macro MAKEWPARAM( loWord, hiWord) : (hiWord << 16 | loWord) : EndMacro;
Structure udtCanvasGadget
Gadget.i
BackColor.i
BoxColor.i
BoxSize.i
LineColor.i
TrackOffset.i
TrackPosX.i
TrackPosY.i
EndStructure
Global CanvasData.udtCanvasGadget
; ----
Procedure InitCanvas(Gadget, *Data.udtCanvasGadget)
With *Data
\Gadget = Gadget
\BackColor = #White
\BoxColor = #Red
\BoxSize = 17
\LineColor = #Gray
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
\TrackOffset = 13
CompilerCase #PB_OS_Linux
\TrackOffset = 3
CompilerCase #PB_OS_MacOS
\TrackOffset = 12
CompilerEndSelect
EndWith
EndProcedure
Procedure DrawCanvas(*Data.udtCanvasGadget)
Protected dx, dy, deltaX, deltaY, PosX, PosY, Size2
With *Data
If StartDrawing(CanvasOutput(\Gadget))
dx = GadgetWidth(\Gadget)
dy = GadgetHeight(\Gadget)
deltaX = dx - 2 * \TrackOffset - 1
deltaY = dy - 2 * \TrackOffset - 1
PosX = \TrackPosX * deltaX / 10000 + \TrackOffset
PosY = \TrackPosY * deltaY / 10000 + \TrackOffset
Size2 = \BoxSize / 2
Box(0, 0, dx, dy, \BackColor)
LineXY(0, PosY, dx, PosY, \LineColor)
LineXY(PosX, 0, PosX, dy, \LineColor)
Box(PosX - Size2, PosY - Size2, \BoxSize, \BoxSize, \BoxColor)
;Circle(PosX, PosY, Size2, \BoxColor)
StopDrawing()
EndIf
EndWith
EndProcedure
Procedure DoEventTrackBar()
Protected info.s, x, y
x = GetGadgetState(#MainTrackBarH)
y = 10000 - GetGadgetState(#MainTrackBarV)
With CanvasData
\TrackPosX = x
\TrackPosY = y
EndWith
DrawCanvas(CanvasData)
info = " X = " + Str(x) + " / Y = " + Str(y)
StatusBarText(#MainStatusBar, 0, info)
EndProcedure
Procedure UpdateWindow()
Protected dx, dy
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
; Resize gadgets
ResizeGadget(#MainCanvas, 10, 10, dx - 50, dy - 50)
ResizeGadget(#MainTrackBarV, dx - 40, 10, 30, dy - 50)
ResizeGadget(#MainTrackBarH, 10, dy - 40, dx - 50, 30)
DrawCanvas(CanvasData)
EndProcedure
Procedure Main()
Protected dx, dy
#MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
; Menu
CreateMenu(#MainMenu, WindowID(#Main))
MenuTitle("&File")
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
MenuItem(#PB_Menu_About, "")
CompilerElse
MenuItem(#MainMenuAbout, "About")
MenuBar()
CompilerEndIf
MenuItem(#MainMenuExit, "E&xit")
; StatusBar
CreateStatusBar(#MainStatusBar, WindowID(#Main))
AddStatusBarField(#PB_Ignore)
; Gadgets
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
CanvasGadget(#MainCanvas, 10, 10, dx - 50, dy - 50)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
TrackBarGadget(#MainTrackBarH, 10, dy - 40, dx - 50, 30, 0, 10000, #TBS_TOP)
TrackBarGadget(#MainTrackBarV, dx - 40, 10, 30, dy - 50, 0, 10000, #PB_TrackBar_Vertical | #TBS_LEFT)
SendMessage_(GadgetID(#MainTrackBarH), #WM_UPDATEUISTATE, MAKEWPARAM(#UIS_SET, #UISF_HIDEFOCUS), 0)
SendMessage_(GadgetID(#MainTrackBarV), #WM_UPDATEUISTATE, MAKEWPARAM(#UIS_SET, #UISF_HIDEFOCUS), 0)
CompilerElse
TrackBarGadget(#MainTrackBarH, 10, dy - 40, dx - 50, 30, 0, 10000)
TrackBarGadget(#MainTrackBarV, dx - 40, 10, 30, dy - 50, 0, 10000, #PB_TrackBar_Vertical)
CompilerEndIf
SetGadgetState(#MainTrackBarH, 5000)
SetGadgetState(#MainTrackBarV, 10000 - 5000)
InitCanvas(#MainCanvas, CanvasData)
DoEventTrackBar()
; Bind Events
BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
BindGadgetEvent(#MainTrackBarV, @DoEventTrackBar())
BindGadgetEvent(#MainTrackBarH, @DoEventTrackBar())
AddWindowTimer(#Main, 1, 1000)
; Event Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Main
Break
EndSelect
Case #PB_Event_Menu
Select EventMenu()
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Case #PB_Menu_About
PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
Case #PB_Menu_Preferences
Case #PB_Menu_Quit
PostEvent(#PB_Event_CloseWindow, #Main, #Null)
CompilerEndIf
Case #MainMenuAbout
MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
Case #MainMenuExit
PostEvent(#PB_Event_CloseWindow, #Main, #Null)
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_Timer
Select EventTimer()
Case 1
;Debug "Timer 1"
EndSelect
EndSelect
ForEver
EndIf
EndProcedure : Main()