Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

30.08.2003, 19:13

"tb"GUISlider eine neue Klasse

Hey Leute,,,

ich habe wärend meines Projektes jetzt festgestellt das es gar keinen Slider (Schieberegler) gibt und da habe ich mir gedacht das muss jetzt mal her.

Ich würde sagen fogende Oberflächen Elemente müssten her aus der sich der Slider dann zusammen setzt:

- Einen Rahem (optional)
- Den Schieber
- Positionsmarken (optional)

Jetzt fehlen noch die Ereignisse usw. , hmmm mal schauen.

Also vorschläge sind gerne gesehen *g*

Anonymous

unregistriert

2

03.09.2003, 21:32

Hui,,,

offensichtlich tut dies niemanden ganz so recht zu interressieren ?!?

CuTeX0r

Treue Seele

Beiträge: 174

Wohnort: Deutschland

  • Private Nachricht senden

3

04.09.2003, 15:02

oder keiner weiß nen ansatz ;-)

Anonymous

unregistriert

4

04.09.2003, 18:54

:crying: ;) :jojo:

Da könntest Du vielleicht richtig liegen, oder es braucht keiner einen Slider "" ?

Naja für die Optionen, z.B. für die Helligkeit ?!

Naja ist OK *g*.

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

5

04.09.2003, 22:57

Ich hab jetzt keine Ahnung wie David GUI aufgebaut ist.
Aber nen Slider da müsste man für mich den minimal und maximal wert angeben müssen. Bräuchte zwei Arten von Buttons (wie bei einer Scrollbar) um die Position in 1er Schritten zu verstellen.

Die grafische Darstellung machst du etwas so: (Pseudo Code)

Quellcode

1
2
PointerPos = (RealLength / MaxValue)*Value;
// Pointer soll der Schiebregler sein. Die anderen Sachen sind statisch.


Dann wären noch Sachen wie ich klicke den Schiebregler an und ziehe ihn mit der Maus an der neuen Position nicht schlecht... ich denke mal David hat dafür schon nen Messaging System oder so.

Und man muss die Value auch irgendwie abfragen können. War nen ziemlich dünner Ansatz, aber ich hoffe es hilft!

Ciao DarthB :huhu:

Anonymous

unregistriert

6

05.09.2003, 02:01

Klar,,, danke,,,

ich habe auch schon Planungen dazu, wollte aber ehern mal zum nachdenken anregen und auch mal vorschläge von anderen einhohlen, dies ist nie verkehrt. !*g*!

Kalle

Frischling

Beiträge: 6

Wohnort: Lampertheim

Beruf: Administrator

  • Private Nachricht senden

7

19.10.2003, 21:17

Hi zusammen,

weil ich hier nichts mehr lese, habe ich mir gedacht, ich poste mal ne tbGUISlider...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
// ******************************************************************
//
// tbGUISlider.cpp
//
// ******************************************************************

#include "TriBase.h"

// ******************************************************************
// Nachrichtenfunktion für einen Knopf
tbResult tbGUISlider::ReceiveMessage(const tbGUIMessage* pMsg)
{
    tbColor         Color;
    tbVector2       vPos;
    tbGUIMessage    Msg;
    float           fPercent;
    float           fPosPercent;

switch(pMsg->Type)
    {
    case TB_GMT_KEYDOWN:
    case TB_GMT_KEYREPEAT:
        if(m_pGUI->m_iFocus == m_iID ||
           m_pGUI->m_iFocus == m_iScrollLeBtn ||
           m_pGUI->m_iFocus == m_iScrollRiBtn)
        {
            switch(pMsg->aiInt[0])
            {
            case TB_KEY_UP:
                if(m_iActVal>m_iMinVal) m_iActVal--;
                break;
            
            case TB_KEY_DOWN:
                if(m_iActVal<m_iMaxVal) m_iActVal++;
                break;
            }
        }
        break;

    case TB_GMT_MOVE:
        // Wurde der Wert verändert? Wenn ja: Nachricht schicken
        if(m_iOldAct != m_iActVal)
        {
            ZeroMemory(&Msg, sizeof(nuGUIMessage));
            Msg.Type = TB_GMT_SELECTION;
            Msg.aiInt[0] = m_iActVal;
            Msg.aiInt[1] = m_iOldAct;
            m_pGUI->PostMessage(m_iID, &Msg);
            m_iOldAct = m_iActVal;
        }
        break;

    case TB_GMT_RENDER:
        // Wenn das Element unsichtbar ist, wird es nicht gerendert.
        if(!m_bVisible) break;

        if(pMsg->aiInt[0] == 0)
            {
            fPercent=100.0f/(float)m_iMaxVal*(float)m_iActVal;  // Prozent des Wertes
            fPosPercent=(m_vSize.x-32.0f)/100.0f*fPercent;
            // Die Farbe ergibt sich daraus, ob es aktiviert ist oder nicht.
            Color = m_bEnabled ? m_pGUI->m_Skin.EnabledColor : m_pGUI->m_Skin.DisabledColor;

            // Rahmen zeichnen
            m_pGUI->AddFrame(m_vPosition, m_vSize, Color, tbVector2(96.0f, 128.0f));
            m_pGUI->AddRect(m_vPosition+tbVector2(fPosPercent+8.0f,8.0f),tbVector2(16.0f),Color,tbVector2(128.0f,0.0f)/255,tbVector2(32.0f)/255);
            }
        break;
    }

    return TB_OK;
}

// ******************************************************************
// Erstellung eines Sliders
tbResult tbGUI::CreateSlider(int iID,
                             int iPage,
                             tbVector2 vPosition,
                             tbVector2 vSize,
                             int iMin,
                             int iMax,
                             int iAct)
{
    tbGUIElement*   pElement;
    tbGUISlider*    pSlider;

    // Slider erstellen
    pElement = CreateElement(iID, TB_GET_SLIDER, iPage, vPosition+tbVector2(32.0f,0.0f), vSize-tbVector2(64.0f,0.0f));
    if(pElement == NULL) TB_ERROR("Fehler beim Erstellen des Sliders!", TB_ERROR);

    // Daten eintragen
    pSlider = (tbGUISlider*)(pElement);
    pSlider->m_iMinVal=iMin;
    pSlider->m_iMaxVal=iMax;
    pSlider->m_iActVal=iAct;

    // Knopf zum Linksscrollen erstellen
    pSlider->m_iScrollLeBtn = -iID * 10; CreateButton(-iID * 10, iPage, vPosition, tbVector2(32.0f), "");
    ((tbGUIButton*)(GetElement(-iID * 10)))->m_bIsSliderScrollBtn = TRUE;
    ((tbGUIButton*)(GetElement(-iID * 10)))->m_bIsScrollUpBtn = TRUE;
    ((tbGUIButton*)(GetElement(-iID * 10)))->m_iList = iID;

    // Knopf zum Rechtsscrollen erstellen
    pSlider->m_iScrollRiBtn = -iID * 10 - 1; CreateButton(-iID * 10 - 1, iPage, vPosition + vSize - tbVector2(32.0f,32.0f), tbVector2(32.0f), "");
    ((tbGUIButton*)(GetElement(-iID * 10 - 1)))->m_bIsSliderScrollBtn = TRUE;
    ((tbGUIButton*)(GetElement(-iID * 10 - 1)))->m_iList = iID;

    return TB_OK;
}



// ******************************************************************
//
// Änderungen in tbGUI.h
//
// ******************************************************************


// ******************************************************************
// Klasse für einen Slider
class tbGUISlider : public tbGUIElement
{
    friend class tbGUI;

private:
    int     m_iMinVal;      // kleinster Wert
    int     m_iMaxVal;      // größter Wert
    int     m_iActVal;      // aktueller Wert
    int     m_iOldAct;      // Vorheriger Wert
    int     m_iScrollLeBtn; // ID des Knopfes zum Linksscrollen
    int     m_iScrollRiBtn; // ID des Knopfes zum Rechtsscrollen

public:
    // Methoden
    tbResult    ReceiveMessage(const tbGUIMessage* pMsg);                       // Das Element erhält eine Nachricht.
    inline void SetMinMax(int iMin,int iMax){m_iMinVal=iMin;m_iMaxVal=iMax;}    // Die Grenzwerte setzen
    inline int  GetMin()        {return m_iMinVal;}                             // Minimalwert liefern
    inline int  GetMax()        {return m_iMaxVal;}                             // Maximalwert liefern
    inline void SetMin(int iMin){m_iMinVal=iMin;}                               // Minimalwert setzen
    inline void SetMax(int iMax){m_iMaxVal=iMax;}                               // Maximalwert setzen
    inline int  GetAct()        {return m_iActVal;}                             // Aktuelle Position
};

// Ergänzung in tbGUIElement
    friend class tbGUISlider;

// Ergänzung in tbGUI
    friend class tbGUISlider;

    // Erstellt einen neuen Slider
    tbResult CreateSlider(int iID,
                        int iPage,
                        tbVector2 vPosition,
                        tbVector2 vSize,
                        int iMin,
                        int iMax,
                        int iAct);


// Ergänzung der Aufzählung
enum tbGUIElementType
{
    TB_GET_FRAME,           // Rahmen
    TB_GET_BUTTON,          // Knopf
    TB_GET_TEXT,            // Text
    TB_GET_IMAGE,           // Bild
    TB_GET_CHECKBOX,        // Check-Box
    TB_GET_RADIOBOX,        // Radio-Box
    TB_GET_INPUT,           // Eingabefeld
    TB_GET_LIST,            // Liste
    TB_GET_SLIDER           // Slider
};

// Ergänzung in tbGUIButton
    BOOL    m_bIsSliderScrollBtn;   // Ist es ein Knopf eines Sliders (zum Scrollen)?


// Änderung der ReceiveMessage von tbGUIButton
tbResult tbGUIButton::ReceiveMessage(const tbGUIMessage* pMsg)
{
    tbColor Color;

    switch(pMsg->Type)
    {
    case TB_GMT_MOVE:
        if(m_bIsListScrollBtn &&
           m_bPressed)
        {
            // Tastendruck simulieren
            m_pGUI->m_pbButtons[m_bIsScrollUpBtn ? TB_KEY_UP : TB_KEY_DOWN] = TRUE;

            // Fokus auf die Liste setzen
            m_pGUI->m_iFocus = m_iList;
        }
        if(m_bIsSliderScrollBtn &&
           m_bPressed)
        {
            // Tastendruck simulieren
            m_pGUI->m_pbButtons[m_bIsScrollUpBtn ? TB_KEY_UP : TB_KEY_DOWN] = TRUE;

            // Fokus auf die Liste setzen
            m_pGUI->m_iFocus = m_iList;
        }
        break;

    case TB_GMT_RENDER:
        // Wenn das Element unsichtbar ist, wird es nicht gerendert.
        if(!m_bVisible) break;

        if(pMsg->aiInt[0] == 0)
        {
            // Die Farbe ergibt sich daraus, ob es aktiviert ist oder nicht.
            // Außerdem ändert sie sich, wenn der Knopf gerade gedrückt wird.
            Color = m_bEnabled ? (m_bPressed ? m_pGUI->m_Skin.HighlightColor : m_pGUI->m_Skin.EnabledColor) : m_pGUI->m_Skin.DisabledColor;

            if(m_bIsListScrollBtn)
            {
                // Scrollknopf erstellen
                m_pGUI->AddRect(m_vPosition, m_vSize, Color,
                                nuVector2(m_bIsScrollUpBtn ? 192.0f : 224.0f, 0.0f) / 255.0f,
                                tbVector2(32.0f) / 255.0f);
            }
            else
            {
            if(m_bIsSliderScrollBtn)
                {
                // Scrollknopf erstellen
                m_pGUI->AddRect(m_vPosition, m_vSize, Color,
                                tbVector2(m_bIsScrollUpBtn ? 192.0f : 224.0f, 32.0f) / 255.0f,
                                tbVector2(32.0f) / 255.0f);
                }
            else
                // Rahmen zeichnen
                m_pGUI->AddFrame(m_vPosition, m_vSize, Color, tbVector2(96.0f, 32.0f));
            }
        }
        else if(pMsg->aiInt[0] == 1 &&
                !m_bIsListScrollBtn)
        {
            // Die Farbe ergibt sich daraus, ob es aktiviert ist oder nicht.
            // Außerdem ändert sie sich, wenn der Knopf gerade gedrückt wird.
            Color = m_bEnabled ? (m_bPressed ? m_pGUI->m_Skin.HighlightTextColor : m_pGUI->m_Skin.EnabledTextColor) : m_pGUI->m_Skin.DisabledTextColor;

            // Text zeichnen
            m_pGUI->m_Skin.pFont->DrawText((m_vPosition + 0.5f * m_vSize) * m_pGUI->m_vScaling, m_acText,
                                           TB_FF_ALIGN_HCENTER | TB_FF_ALIGN_VCENTER | TB_FF_RELATIVESCALING, -1,
                                           Color, Color, m_pGUI->m_Skin.vTextSize);
        }
        break;
    }

    return TB_OK;
}

// Ergänzung in tbGUI::CreateElement
    case TB_GET_SLIDER:             pElement = new tbGUISlider; break;


Bitte alle Schritte genau befolgen


Viel Spaß
Kalle

Werbeanzeige