Seite 1 von 1

Trackbar Style ?

Verfasst: 25.03.2015 17:39
von Simon74
Hallo,

vom Design wäre mir die Progressbar lieber, von den Funktionen benötige ich jedoch das Trackbar Gadget. (Ich muss die Position per Maulklick anpassen können).

Kann der Style des Trackbar-Gadgets (Crossplattform tauglich) angepasst werden ?

Re: Trackbar Style ?

Verfasst: 25.03.2015 18:00
von NicTheQuick
Um es etwas einfacher zu machen, könntest du dir auch was mit dem 'CanvasGadget()' basteln. Also in der Größe der Progressbar und mit dessen Farben, aber dass man es eben per Klick ändern kann.

Re: Trackbar Style ?

Verfasst: 25.03.2015 20:21
von Sicro
Das Fenster hat unter Windows leider kein #PB_EventType_LeftClick.

Vielleicht hilft dir mein Code trotzdem bei der Umsetzung per CanvasGadget:

Code: Alles auswählen

Procedure MouseOverGadget(Window, Gadget)
  Protected.i MouseX, MouseY, GadgetX, GadgetY, GadgetWidth, GadgetHeight
  
  MouseX = WindowMouseX(Window)
  MouseY = WindowMouseY(Window)
  
  GadgetX = GadgetX(Gadget, #PB_Gadget_WindowCoordinate)
  GadgetY = GadgetY(Gadget, #PB_Gadget_WindowCoordinate)
  
  GadgetWidth  = GadgetWidth(Gadget)
  GadgetHeight = GadgetHeight(Gadget)
  
  If MouseX >= GadgetX And MouseX <= (GadgetX + GadgetWidth) And MouseY >= GadgetY And MouseY <= (GadgetY + GadgetHeight)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure.f GetProgressBarStepWidth(ProgressBarGadget)
  Protected.i ProgressBarValueRange
  
  ProgressBarValueRange = GetGadgetAttribute(ProgressBarGadget, #PB_ProgressBar_Maximum)
  ProgressBarValueRange - GetGadgetAttribute(ProgressBarGadget, #PB_ProgressBar_Minimum)
  
  ProcedureReturn GadgetWidth(ProgressBarGadget) / ProgressBarValueRange
EndProcedure

Define Event.i, Value.f

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 500, 100, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ProgressBarGadget(0, 10, 30, 480, 30, 0, 100, #PB_ProgressBar_Smooth)
  ; #PB_ProgressBar_Smooth - Auf Windows XP mit eingeschalteten Skins und auf OS X hat dieses Flag keinen Effekt.
  
  ; PB_ProgressBar_Smooth-Workaround für Windows
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    If IsAppThemed_()
      SetWindowTheme_(GadgetID(0), @" ", @" ") ; Theme beim Gadget deaktivieren
    EndIf
  CompilerEndIf
  
  Repeat
    Event = WaitWindowEvent()
    
    If MouseOverGadget(0, 0) ;And EventType() = #PB_EventType_LeftClick ; Linux
      Value = WindowMouseX(0) - GadgetX(0, #PB_Gadget_WindowCoordinate)
      Value / GetProgressBarStepWidth(0)
      SetGadgetState(0, Value)
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

Re: Trackbar Style ?

Verfasst: 25.03.2015 22:20
von Simon74
Vielen Dank für Tip und Beispiel.
mal sehen wie weit ich komme

Re: Trackbar Style ?

Verfasst: 25.03.2015 22:49
von Danilo
Minimalbeispiel:

Code: Alles auswählen

Procedure RepaintCanvas(x)
    If StartDrawing( CanvasOutput(0) )
        Box(0,0,OutputWidth(),OutputHeight(),RGB($FF,$FF,$FF))
        DrawingMode(#PB_2DDrawing_Gradient)
        BackColor(RGB($40,$40,$40))
        FrontColor(RGB($DD,$DD,$DD))
        LinearGradient(0, 0, OutputWidth(), OutputHeight())
        Box(0,0,OutputWidth(),OutputHeight())
        DrawingMode(#PB_2DDrawing_Default)
        Box(x,0,OutputWidth()-x,OutputHeight(),RGB($FF,$FF,$FF))
        Box(x-3,0,5,OutputHeight(),RGB($00,$00,$00))
        StopDrawing()
    EndIf
    Debug x
EndProcedure

Procedure OnLeftClick()
    RepaintCanvas( GetGadgetAttribute(0,#PB_Canvas_MouseX) )
EndProcedure

Procedure OnMouseMove()
    If GetGadgetAttribute(0,#PB_Canvas_Buttons) & #PB_Canvas_LeftButton
        x = GetGadgetAttribute(0,#PB_Canvas_MouseX)
        If x < 0 : x = 0 : EndIf
        If x > GadgetWidth(0) : x = GadgetWidth(0) : EndIf
        RepaintCanvas( x )
    EndIf
EndProcedure

If OpenWindow(0, 0, 0, 220, 120, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 10, 10, 200, 20)
    
    RepaintCanvas(50)
    
    BindGadgetEvent(0, @OnLeftClick(),#PB_EventType_LeftClick)
    BindGadgetEvent(0, @OnMouseMove(),#PB_EventType_MouseMove)
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Trackbar Style ?

Verfasst: 25.03.2015 22:59
von Simon74
Danilo hat geschrieben:Minimalbeispiel:
Na so minimal ist das nicht :)
Vielen Dank

Re: Trackbar Style ?

Verfasst: 25.03.2015 23:07
von Danilo
Simon74 hat geschrieben:Na so minimal ist das nicht :)
Hey, nur 33 Zeilen (ohne Leerzeilen), und 9 Zeilen davon sind schon das schöne Zeichnen mit Farbverlauf usw. ;)

Re: Trackbar Style ?

Verfasst: 25.03.2015 23:11
von Simon74
So meinte ich das nicht, ich meinte:
--> Minimaler Code, mit maximaler Wirkung :)