@Pan59:
Il y a une confusion qui règne depuis longtemps, autour du lancement de fenêtres par Panoramic. Je me suis déjà expliqué souvent sur le forum à ce sujet, et j'ai présenté les solutions appropriées. Suivant les cas, il peut y en avoir plusieurs.
D'abord un peu de théorie. Eh oui, c'est barbant, mais c'est indispensable.
Commençons par la notion de fenêtre en Windows. Comme son nom l'indique, pratiquement tout dans Windows est présenté sous forme de fenêtre (je reviendrai plus tard sur les rares execptions). Windows ne connapit qu'un type de fenêtre: le fenêtre ! Mais, une fenêtre peut avoir plusieurs attributs, elle a un parent, et elle peut être lancée en mode modal ou non-modal.
D'abord les attributs: taille, position, style et/ou présence du cadre, capture de la souris, acceptation de glisser/déposer, ... il y en a des dizaines. Et al permanance de la fenêtre au-dessus des autres estr juste un attribut parmi les autres.
Ensuite le parent: c'est une autre fenêtre qui en général a créé la fenêtre en question et qui est responsable de sa gestion (suppression en fin de programme, par exemple). Mais un peut faire "adopter" une fenêtre par une autre en lui changeant son parent. Une fenêtre sans parent (handle du parent égal à zéro) est considérée comme fenêtre fille du bureau (le bureau est son parent). C'est le cas de toutes les fenêtres FORM 0 (fenêtre principale de n'importe quel programme). Mais là encore, on peut faire adopter une fenêtre par le bureau...
Puis le mode. Intuitivement, on pense que lorsqu'on ouvre une fenêtre, celle-ci se met par-dessus tout et reste active jusqu'à ce qu'on la ferme, comme c'est le cas des dialogues d'ouverture, par exemple. On appelle ce mode le mode modal. Or, on peut ouvrir une fenêtre en mode non-modal ! Ceci veut dire que la fenêtre est bien créée, ouverte, placée au-dessus des autres et a le focus. Mais elle ne garde pas le focus captif ! En effet, on peut cliquer ailleurs, non seulement sur un autre programme (ce qui est normal, après tout), mais également sur une autre fenêtre du même programme. Et dans ce cas, c'est cette dernière qui devient active et qui vient recouvrir la fenêtre précédente.
Tous les objets de Windows (memo, edit, button, ...) sont des fenêtres modales dont le parent une une form, un container, un controle active-x etc, qui sont tous eux-mêmes des fenêtres dont le parent est ...
En réalité, on a dans Windows une arborescence complexe de fenêtres dont la racine est le bureau, et dont la profondeur peut être assez grande.
Juste encore un petit mot que ce qui n'est pas présenté en mode fenêtre dans Windows. Ce sont certains objets appelés "non fenêtrés" comme les libellés (alpha en Panoramic), les picture et tous les objets non visuels comme les dialogues d'ouverture, les timer, les listes en mémoire (dlist en Panoramic) etc.
Maintenant, venons-en à Panoramic.
A la lecture de ce qui précède, il devient clair que la commande FORM de Panoramic crée uniquement des fenêtres en mode non-modal ! Et le problème que tu rencontres, ce n'est pas un bug, c'est une fonctionnalité voulue ! Car ainsi, le programmeur garde toute liberté pour gérer lui-même ce qu'il veut faire avec la fenêtre. Encore faut-il le faire en connaissant le fonctionnement de Windows, d'où mon petit laïus. Peut-être Jack ajoutera-t-il un jour une commande FORM_MODAL (cela a déjà été demandé), mais c'est à lui de voir.
En attendant, je te propose deux solutions:
1. Ma fonction WindowTopMost dans KGF.dll (et SUB_KGF.bas). Elle bloque une fenêtre en permanence au-dessus des autres, y compris au-dessus de la form 0 du programme qui l'a créée. Souvent, cela suffit. Néanmoins, la form 0 du programme reste active. On peut continuer à cliquer dedans, saisir des informations etc.
2. tu crées la fenêtre annexe et tu la caches aussitôt. Lorsque tu voudras l'afficher, tu fais d'abord inactive 0, puis show de cette fenêtre. Lorsque tu fermes cette fenêtre par un bouton (ou dans l'évènement on_close de cette fenêtre si tu utilises la croix rouge), tu fais hide de cette fenêtre, puis active 0, et le tour est joué.
Regarde la démo suivante:
- Code:
-
label form0, form10
caption 0,"Form 0"
button 1 : caption 1,"Sur form 0"
on_click 1,form0
form 10 : hide 10 : top 10,80 : left 10,200
caption 10,"Form 10"
on_close 10,form10
button 11 : parent 11,10 : caption 11,"Sur form 10"
on_click 11,form10
end
form0:
message "On est sur la form 0"
inactive 0
show 10
return
form10:
message "On est sur la form 10"
hide 10
active 0
to_foreground 0 : ' uniquement pour passer devant l'éditeur
return
J'espère que les choses sont plus claires maintenant.