PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → 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
Started by Fatdem, Mar., 17 2025 1:39 AM - 1 reply
Registered member
20 messages
Posted on March, 17 2025 - 1:39 AM
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
Posted on March, 17 2025 - 8:08 AM
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