JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Synchroniser deux LISTs Jeu 20 Oct 2016 - 16:11 | |
| J'ai deux LIST parallèles qui doivent être synchronisées, c'est à dire que le déplacement de l'ascenseur de l'une doit entraîner le déplacement en parallèle de l'autre. Le problème a déjà été soulevé il y a quelques années, sans solution simple à ma connaissance. En fait mon problème était un peu plus simple, genre éditeur simplifié: un LIST qui contient le contenu d'un fichier texte (donc avec apparition d'ascenseur), et un petit LIST parallèle à gauche, qui contient les numéros de lignes du premier. Si je me déplace avec l'ascenseur, je veux que les numéros de ligne suivent. C'est faisable en faisant appel à des fonctions de user32.dll, mais comme il n'y a pas d'événement déclenché par le déplacement de l'ascenseur, il faut mettre un Timer pour le surveiller, ce qui est beaucoup plus contraignant. Par exemple: - Code:
-
LABEL Quit DIM i%,f$,pr%,nl% f$ = "C:\TEXTES\ANNU.txt": ' un fichier texte quelconque HEIGHT 0,800: FONT_NAME 0,"Lucida Console": ON_CLOSE 0,Quit LIST 1: WIDTH 1,35: HEIGHT 1,HEIGHT(0)-40: ' List des numéros de lignes LIST 2: LEFT 2,WIDTH(1): WIDTH 2,WIDTH(0)-WIDTH(1)-20: HEIGHT 2,HEIGHT(1) MEMO 3: HIDE 3: WIDTH 3,900 FILE_LOAD 3,f$: FOR i% = 1 TO COUNT(3): ITEM_ADD 2,ITEM_READ$(3,i%): NEXT i% Hlign(1): nl% = HEIGHT(1)/hlig%-1: ' nombre de lignes affichables dans List 1 pr% = -1: ' 1ère ligne affichée WHILE 1>0: ' juste pour la démo Listelem(2) IF prem%<>pr% CLEAR 1 FOR i% = prem% TO prem%+nl%-1: ITEM_ADD 1,RIGHT$("000"+STR$(i%),4): NEXT i% pr% = prem% END_IF PAUSE 200 END_WHILE END ' ============================================================================== Quit: TERMINATE ' ============================================================================== SUB Listelem(lst%) ' Renvoie dans prem% le rang du 1er élément de lst% affiché dans la fenêtre visible ' du liste (cas des ascenseurs). IF VARIABLE("prem%") = 0 THEN DIM prem% DLL_ON "User32" prem% = DLL_CALL4("SendMessageA",handle(lst%),398,0,0) DLL_OFF prem% = prem%+1: ' les numéros rendus commencent à 0 END_SUB ' ============================================================================== SUB Hlign(lst%) ' Renvoie dans hlig% la hauteur en pixels d'une ligne du List lst%, IF VARIABLE("hlig%") = 0 THEN DIM hlig% DLL_ON "User32" hlig% = DLL_CALL4("SendMessageA",handle(lst%),417,0,0) DLL_OFF END_SUB ' ============================================================================== C'est juste un exemple vite fait, et il y a des contraintes. Par exemple il faut que les polices des deux List soient les mêmes et de même taille. Entre autres. Et ce satané Timer. L'action sur l'ascenseur n'est prise en compte qu'au relâchement de la souris. | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Synchroniser deux LISTs Jeu 20 Oct 2016 - 17:16 | |
| Déjà soulevé sans solution simple ? Alors, regarde mon pseudo-objet GLIST (100 % Panoramic, sans DLL !). Tu peux avoir un nombre quelconque de listes synchronisées (2, 3, ... 7, ...). Un défilelent dans une des listes défile les autres simultanément. Les insertions, les suppressions - tout est géré. Voir sur mon site, rubrique "Panoramic", lien "Pseudo-objet GLIST", ou utiliser le lien suivant (identique): http://klauspanoramic.comxa.com/versions/GLIST.zip | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Synchroniser deux LISTs Jeu 20 Oct 2016 - 20:28 | |
| Dont acte et mea culpa... je dois perdre un peu la mémoire... Le pire, après vérification, c'est que j'ai bien ton GLIST dans mes archives, depuis sa création, avec son mode d'emploi détaillé (.rtf) mais je ne l'ai encore jamais utilisé... Bon, eh bien il ne me reste plus qu'à m'y plonger, avec mes remerciements Klaus ! | |
|
Contenu sponsorisé
| Sujet: Re: Synchroniser deux LISTs | |
| |
|