Bonjour,
Aujourd'hui, je partage avec vous un bout de code que j'ai mit au point. En fait, le but est de pouvoir utiliser plusieurs fenêtres interne sans forcément les fermer.
Je m'explique, j'ai une zone (235, 97/1037x919) qui me sert à afficher les fenêtres interne.
J'ai crée 15 petits champs fenêtre interne (100x100) en dehors de ma fenêtre principal. Je les nommerais "FI_SlotNum1" "FI_SlotNum2" ... "FI_SlotNum15" (Vous pouvez en crée autant que vous voulez, mon code fonctionne peut importe le nombre de "slot" disponible)
Voici le code : Crée une procédure locale appelé "Nom_de_Procédure_De_Votre_Choix" et copier-y ce code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 //Résumé de la fonction. //Cette fonction à pour but de garder a mémoire(hors écran) les fenêtre interne. //15 slot on été crée. Le développeur peut en crée comme il veut. //A chaque appel de la fonction, voici comment ça ce passe; //1.On regarde si une fenêtre interne n'est pas déjà en utilisation. Si OUI, on doit la remettre a sa place d'attente (hors-écran) //2.On regarde si la fenêtre qui doit être ouverte ne se trouve pas déjà dans une des slot(éviter les doublons et les bug) //3.Si la fenêtre n'existe pas, on regarde si une slot est disponible. Si OUI, on assigne la fenêtre à cet slot et on l'affiche. Si NON, on ouvre la fenêtre de fermeture de fenêtre. PROCEDURE CheckForAvailableSlot(windows) x est un entier = 1 //Numéro de slot //ETAPE1 : On regarde si une fenêtre n'est pas déja en place. Si OUI, on doit la remettre a sa place d'attente sauf si la fenêtre demander est déjà affichée sChamp est une chaîne = ChampInfoXY(235,97,FEN_Main) //Coin supérieur haut gauche de ma zone d'affichage SI Gauche(sChamp,10)="FI_SlotNum" ALORS SI {sChamp}..FenêtreSource=windows ALORS RETOUR //La fenêtre appeler est déjà affiché. SINON {sChamp}..X ={sChamp}..XInitial {sChamp}..Y ={sChamp}..YInitial {sChamp}..Hauteur ={sChamp}..HauteurInitiale {sChamp}..Largeur ={sChamp}..LargeurInitiale FIN FIN
(PS. Dans vos fenêtre Interne, les coordonnées 0,0 ne doivent comporter aucuns champs. Sinon la fonction ne renvoie pas la bonne choses)
(Et pour ceux qui me dirons, ne serait-il pas plus facile de mettre un champs fenêtre interne et appeler la fenêtre? Et bien non, car la fenêtre appeler se verra réinitialisé a chaque appelle, d'où le but de mon code, permettre au fenêtre interne de continuer le traitement en tâche de fond.)
Ensuite, un simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 //ETAPE2 : On regarde si la fenêtre qui doit être ouverte ne se trouve pas déjà dans une des slot(éviter les doublons et les bug) BOUCLE (15) //À changer selon le nombre de champs fenêtre interne crée. Dans mon cas, 15 SI {"FI_SlotNum"+x}..FenêtreSource=windows ALORS //La fenêtre existe déja dans une des slot //On l'affiche! Simple changement de coordonnées. {"FI_SlotNum"+x}..Largeur=1039 {"FI_SlotNum"+x}..Hauteur=921 {"FI_SlotNum"+x}..X=235 {"FI_SlotNum"+x}..Y=97 RETOUR FIN x++ FIN x =1 //ETAPE3 : Si la fenêtre n'existe pas, on regarde si une slot est disponible. Si OUI, on assigne la fenêtre à cet slot et on l'affiche. Si NON, on ouvre la fenêtre de fermeture de processus. BOUCLE (15) //À changer selon le nombre de champs fenêtre interne crée. Dans mon cas, 15 SI {"FI_SlotNum"+x}..FenêtreSource="" ALORS ChangeFenêtreSource({"FI_SlotNum"+x},windows) //On l'affiche! Simple changement de coordonées {"FI_SlotNum"+x}..Largeur=1039 {"FI_SlotNum"+x}..Hauteur=921 {"FI_SlotNum"+x}..X=235 {"FI_SlotNum"+x}..Y=97 RETOUR FIN x++ FIN SI x>15 ALORS //À changer selon le nombre de champs fenêtre interne crée. Dans mon cas, 15 //on doit fermer des fenêtres inutilisé //ouvre(FEN_CloseWindows) //Ouvre une genre de fenêtre montrant tout les slot utilisé pour permettre à l'utilisateur de "flusher" les fenêtres qu'il n'utilise pas. RETOUR FIN
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CheckForAvailableSlot("NomDeTaFenêtreInterne")
Bien sur, à partir de ce moment, vous pouvez créer vous même vos propre code de notifications pour avertir l'utilisateur qu'une fenêtre interne nécessitent sont attention.
J’espère avoir donnée une petite fonctionnalité fort sympathique à vos projet. Si vous avez des améliorations à apporter, n'hésiter pas a les poster!
Sinon un simple merci suffi
Bonne prog!
Partager