PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → Chargement Progressif des Contenus dans une Zone Répétée (Scroll vers le Bas) – WinDev Mobile
Chargement Progressif des Contenus dans une Zone Répétée (Scroll vers le Bas) – WinDev Mobile
Débuté par Fatdem, 17 mar. 2025 01:39 - 5 réponses
Membre enregistré
22 messages
Posté le 17 mars 2025 - 01:39
Bonjour la communauté,

Je travaille sur un système de chargement progressif des données dans une zone répétée sous WinDev Mobile, un peu comme le scroll infini de Facebook ou YouTube.

Objectif :
- Charger une première série de article (ex. 10 ou 30) au lancement.

- Charger les suivantes automatiquement quand l’utilisateur atteint la fin de la liste.

Approche actuelle :
Au démarrage, je récupère les premiers Articles avec une requête SQL

Quand l’utilisateur défile jusqu’à la fin de la zone répétée, de nouvelles Articles sont chargées.

Est-ce que quelqu'un a déjà mis en place un système de défilement infini sous WinDev Mobile et peut me guider ?

Merci d'avance pour votre aide ! 🙏


/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/
Voici Mon travail


Principe de fonctionnement du code :
NB: Mon unique champ est une zone repetee vertical appelé:ZRV_Plus et je suis en POO

Initialisation :
On vide la zone répétée ZRV_Plus.
On charge les 30 premières vidéos.

Chargement des vidéos par lot de 30 :
On récupère le total des vidéos à afficher.
Si toutes les vidéos ne sont pas encore chargées (gnOffset < gnTotalVideos), on charge 30 vidéos supplémentaires à chaque appel.

Mécanisme de chargement infini :
Lorsque l'utilisateur atteint la fin de ZRV_Plus, on recharge 30 nouvelles vidéos si nécessaire.On met à jour gnOffset pour passer à la page suivante.

Optimisation :
La requête COUNT(*) est exécutée une seule fois pour éviter des appels inutiles à la base.


// 1- jai declarer trois variable global
gnLimite est un entier = 30 // Limite du nombre de vidéos à charger à chaque fois
gnOffset est un entier = 0 // Offset de la pagination (commence à 0)
gnTotalVideos est un entier = 0 // Nombre total de vidéos dans la base de données


// 2- jai creer une methode pour recuperer les donner via mysql
Procedure ChargeVideos()

SI gnOffset = 0 ALORS // execute une seul fois pour gnffset = 0
// je compte le nombre de donner disponible a charger
ReqRecupDescriptionVideo est une chaîne = "SELECT COUNT(*) FROM descriptionVideo"
ExecuReq = mySQLExec(ReqRecupDescriptionVideo, 1)


// Vérifier si la requête a bien été exécutée
SI ExecuReq <> 0 ALORS
SI mySQLFetch(1) ALORS
//je place cet nombre dans ma variable gnTotalVideos
gnTotalVideos = mySQLLitCol(1, 1) // Utilisation de mySQLLitCol pour récupérer le COUNT(*)
SINON
Info("Aucun résultat trouvé.")
FIN
SINON
Info("Erreur lors de l'exécution de la requête.")
FIN

FIN

// 3- cette variable gnTotalVideos va maider si le nombre de video est atteinte
//a chaque fois que gnTotalVideos different de gnOffset je recupere un lot de donner pour completer mon affichage dans la zone repeter
// par defaut le nombre de donnee recuperer est 30 et gnOffset est l'indice appartire d'ou il faut recuperer les 30 donner

SI gnTotalVideos <> gnOffset ALORS

ReqRecupDescriptionVideo est une chaîne = "SELECT * FROM descriptionVideo WHERE IDStatutVideo = 1 AND IDTypeVideo = 3 ORDER BY IDDescriptionVideo LIMIT " + gnLimite + " OFFSET " + gnOffset
ExecuReq = mySQLExec(ReqRecupDescriptionVideo, 1)

TANTQUE mySQLFetch(1)
CheminCouverture = "C:/wamp64/www/Bensotv/albumprochette/" + mySQLLitColParNom(1, "CheminCouverture")
Trace(mySQLLitColParNom(1, "CheminCouverture"))
// Ajout des enregistrements
ZoneRépétéeAjoute(FEN_BENSOTV.ZRV_Plus, mySQLLitColParNom(1, "IDDescriptionVideo") + TAB + CheminCouverture)
FIN
//Pagination, incrementer de 30, a chaque rajout pour recuperer +30 autre a ajouter
gnOffset += gnLimite

FIN


// dans ma zone repetee vertical (ZRV_Plus)
// 4- code dinitialisation
ZoneRépétéeSupprimeTout(FEN_BENSOTV.ZRV_Plus)
Oje1RecupDescriptVideo est un RecupToutDescriptionVideo
Oje1RecupDescriptVideo.ChargeVideos()


// 5- code affichage dune ligne
//qui est normalement l'element declencher selon Lst93
//Mais qui marche pas bien chemoi

SI ZRV_Plus = ZRV_Plus..Occurrence ET gnOffset <> 0 ALORS

Oje2RecupDescriptVideo est un RecupToutDescriptionVideo
Oje2RecupDescriptVideo.ChargeVideos()

FIN
LIMIT et OFFSET permettent de charger progressivement les vidéos sans ralentir l'application.


Voici LST 93 qui en parle:





J'ai besoins de votre aide je bloque depuis une semaine
Posté le 17 mars 2025 - 08:08
Fatdem a écrit :
Bonjour la communauté,

Je travaille sur un système de chargement progressif des données dans une zone répétée sous WinDev Mobile, un peu comme le scroll infini de Facebook ou YouTube.

Objectif :
- Charger une première série de article (ex. 10 ou 30) au lancement.

- Charger les suivantes automatiquement quand l’utilisateur atteint la fin de la liste.

Approche actuelle :
Au démarrage, je récupère les premiers Articles avec une requête SQL

Quand l’utilisateur défile jusqu’à la fin de la zone répétée, de nouvelles Articles sont chargées.

Est-ce que quelqu'un a déjà mis en place un système de défilement infini sous WinDev Mobile et peut me guider ?

Merci d'avance pour votre aide ! 🙏


/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/
Voici Mon travail


Principe de fonctionnement du code :
NB: Mon unique champ est une zone repetee vertical appelé:ZRV_Plus et je suis en POO

Initialisation :
On vide la zone répétée ZRV_Plus.
On charge les 30 premières vidéos.

Chargement des vidéos par lot de 30 :
On récupère le total des vidéos à afficher.
Si toutes les vidéos ne sont pas encore chargées (gnOffset < gnTotalVideos), on charge 30 vidéos supplémentaires à chaque appel.

Mécanisme de chargement infini :
Lorsque l'utilisateur atteint la fin de ZRV_Plus, on recharge 30 nouvelles vidéos si nécessaire.On met à jour gnOffset pour passer à la page suivante.

Optimisation :
La requête COUNT(*) est exécutée une seule fois pour éviter des appels inutiles à la base.


// 1- jai declarer trois variable global
gnLimite est un entier = 30 // Limite du nombre de vidéos à charger à chaque fois
gnOffset est un entier = 0 // Offset de la pagination (commence à 0)
gnTotalVideos est un entier = 0 // Nombre total de vidéos dans la base de données


// 2- jai creer une methode pour recuperer les donner via mysql
Procedure ChargeVideos()

SI gnOffset = 0 ALORS // execute une seul fois pour gnffset = 0
// je compte le nombre de donner disponible a charger
ReqRecupDescriptionVideo est une chaîne = "SELECT COUNT(*) FROM descriptionVideo"
ExecuReq = mySQLExec(ReqRecupDescriptionVideo, 1)


// Vérifier si la requête a bien été exécutée
SI ExecuReq <> 0 ALORS
SI mySQLFetch(1) ALORS
//je place cet nombre dans ma variable gnTotalVideos
gnTotalVideos = mySQLLitCol(1, 1) // Utilisation de mySQLLitCol pour récupérer le COUNT(*)
SINON
Info("Aucun résultat trouvé.")
FIN
SINON
Info("Erreur lors de l'exécution de la requête.")
FIN

FIN

// 3- cette variable gnTotalVideos va maider si le nombre de video est atteinte
//a chaque fois que gnTotalVideos different de gnOffset je recupere un lot de donner pour completer mon affichage dans la zone repeter
// par defaut le nombre de donnee recuperer est 30 et gnOffset est l'indice appartire d'ou il faut recuperer les 30 donner

SI gnTotalVideos <> gnOffset ALORS

ReqRecupDescriptionVideo est une chaîne = "SELECT * FROM descriptionVideo WHERE IDStatutVideo = 1 AND IDTypeVideo = 3 ORDER BY IDDescriptionVideo LIMIT " + gnLimite + " OFFSET " + gnOffset
ExecuReq = mySQLExec(ReqRecupDescriptionVideo, 1)

TANTQUE mySQLFetch(1)
CheminCouverture = "C:/wamp64/www/Bensotv/albumprochette/" + mySQLLitColParNom(1, "CheminCouverture")
Trace(mySQLLitColParNom(1, "CheminCouverture"))
// Ajout des enregistrements
ZoneRépétéeAjoute(FEN_BENSOTV.ZRV_Plus, mySQLLitColParNom(1, "IDDescriptionVideo") + TAB + CheminCouverture)
FIN
//Pagination, incrementer de 30, a chaque rajout pour recuperer +30 autre a ajouter
gnOffset += gnLimite

FIN


// dans ma zone repetee vertical (ZRV_Plus)
// 4- code dinitialisation
ZoneRépétéeSupprimeTout(FEN_BENSOTV.ZRV_Plus)
Oje1RecupDescriptVideo est un RecupToutDescriptionVideo
Oje1RecupDescriptVideo.ChargeVideos()


// 5- code affichage dune ligne
//qui est normalement l'element declencher selon Lst93
//Mais qui marche pas bien chemoi

SI ZRV_Plus = ZRV_Plus..Occurrence ET gnOffset <> 0 ALORS

Oje2RecupDescriptVideo est un RecupToutDescriptionVideo
Oje2RecupDescriptVideo.ChargeVideos()

FIN
LIMIT et OFFSET permettent de charger progressivement les vidéos sans ralentir l'application.


Voici LST 93 qui en parle:





J'ai besoins de votre aide je bloque depuis une semaine


Pour ta fin de liste et ton début de liste essaye avec la détection de l'ascenseur

Sens est un entier
Sens = PoidsFort(_EVE.wParam)
SI Sens > 0 ALORS
SI 1 = AscenseurPosition(ZR_Ligne, ascVert) ET gnNumPageCourante <> 0 ALORS
Procédureprécédent()
TablePosition(ZR_Ligne,AscenseurPositionMax(ZR_Ligne,ascVert))
FIN
SINON
SI AscenseurPositionMax(ZR_Ligne,ascVert) = AscenseurPosition(ZR_Ligne, ascVert) +1 ET gnNumPageCourante <> gnNbPagesTotal ALORS
Procéduresuivant()
FIN
FIN
Membre enregistré
22 messages
Posté le 17 mars 2025 - 21:41
Malheureusement je développe sur Windev-Mobile de la version 25.
Sur WinDev Mobile (Android) , _EVE.wParamn'est pas disponible , car les événements sous Android ne fonctionnent pas de la même manière que sous Windows.
Membre enregistré
531 messages
Posté le 21 mars 2025 - 17:51
Salut,
dans les zr, tu as un traitement "ajout d'elements supplementaires par le bas"
dedans, tu met un appel a ta procédure qui remplit la suite

--
José
Membre enregistré
893 messages
Posté le 21 mars 2025 - 19:38
Bonjour, j'utilise également la méthode indiquée par Jopab. Cela vous permet d'utiliser une méthode de pagination pour remplir la liste si l'utilisateur veut voir plus de contenu.

Rubén

--
Rubén Sánchez Peña

https://depot.pcsoft.fr/search.awp…
https://play.google.com/store/apps/details…
https://www.linkedin.com/in/rub%C3%A9n-s%C3%A1nchez-pe%
Membre enregistré
22 messages
Posté le 24 mars 2025 - 22:22
Bonsoir à tous merci pour votre intervention, moi j'ai la version 25 de Windev-Mobile et cet événement est "Ajout d'éléments supplémentaires dans ma zr" , mais j'ai testé cet événement en mettant un trace("ok") il ne répond pas, j'ai ajouter des élément grâce à un bouton encore il ne répond pas !, moi je veux ajouter des élément qu'après le scroll du dernier élément, sûrement je n'est pas bien. Compris votre méthodologie, pouvez vous plus détailler ? Svp
Message modifié, 24 mars 2025 - 22:38