silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: position des scroll_bar dans un memo : astuce Jeu 18 Fév 2016 - 14:49 | |
| Bonjour à tous J'ai fait cette démo pur panoramic pour des besoins personnels avant de me rendre compte que la fonction existait dans KGF. A tout hasard, je la poste quand même défois que ça puisse servir à quelqu’un : - Code:
-
' https://msdn.microsoft.com/fr-fr/library/windows/desktop/bb787537%28v=vs.85%29.aspx
' SB_HORZ = 0, ' SB_VERT = 1, ' SB_CTL = 2, ' SB_BOTH = 3
' valeur pour fmask ' SIF_RANGE = 0x1, ' SIF_PAGE = 0x2, ' SIF_POS = 0x4, ' SIF_DISABLENOSCROLL = 0x8, ' SIF_TRACKPOS = 0x16, ' SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS
' structure ' UINT cbSize; tjrs 28 ' UINT fMask; tjrs 31 ' int nMin; ' int nMax; ' UINT nPage; ' int nPos; ' int nTrackPos;
' ' cbSize ' Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO).
' fMask ' Specifies the scroll bar parameters to set or retrieve. This member can be a combination of the following values: ' valeur pour fmask ' SIF_RANGE = 0x1, ' SIF_PAGE = 0x2, ' SIF_POS = 0x4, ' SIF_DISABLENOSCROLL = 0x8, ' SIF_TRACKPOS = 0x16, ' SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS
' nMin ' Specifies the minimum scrolling position.
' nMax ' Specifies the maximum scrolling position.
' nPage ' Specifies the page size, in device units. A scroll bar uses this value to determine the appropriate size of the proportional scroll box.
' nPos ' Specifies the position of the scroll box.
' nTrackPos ' Specifies the immediate position of a scroll box that the user is dragging. An application can retrieve this value while processing the SB_THUMBTRACK request code. An application cannot set the immediate scroll position; the SetScrollInfo function ignores this member.
DIM result%,result,result$ dim ret% dim i,j,tmp$
label test,fini
' donnees pour la dll 'user32' dim scrollinfo% dim structure_scrollinfo$ dim SB_HORZ,SB_VERT,cbSize,fMask,SIF_ALL SB_HORZ = 0 SB_VERT = 1 cbSize = 28 SIF_ALL = 31 fMask = SIF_ALL ' ' crée une structure pour recevoir les donnees, de 7*4 octets de longueur structure_scrollinfo$=string$(28,chr$(0)) GET_BUFFER_PTR(adr(scrollinfo%),adr(structure_scrollinfo$)) poke4(scrollinfo%,0,cbSize) poke4(scrollinfo%,1,fMask)
' width 0,900 on_close 0,fini ' dll_on "user32"
' crée un memo et rempli le de 100 caracteres maximum par ligne memo 1 : bar_both 1 :hide 1 font_name 1,"system" height 1,250 : width 1,500 for j=1 to 30 tmp$="" for i=1 to int(1+rnd(100)) tmp$=tmp$+chr$(int(32+rnd(223))) next i item_add 1,str$(j)+" // "+tmp$ next j select_text 1,1,1 show 1
' crée un GRID pour afficher les donnees des scroll_bars grid 30 width 30,320 height 30,240 top 30,0 : left 30,516
grid_row 30,9 grid_row_fixed 30,0 grid_column 30,3 grid_column_fixed 30,0 grid_column_width 30,100
grid_write 30,1,2,"Barre Verticale" grid_write 30,2,2,"Unité = nb de ligne" grid_write 30,1,3,"Barre Horizontale" grid_write 30,2,3,"Unité = pixels" grid_write 30,3,1,"cbsize" :' donnee de configuration de la structure grid_write 30,4,1,"fmask" :' donnee de configuration de la structure grid_write 30,5,1,"Min" :' valeur mini de la position du curseur, en ligne ou pixels grid_write 30,6,1,"Max" :' valeur maxi de la position du curseur, en ligne ou pixels grid_write 30,7,1,"par Page" :' nb de lignes ou pixels visible grid_write 30,8,1,"Pos" :' valeur de la position du curseur grid_write 30,9,1,"TrackPos" :' position du curseur, 0 si clique sur une fleche
' crée un timer pour rafraichir l'affichage des donnees des scroll_bars timer 5 timer_interval 5,50 on_timer 5,test
end ' LES SUBs ********************************************************************* ' retrouve l'adresse d'un pointeur de 'string' sub GET_BUFFER_PTR(adr_destination%,adr_source%) poke adr_destination%,peek(adr_source%) poke adr_destination%+1,peek(adr_source%+1) poke adr_destination%+2,peek(adr_source%+2) poke adr_destination%+3,peek(adr_source%+3) end_sub
' copie 'value%' à l'adresse: 'adr_source%'+'4*offset%' sub POKE4(adr_source%,offset%,value%) poke (4*offset%)+adr_source%,peek(adr(value%)) poke (4*offset%)+adr_source%+1,peek(adr(value%)+1) poke (4*offset%)+adr_source%+2,peek(adr(value%)+2) poke (4*offset%)+adr_source%+3,peek(adr(value%)+3) end_sub
' retourne dans 'result%' le contenu stocké à l'adresse: 'adr_source%'+'4*offset%' sub PEEK4(adr_source%,offset%) poke adr(result%),peek((4*offset%)+adr_source%) poke adr(result%)+1,peek((4*offset%)+adr_source%+1) poke adr(result%)+2,peek((4*offset%)+adr_source%+2) poke adr(result%)+3,peek((4*offset%)+adr_source%+3) end_sub
' LES EVENTS ******************************************************************* test: timer_off 5 :' on empeche timer de s'appeler lui-meme ' ' ecrit dans le grid les infos provenant de: ret%=dll_call3("GetScrollInfo",handle(1),1,scrollinfo%) :' LA BARRE VERTICALE ' cbSize et fMask ne sont pas utile, on ne les affiche pas for i=2 to 6 PEEK4(scrollinfo%,i) :' envoi une valeur dans 'result%' grid_write 30,i+3,2,str$(result%) next i ' ret%=dll_call3("GetScrollInfo",handle(1),0,scrollinfo%) :' ' LA BARRE HORIZONTALE ' cbSize et fMask ne sont pas utile, on ne les affiche pas for i=2 to 6 PEEK4(scrollinfo%,i) :' envoi une valeur dans 'result%' grid_write 30,i+3,3,str$(result%) next i ' timer_on 5 return
fini: dll_off terminate ' end
| |
|
Invité Invité
| Sujet: Re: position des scroll_bar dans un memo : astuce Jeu 18 Fév 2016 - 16:00 | |
| Bonjour, J'ai pris la peine de tester pour savoir ce que tu essayais de faire.
Pas mal la guêpe! C'est fou ce que l'on peut faire, lorsqu'on sait se servir de ses connaissances.
Bravo! |
|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: position des scroll_bar dans un memo : astuce Jeu 18 Fév 2016 - 17:37 | |
| Merci Sylverman pour le partage
Superbe astuce, (plus qu'une astuce d'ailleurs). Je me rallie à Cosmos pour dire bravo !
A+ | |
|
Invité Invité
| Sujet: Re: position des scroll_bar dans un memo : astuce Jeu 18 Fév 2016 - 19:48 | |
| - discution, hors sujet:
Je constate que tu es souvent en accord avec moi. C'est bien! Continues comme cela Mais je t'ai devancé. Moi c'était hier que j'étais sur le toit (un grand toit, celui d'une ancienne grange). J'ai changé la tête de ma parabole pour y mettre une tête octo, et ça marche super bien. Mais moi j'ai moins de mérite. Couvreur zingueur a été mon métier pendant cinq ans. Cela dit, j'ai toujours eu la trouille sur un toit, et ça n'a pas changé.
|
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: position des scroll_bar dans un memo : astuce Jeu 18 Fév 2016 - 23:14 | |
| Bravo Silverman, c'est super. Dommage que tu n'écrives pas d'articles. Tu as pleins de super astuces ui mériteraient de ne pas disparaitre avec le temps dans les limbes du forum. | |
|