PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Sur l'exemple WD RouletteSurOnglet de la LST 125
Sur l'exemple WD RouletteSurOnglet de la LST 125
Started by Alain, Jul., 28 2021 2:56 PM - 9 replies
Registered member
3 messages
Posted on July, 28 2021 - 2:56 PM
Bonjour à tous,

J’ai un souci avec l’exemple WD RouletteSurOnglet de la LST 125.
L’exemple fourni fonctionne bien, mais lorsque je tente de faire la même chose dans un projet personnel cela ne fonctionne pas.

En testant pas à pas les deux j’ai noté que l’exemple de la LST sur la ligne :
SI _EVE.wParam > 0 ALORS

de la procédure interne ChangeVoletSurRoulette(), renvoie l’entier positif (7864320) en avançant et l’entier négatif (-7864320) en reculant.

Hors dans mon projet, le mouvement de souris renvoie deux entiers positifs : (7864320) le même que dans l’exemple en avançant, mais (4287102976) en reculant.

Quelqu’un saurait-il me dire pourquoi ?

Merci
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on July, 28 2021 - 3:44 PM
Ton projet est en 32 ou 64 bits ?

--
Cordialement,

Philippe SAINT-BERTIN
Registered member
3 messages
Posted on July, 29 2021 - 5:29 PM
Philippe Saint-Bertin bonjour,

Mon projet est en 64 bits. Il est vrai que l'exemple de la LST est en 32 bits.

J'ai remarqué aussi que cela inhibait le drag and drop sur la fenêtre, qui fonctionnait bien jusque-là :

//Initialisation du Drag and Drop sur la fenêtre.
ExplorerAccepte(Vrai,MoiMême)
Evénement("Explorer", "*.", 563)


Procedure Explorer()
nNbFichiers est un entier
// Récupération et affichage du nombre de fichiers dropés.
nNbFichiers = ExplorerRécupère(_EVE.wParam)
ToastAffiche(gnNbFichiers, toastCourt,cvMilieu,chCentre)


Conflit au niveau des événements (_EVE.wParam) sans doute…
Mais peut-on régler tout cela en restant en 64 bits ? Sinon, je me ferai une raison.

Merci
Registered member
57 messages
Popularité : +6 (6 votes)
Posted on August, 01 2021 - 6:53 PM
Changer le sens de défilement de la roulette dans Windows?

--
Dr J-M des Grottes
Gestionnaire du Registre des Néphrologues Francophones de Belgique
CHU Tivoli
La louvière
Belgique
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on August, 02 2021 - 9:31 AM
Bonjour,

en utilisant PoidsFort() et PoidsFaible() ?

--
Cordialement,

Philippe SAINT-BERTIN
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on August, 02 2021 - 9:34 AM
Registered member
351 messages
Popularité : +75 (75 votes)
Posted on August, 04 2021 - 3:22 PM
Bonjour,

Voici l'explication qui te permettra de mieux comprendre pourquoi il y a une différence entre le 32 et le 64 bits :

En 32 bits (entier système sur 4 octets) :
0x00780000 = 7864320
0xFF880000 = -7864320

En 64 bits (entier système sur 8 octets) :
0x0000000000780000 = 7864320
0x00000000FF880000 = 4287102976

Il te faut donc conserver uniquement les 4 derniers octets de ton entier système et le transformer en entier sur 4 octets pour le 64 bits pour que ton test fonctionne.

(A noter qu'en 64 bits _EVE.lparam et _EVE.wparam sont des entiers sur 8 octets).

La fonction PoidsFaible() te permettra de faire tout ça en lui précisant la taille voulue, ton code sera ainsi compatible 32 et 64 bits.

Dans ton cas :
PoidsFaible(_EVE.wParam,4)

Ta routine deviendra donc :
Procedure Volet_Changement_Avec_Roulette()

// Nombre de volets dans l'onglet ou le ruban
Nombre_Volets_Maximum est un entier = MoiMême..Occurrence

// Si la roulette va vers l'avant
SI PoidsFaible(_EVE.wParam,4) > 0 ALORS

// Volet précédent
POUR Compteur = MoiMême - 1 _À_ 1 PAS -1
SI MoiMême[Compteur]..Visible _ET_ MoiMême[Compteur]..Etat = Actif ALORS MoiMême = Compteur; SORTIR
FIN

SINON

// Volet suivant
POUR Compteur = MoiMême + 1 _À_ Nombre_Volets_Maximum
SI MoiMême[Compteur]..Visible _ET_ MoiMême[Compteur]..Etat = Actif ALORS MoiMême = Compteur; SORTIR
FIN

FIN

// Evénement traité
_EVE.Retour = 0

J'ai ajouté mon code source pour la gestion de la roulette dans les rubans et les onglets, je ne sais pas comment est l'exemple de la LST mais j'espère qu'il est identique ou même mieux ! (mais apparemment non puisqu'il ne fonctionne pas en 64 bits)

Pour implémenter cette procédure sur ton champ Ruban ou Onglet, tu peux utiliser ce code dans la déclaration de ta fenêtre ou du champ par exemple ou bien lancer la procédure directement depuis l'événement WM_MOUSEWHEEL du code de ton champ :
// On ajoute le changement des volets avec la roulette
Nom_Du_Champ..Traitement[trtRouletteSouris]..Avant = Volet_Changement_Avec_Roulette


--
Bon développement, Patrick [3po.fr]
Posted on August, 08 2021 - 8:57 AM
Patrick bonjour,

Merci pour ta réponse très claire. Bien qu'étant un "développeur" amateur elle me permet de comprendre ce qui se passe et va me permettre de m'y adapter.

Cordialement,

Alain/Pavulon
Registered member
3 messages
Posted on August, 08 2021 - 9:03 AM
Patrick Allémoz, merci de ta réponse très claire. Bien que "développeur" amateur je vais pouvoir m'adapter à la situation.
Cordialement.

Alain/Pavulon
Registered member
351 messages
Popularité : +75 (75 votes)
Posted on August, 08 2021 - 9:52 AM
Patrick c'est suffisant, merci bien.

J'aurai dû optimiser ce code un peu plus avec ceci :
Procedure Volet_Changement_Avec_Roulette()

// Si la roulette va vers l'avant
SI PoidsFaible(_EVE.wParam,4) > 0 ALORS

// Volet précédent
POUR Compteur = MoiMême - 1 _À_ 1 PAS -1
SI MoiMême[Compteur]..Visible _ET_ MoiMême[Compteur]..Etat = Actif ALORS MoiMême = Compteur; SORTIR
FIN

SINON

// Volet suivant
POUR Compteur = MoiMême + 1 _À_ MoiMême..Occurrence
SI MoiMême[Compteur]..Visible _ET_ MoiMême[Compteur]..Etat = Actif ALORS MoiMême = Compteur; SORTIR
FIN

FIN

// Evénement traité
_EVE.Retour = 0

La conservation du nombre de volets n'est pas utile dans ce cas !

--
Bon développement, Patrick [3po.fr]