|
[WD14] ScrollBar et Table |
Débuté par nicojail, 21 jan. 2009 19:09 - 14 réponses |
| |
| | | |
|
| |
Posté le 21 janvier 2009 - 19:09 |
Bonjour
Le libellé avec animation ne me convenant pas (impossible de modifier la taille du texte, la couleur... pour une ligne spécifique), je m'oriente sur une table gérée par programmation.
Cette table doit faire défiler toutes ses lignes (verticalement) automatiquement (sans action clavier, ni souris).
L'utilisation de la commande TablePosition, ne me satisfait pas non plus car il y a une sorte de saccadement.
Afin d'avoir un déplacement plus fluide, je me suis donc orienté vers les API GetScrollPos, GetScrollRange, et SetScrollPos pour déplacer le curseur de la ScrollBar, tout fonctionne, sauf que le contenu de la table ne suit pas...
Pourriez vous m'orienter sur les évènements manquants?
En vous remerciant
nRet est un entier nHwnd est un entier nBar est un entier nPos est un entier bRedraw est un booléen nMin, nMax sont des entiers système nSB_VERT32 est un entier système = 1
nHwnd = Handle(TABLE_Table1)
bRedraw = Vrai;
nPos = API("USER32","GetScrollPos",Handle(TABLE_Table1),nSB_VERT32) API("USER32","GetScrollRange",Handle(TABLE_Table1),nSB_VERT32,&nMin,&nMax)
Trace("nMin => "+nMin) Trace("nMax => "+nMax)
POUR i = 0 _A_ nMax PAS 10
nRet=API("USER32","SetScrollPos",nHwnd,nSB_VERT32,i,bRedraw)
Multitâche(5) MultitâcheRepeint() FIN
Trace("Fin") |
| |
| |
| | | |
|
| | |
| |
Posté le 22 janvier 2009 - 00:35 |
Bonsoir,
Nicolas Jaillet a écrit dans le message de news
Pourriez vous m'orienter sur les évènements manquants?
En vous remerciant Il faut modifier la position de la ligne dans la table, cela modifie automatiquement la position de la scrollbar, et non l'inverse. Pas besoin d'API.
POUR i = 0 _A_ TABLE_Table1..Occurrence PAS 10
TABLE_Table1=i
FIN
amicalement, -- Eric Boyron |
| |
| |
| | | |
|
| | |
| |
Posté le 22 janvier 2009 - 10:14 |
Bonjour,
L'utilisation de la commande TablePosition, ne me satisfait pas non plus car il y a une sorte de saccadement.
Ach, j'ai lu trop vite.
Cela ne sera pas plus fluide avec les API. Je suppose que c'est l'affichage du bandeau de sélection qui fait effet flicker.
Essayer de mettre avant : TABLE_Table1..Etat = AffichageSansSélection
amicalement, -- Eric Boyron |
| |
| |
| | | |
|
| | |
| |
Posté le 22 janvier 2009 - 11:13 |
Bonjour Le problème ne change pas avec TABLE_Table1..Etat = AffichageSansSélection que ce soit avec les API ou TablePosition.
Vous dites que ce ne sera pas plus fluide avec les API, alors que le défilement avec la molette de la souris à un effet qui me conviendrai très bien mais que je n'arrive pas à reproduire.
Cordialement
Nicolas Jaillet |
| |
| |
| | | |
|
| | |
| |
Posté le 22 janvier 2009 - 16:53 |
Re',
Nicolas Jaillet a écrit dans le message de news
Vous dites que ce ne sera pas plus fluide avec les API, alors que le défilement avec la molette de la souris à un effet qui me conviendrai très bien mais que je n'arrive pas à reproduire.
Le problème n'est pas là, le problème est que la table n'est pas un contrôle Windows mais un contrôle Windev dont nous ne connaissons pas l'implémentation.
Simuler le défilement de la souris est assez facile, exemple de code ci-dessous, mais vous partez dans des problèmes insondables, pertes de focus, calcul du nombre d'évènements à envoyer avec la hauteur des lignes, bufferisation des évènements, etc.
MOUSEEVENTF_WHEEL is int = 0x800
DonneFocus(TABLE_Table1) Multitask()
cpt is int = TABLE_Table1..Occurrence FOR n=1 TO cpt API("USER32", "mouse_event", MOUSEEVENTF_WHEEL, 0, 0, 120, 0) END
Le delta doit toujours être un multiple de 120.
amicalement, -- Eric Boyron |
| |
| |
| | | |
|
| | |
| |
Posté le 22 janvier 2009 - 18:09 |
Merci pour cette réponse.
Malheureusement, je ne peux donner le focus au champ Table, car celui-ci sera sur un écran déporté, du coup la souris et clavier sont monopolisés par l'écran principal.
Si vous avez d'autres idées je suis preneur....
Cordialement
Nicolas Jaillet |
| |
| |
| | | |
|
| | |
| |
Posté le 23 janvier 2009 - 01:12 |
Nicolas Jaillet a écrit dans le message de news <c75c30d3ddc85408931ea0ff31354859@news.pcsoft> :
Merci pour cette réponse.
Malheureusement, je ne peux donner le focus au champ Table, car celui-ci sera sur un écran déporté, du coup la souris et clavier sont monopolisés par l'écran principal.
Si vous avez d'autres idées je suis preneur....
A part afficher un champ image par dessus votre table et dessiner l'animation vous même ... je ne crois malheureusement pas qu'il y ait d'autres possibilités.
amicalement, -- Eric Boyron |
| |
| |
| | | |
|
| | |
| |
Posté le 23 janvier 2009 - 11:17 |
Bonjour J'avais penser à cette solution mais je voulais éviter des écritures sur le disques, donc je me suis penché sur les API...
Pour l'instant en redimensionnant/redessinant la table, j'arrive à un résultat qui me convient mais qui reste à approfondir afin de l'intégrer sur tout type de table et visuel...
A voir si cela donne un résultat concluant.
Je vous tiendrais au courant
Cordialement
Nicolas Jaillet |
| |
| |
| | | |
|
| | |
| |
Posté le 23 janvier 2009 - 15:54 |
> J'avais penser à cette solution mais je voulais éviter des écritures sur le disques, donc je me suis penché sur les API...
Je vois pas trop ce que tu veux dire... On peut ecrire dans un champ image sans pour autant ecrire sur le disque. De plus, c'est sans aucun doute ce qui permet le plus de flexibilité pour faire un texte défilant.
cordialement |
| |
| |
| | | |
|
| | |
| |
Posté le 23 janvier 2009 - 16:17 |
Ayant très peut travailler avec les champs images, effectivement je n'ai pas pensé à la solution de sauvegarde en mémoire et non sur le disque.
Merci. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 65 messages |
|
Posté le 18 septembre 2013 - 18:00 |
Bonjour, J'ai 3 tables dans ma fenetre colonnes du fichier CSV importer oui/non nom de la rubrique destination
j'ai recopié le code dans un bouton (et testé aussi dans l'événement scroll de la table. bien que le code ne plante pas, la table n'est jamais redessinée.
manque t'il quelques chose dans le code, ou quelque chose peut il bloquer le multitacherepeint ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 65 messages |
|
Posté le 18 septembre 2013 - 18:14 |
Le défilement synchronisé fonctionne tout simplement dans le scroll de la table 1 C'est pas super fluide et il y a un décalage entre la mise à jour, mais ca fonctionne. si quelqu'un a une solution plus jolie...
TABLE_2 = MoiMême TablePosition(TABLE_2,TablePosition(MoiMême)) TABLE_3 = MoiMême TablePosition(TABLE_3,TablePosition(MoiMême)) |
| |
| |
| | | |
|
| | |
| |
Posté le 24 décembre 2013 - 09:31 |
pour synchronisé 2 table sur un scroll horizontal moi j'ai ça
dans la procédure Ascenseur horizontal (WM_HSCROLL) de [votre table principale]
hwndbarv est un entier = AppelDLL32( "user32" , "FindWindowExA" , ... Handle([table a piloter]) , Null , ... "WDSCROLLBAR" , Null ) IF hwndbarv THEN SendMessage( Handle(TABLE_Résultat) , _EVE.wMessage , _EVE.wParam , hwndbarv ) END |
| |
| |
| | | |
|
| | |
| |
Posté le 29 juillet 2015 - 16:39 |
Oui ! C'est bon pour moi ! Je rajouterai que si on veut synchroniser l'ascenseur horizontal entre deux tableaux, il est indispensable d'utiliser une variable globale pour ne pas boucler sur les évenements: //En déclaration globlale iAscenceurEnUsage est un entier (variable globale)
//Sur l'évenement Ascenseur horizontal de chaque table SI iAscenceurEnUsage = 0 ALORS iAscenceurEnUsage = 1 hwndbarv est un entier = AppelDLL32( "user32" , "FindWindowExA" , Handle(Table1) , Null , "WDSCROLLBAR" , Null ) SI hwndbarv ALORS SendMessage( Handle(Table2) , _EVE.wMessage , _EVE.wParam , hwndbarv ) FIN iAscenceurEnUsage = 0 FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 65 messages |
|
Posté le 31 juillet 2015 - 12:05 |
Merci, Cela fonctionne quand on clique sur les flèches haut ou bas du scrollbar, mais si je déplace la barre de position, la synchro ne se fait pas. |
| |
| |
| | | |
|
| | | | |
| | |
|