Bonjour à tous et bonne année,
Existe-t-il un évènement qui contrôle les barres de défilement dans un ScrollBox.
Je voudrais faire bouger un composant en fonction du déplacement des barres de défilement du ScrollBox.
Est-ce possible?
D'avance merci.
Version imprimable
Bonjour à tous et bonne année,
Existe-t-il un évènement qui contrôle les barres de défilement dans un ScrollBox.
Je voudrais faire bouger un composant en fonction du déplacement des barres de défilement du ScrollBox.
Est-ce possible?
D'avance merci.
Par défaut , il n'en existe pas.
Il cependant possible de les rajouter sur nouveau composant :
voila un exemple pour ajouter 2 evenements :
OnVerticalScrollPosChange
OnHorizontalScrollPosChange
Code du Composant
fichier .h
Code:
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 //--------------------------------------------------------------------------- #ifndef MyScrollBoxH #define MyScrollBoxH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Classes.hpp> #include <Controls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class PACKAGE TMyScrollBox : public TScrollBox { private: TNotifyEvent FOnVerticalScrollPosChange; TNotifyEvent FOnHorizontalScrollPosChange; protected: //evenements void __fastcall VerticalScroll( TWMVScroll &Msg ) ; void __fastcall HorizontalScroll( TWMHScroll &Msg ) ; public: __fastcall TMyScrollBox(TComponent* Owner); //fonctions pour controler le deplacement du bouton de scroll void __fastcall ScrollLineDown(); void __fastcall ScrollLineUp(); void __fastcall ScrollPageDown(); void __fastcall ScrollPageUp(); //capture des messages WM_VSCROLL et WM_HSCROLL BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_VSCROLL, TWMVScroll, VerticalScroll) MESSAGE_HANDLER(WM_HSCROLL, TWMHScroll, HorizontalScroll) END_MESSAGE_MAP(TScrollBox) __published: __property TNotifyEvent OnHorizontalScrollPosChange={read=FOnHorizontalScrollPosChange,write=FOnHorizontalScrollPosChange}; __property TNotifyEvent OnVerticalScrollPosChange={read=FOnVerticalScrollPosChange,write=FOnVerticalScrollPosChange}; }; //--------------------------------------------------------------------------- #endif
le .cpp
Code:
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 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "MyScrollBox.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // ValidCtrCheck is used to assure that the components created do not have // any pure virtual functions. // static inline void ValidCtrCheck(TMyScrollBox *) { new TMyScrollBox(NULL); } //--------------------------------------------------------------------------- __fastcall TMyScrollBox::TMyScrollBox(TComponent* Owner) : TScrollBox(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMyScrollBox::VerticalScroll( TWMVScroll &Msg ) { if(FOnVerticalScrollPosChange) { FOnVerticalScrollPosChange(this); } TScrollBox::Dispatch(&Msg); } //--------------------------------------------------------------------------- void __fastcall TMyScrollBox::HorizontalScroll( TWMHScroll &Msg ) { if(FOnHorizontalScrollPosChange) { FOnHorizontalScrollPosChange(this); } TScrollBox::Dispatch(&Msg); } //--------------------------------------------------------------------------- void __fastcall TMyScrollBox::ScrollLineDown() { Perform(WM_VSCROLL,SB_LINEDOWN,NULL); } //--------------------------------------------------------------------------- void __fastcall TMyScrollBox::ScrollLineUp() { Perform(WM_VSCROLL,SB_LINEUP,NULL); } //--------------------------------------------------------------------------- void __fastcall TMyScrollBox::ScrollPageDown() { Perform(WM_VSCROLL,SB_PAGEDOWN,NULL); } //--------------------------------------------------------------------------- void __fastcall TMyScrollBox::ScrollPageUp() { Perform(WM_VSCROLL,SB_PAGEUP,NULL); } //--------------------------------------------------------------------------- namespace Myscrollbox { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TMyScrollBox)}; RegisterComponents("Developpez.com", classes, 0); } } //---------------------------------------------------------------------------
voici un exmple d'utilisation après installation:
Code:
1
2
3
4
5
6
7
8
9 // nouvel evenement void __fastcall TForm1::MyScrollBox1VerticalScrollPosChange( TObject *Sender) { ProgressBar1->Position = MyScrollBox1->VertScrollBar->Position; }
Merci beaucoup pour ta réponse.