Bonjour,

Résumé :
Je cherche un speudo code optimisé permettant de réalisé un menu assez simple répondant aux critères précis.
Exemple: Quand on arrive en bas du menu et qu'on descend, on arrive en haut. Et quand on monte en haut, on arrive en bas du menu...

Note : Chaque valeur est indiqué a titre d'exemple (8 lignes..)pour simplifier mais sont en faite variables suivant la configuration.

Environnement :
J'ai un menu verticale de 8 lignes (numéroté de 0 à 7).
Le cadre qui contient le menu à une hauteur de 4 lignes, je ne peux donc afficher que 4 lignes au maximum.
Je peux sélectionner qu'une seule ligne. Je peux monter ou descendre ma sélection de un en un.


Caractèristique:
Si le cadre affiche les lignes 0,1,2,3 et que ma selection est sur la ligne 2, quand je descend ma selection, elle passe à la ligne 3.
Si je descend encore la selection sera sur 4 et les lignes affichées seront 1,2,3,4 (le cadre descendra de 1) etc..
Le cadre descendra donc a chaque fois que la selection est sur la ligne la plus basse affichée et que l'on descend dans le menu.
A l'exception de la dernier ligne (7): Si la selection est sur la ligne 7 (lignes affichées 4,5,6,7) et que on descend, la selection sera sur la ligne 0 et le cadre affichera 0,1,2,3.

L'inverse est valable à l'inverse. Si on selection la ligne 0 (lignes affichées 0,1,2,3) et que l'on monte on arrive à la selection 7 (lignes affichées 4,5,6,7)..

Paramètres:
En entrée :
- int_size_menu :La taille du menu (8)
- int_size_cadre : 4
- int_selection :La courante ligne selectionnée
- int_top_du_cadre :Les lignes affichées représenté par la valeur la plus basse des lignes affichées (affichée: 0,1,2,3 valeur:0 |affichée: 3,4,5,6 valeur:3)
(lignes affichées tjs égale à [int_top_du_cadre... int_size_cadre + int_top_du_cadre -1 ])
- int_action : l'action a faire 1 = descendre la selection ; -1 = monter la selection

En sortir:
On souhaite avoir int_selection et int_top_du_cadre après l'action.


Difficultés:
- Le difficulté est les bornes car le principe du modulo fonctionne quand on descend la selection (int_selection (7) + int_action (+1)) % int_size_menu = 0) mais pas quand on monte (int_selection (0) + int_action (-1)) % int_size_menu = -1).
- Egalement distingué entre descendre le cadre d'affichage et la selection


Esquisse de Solution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
//On obtient la selection après l'action
var select = (int_selection + int_action)%int_size_menu;
//On obtient la selection par rapport aux lignes affichées
var relatif = (select - int_top_du_cadre);
 
//Si on atteint le bas des lignes affichées et que on n'est pas en bas du menu
//Ou si on est en haut du cadre mais pas mais pas en haut du menu
// Alors bougé le int_top_du_cadre en fonction de l'action
if((((relatif +1) == int_size_cadre)&&((int_top_du_cadre + int_size_cadre) < int_size_menu))||((relatif == 1)&&(select != 1 )))
					return int_top_du_cadre+ int_action;
Ce code rétourne bien la selection après l'action avec le
int_top_du_cadre adapté, mais il bug int_selection = 0 est que on monte car alors select = -1.
Egalement si int_selection = 0 alors int_top_du_cadre n'est pas automatiquement = 0.

Mais pour votre aide afin d'optimiser ce menu pourtant de principe simple (meme si je suis pas forcméent claire