The Slider component of Gambas provides a vertical or horizontal slider. The slider is vertical if its height is greater than its width; otherwise it is horizontal. With a slider you can generate numerical values (type integer) in a certain definition range [ Zmin | Zmax ].
Figure 17.12.1: Three sliders with markers
The minimum value is always on the left for a horizontal slider and on the bottom for a vertical slider. With a slider, a (formal) scale with markers can be displayed, but the current values are not shown. You must take over this task with suitable displays such as a label, progress bar or self-designed LevelBar.
17.12.1 Properties Slider
Properties of the Slider component are described in the following table:
Slider | Data type | Default | Description |
---|---|---|---|
MinValue | Integer | 1 | Sets or returns the minimum value generated in the slider. |
MaxValue | Integer | 100 | Sets the maximum value that is generated in the slider or returns this value. |
Mark | Boolean | False | Determines whether marks are displayed or returns this value. |
Step | Integer | 1 | Changes the value of the generated integer (→ Slider.Value) by the value of Step as long as the slider has focus. |
PageStep | Integer | 10 | Changes the value of the generated integer (→ Slider.Value) by the value of PageStep. |
Value | Integer | - | Sets the slider value or returns the generated integer. |
Tracking | Boolean | False | Indicates that the slider emits the change event continuously when the slider knob is moved. |
Table 17.12.1.1: Slider Properties
The Slider component has only one specific event - Change. The Change event is fired every time the value of the slider changes.
The Slider project deploys three sliders with markers and appropriate displays of each of the minimum, maximum and current values.
Figure 17.12.3.1: Three sliders with markers
Figure 17.12.3.1 shows the programme window for the project presented, whose source code is given in full and commented on in selected passages:
[1] ' Gambas class file [2] [3] Public Sub _new() [4] sldVertical1.MinValue = 0 [5] sldVertical1.MaxValue = 360 [6] sldVertical1.Mark = True [7] sldVertical1.PageStep = 30 [8] sldVertical1.Step = 1 [9] sldVertical1.Value = 270 [10] txbVSlider1.Text = Str(sldVertical1.Value) & "°" [11] sldVertical2.MinValue = 30 [12] sldVertical2.MaxValue = 100 [13] sldVertical2.Mark = True [14] sldVertical2.PageStep = 10 [15] sldVertical2.Step = 5 [16] sldVertical2.Value = 50 [17] txbVSlider2.Text = Str(sldVertical2.Value) & " kN" [18] sldHorizontal1.MinValue = 0 [19] sldHorizontal1.MaxValue = 100 [20] sldHorizontal1.Mark = True [21] sldHorizontal1.PageStep = 5 [22] sldHorizontal1.Step = 1 [23] sldHorizontal1.Value = 82 [24] End [25] [26] Public Sub Form_Open() [27] FMain.Center [28] FMain.Resizable = False [29] txbVSlider1.ReadOnly = True [30] txbVSlider2.ReadOnly = True [31] ProgressBar1.Label = True [32] ProgressBar1.Value = sldHorizontal1.Value * 0.01 [33] DrawLevelBar() [34] End [35] [36] Public Sub sldVertical1_Change() [37] txbVSlider1.Text = Str(sldVertical1.Value) & "°" [38] End [39] [40] Public Sub sldVertical2_Change() [41] Dim iInvertedValue As Integer [42] [43] iInvertedValue = - sldVertical2.Value + sldVertical2.MinValue + sldVertical2.MaxValue [44] txbVSlider2.Text = Str(iInvertedValue) & " kN" [45] [46] If iInvertedValue >= 80 Then [47] txbVSlider2.Foreground = Color.Red [48] Else [49] txbVSlider2.Foreground = Color.Default [50] Endif ' iInvertedValue >= 80 ? [51] End [52] [53] Public Sub sldHorizontal1_Change() [54] ProgressBar1.Value = sldHorizontal1.Value * 0.01 [55] DrawLevelBar() [56] End ' hSlider1_Change [57] [58] Public Function u(iArgument As Integer) As Float [59] Return ((DrawingArea1.H / DrawingArea1.W) * iArgument) [60] End [61] [62] Public Sub DrawLine(iArgument As Integer, fOrdinate As Float) [63] Draw.Foreground = Color.red [64] Draw.Point(iArgument, fOrdinate) [65] Draw.Line(iArgument, 0, iArgument, fOrdinate) [66] End [67] [68] Public Sub LevelBar(iValue As Integer) [69] Dim iCount As Integer [70] [71] For iCount = 0 To iValue Step 2 ' Alternativen: 1 und 3 [72] DrawLine(iCount, u(iCount)) [73] Next ' iCount [74] End ' LevelBar(iValue As Integer) [75] [76] Public Sub DrawLevelBar() [77] Draw.Begin(DrawingArea1) [78] Draw.Translate(0, DrawingArea1.H) ' Erst verschieben und dann skalieren! [79] Draw.Scale(1, -1) [80] Draw.Clear [81] LevelBar(sldHorizontal1.Value * (DrawingArea1.W / sldHorizontal1.MaxValue)) [82] Draw.End [83] End [84] [85] Public Sub btnClose_Click() [86] FMain.Close [87] End
Comments:
Work is only really fun with the classes for Slider by Daniel Fuchs (FH Eberswalde). This slider component has a labelled scale that can be displayed above or below a horizontal slider, for example.
The horizontal slider can be used to change the solarisation of the image in the range from 0 (complete reversal) to 100 (no reversal). The left vertical slider displays positive temperatures in the programme window on a light red background, while all temperatures in the interval [-20°C | 0°C] are displayed on a light blue background. For the 2nd vertical slider, an inverted representation is used.
Figure 17.12.4.1: Slider by Daniel Fuchs (1)
Figure 17.12.4.2: Slider by D. Fuchs (2)