Fenêtres filles topmost mais pas dessus du bureau ?!
4 réponses
Brice
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie.
Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais
je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres
filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon
application, mais restent en arrière quand l'application perd le
focus. Un peu à la facon de photoshop et de ses nombreuses boites
d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez
dans un autre programme, elles suivent photoshop et restent en arrière
plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon
programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune
d'entres elles.
Le problème, c'est qu'elles restent aussi au dessus de toutes les
autres applications du bureau... C'est là mon problème et c'est très
génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale
avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne
sais par coeur le nom et définition des apis, mais vous devez voir de
quoi je parle).
Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres
filles suivent en effet la fenêtre mère, mais l'inconvénient c'est
qu'elle ne restent pas devant la fenêtre mère.
Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme.
J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver
à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas
vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe.
Si vous pouviez m'indiquer le moyen, ou me donner un début de piste,
je serai le plus heureux.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LE CARRE Yannick
Salut Brice,
ton formulaire principal est-il modal ?
Dans l'affirmative, les formulaires fils que tu affiches ne peuvent masquer le formulaire principal !
Yannick Brice a écrit dans le message :
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie. Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon application, mais restent en arrière quand l'application perd le focus. Un peu à la facon de photoshop et de ses nombreuses boites d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez dans un autre programme, elles suivent photoshop et restent en arrière plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune d'entres elles. Le problème, c'est qu'elles restent aussi au dessus de toutes les autres applications du bureau... C'est là mon problème et c'est très génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne sais par coeur le nom et définition des apis, mais vous devez voir de quoi je parle). Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres filles suivent en effet la fenêtre mère, mais l'inconvénient c'est qu'elle ne restent pas devant la fenêtre mère. Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme. J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe. Si vous pouviez m'indiquer le moyen, ou me donner un début de piste, je serai le plus heureux.
Merci d'avance, Brice
Salut Brice,
ton formulaire principal est-il modal ?
Dans l'affirmative, les formulaires fils que tu affiches ne peuvent masquer
le formulaire principal !
Yannick
Brice <isoat@free.fr> a écrit dans le message :
cfoaovsmlb0eihh17nsano2r8vc8ks1he9@4ax.com...
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie.
Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais
je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres
filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon
application, mais restent en arrière quand l'application perd le
focus. Un peu à la facon de photoshop et de ses nombreuses boites
d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez
dans un autre programme, elles suivent photoshop et restent en arrière
plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon
programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune
d'entres elles.
Le problème, c'est qu'elles restent aussi au dessus de toutes les
autres applications du bureau... C'est là mon problème et c'est très
génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale
avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne
sais par coeur le nom et définition des apis, mais vous devez voir de
quoi je parle).
Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres
filles suivent en effet la fenêtre mère, mais l'inconvénient c'est
qu'elle ne restent pas devant la fenêtre mère.
Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme.
J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver
à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas
vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe.
Si vous pouviez m'indiquer le moyen, ou me donner un début de piste,
je serai le plus heureux.
Dans l'affirmative, les formulaires fils que tu affiches ne peuvent masquer le formulaire principal !
Yannick Brice a écrit dans le message :
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie. Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon application, mais restent en arrière quand l'application perd le focus. Un peu à la facon de photoshop et de ses nombreuses boites d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez dans un autre programme, elles suivent photoshop et restent en arrière plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune d'entres elles. Le problème, c'est qu'elles restent aussi au dessus de toutes les autres applications du bureau... C'est là mon problème et c'est très génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne sais par coeur le nom et définition des apis, mais vous devez voir de quoi je parle). Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres filles suivent en effet la fenêtre mère, mais l'inconvénient c'est qu'elle ne restent pas devant la fenêtre mère. Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme. J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe. Si vous pouviez m'indiquer le moyen, ou me donner un début de piste, je serai le plus heureux.
Merci d'avance, Brice
Brice
Salut Yannick, merci de ta réponse.
Je ne cerne pas trop ta question peut-être, ma form principal est une feuille MDI appellé en fait par un submain. En effet mon prog démarre sur une submain, qui déclare ma feuille mdi "fmain" et la lance.
Les documents sont internes à cette feuilles mdi.
Mes boites d'outils sont externes, sur le bureu en fait.
Pour répondre à ta question, ma feuille mdi n'est pas modale, puisque c'est la feuille principale, elle ne peut être modale à rien...
Mes boites d'édition et d'outils ne sont (en général) pas non plus modales à ma feuille mdi, puisque je veux pouvoir avoir accès à ces boites d'outils et en même temps à ma feuille mdi et les documents qu'elle contient.
Voilà pourquoi je suis obligé de les mettre topmost si je veux qu'elles restent au dessus de ma feuille mdi. Le hic c'est qu'elles cachent aussi toutes les autres applications, même si ma feuilles mdi est minimisée. Ca engendre aussi d'autre soucis, par exemple, je suis obligé dans la plupart des cas, d'afficher des boites de message modales (msgox modal) sinon elle restent coincées sous mes boites d'outils si ces dernières ont le malheurs d'être au milieu de l'ecran. Idem pour les boites de sélection de fichier, elle restent derrière mes boites d'outils, et deviennent parfois innaccessibles...
Comment garder mes boites d'outils devant ma feuille mdi, sans les mettre topmost (ni modale) ? ce serait ma solution idéale... Photoshop et la plupart des logiciel réussissent, comment faire ?
Brice
Salut Brice,
ton formulaire principal est-il modal ?
Dans l'affirmative, les formulaires fils que tu affiches ne peuvent masquer le formulaire principal !
Yannick
Salut Yannick,
merci de ta réponse.
Je ne cerne pas trop ta question peut-être,
ma form principal est une feuille MDI appellé en fait par un submain.
En effet mon prog démarre sur une submain, qui déclare ma feuille mdi
"fmain" et la lance.
Les documents sont internes à cette feuilles mdi.
Mes boites d'outils sont externes, sur le bureu en fait.
Pour répondre à ta question, ma feuille mdi n'est pas modale, puisque
c'est la feuille principale, elle ne peut être modale à rien...
Mes boites d'édition et d'outils ne sont (en général) pas non plus
modales à ma feuille mdi, puisque je veux pouvoir avoir accès à ces
boites d'outils et en même temps à ma feuille mdi et les documents
qu'elle contient.
Voilà pourquoi je suis obligé de les mettre topmost si je veux
qu'elles restent au dessus de ma feuille mdi. Le hic c'est qu'elles
cachent aussi toutes les autres applications, même si ma feuilles mdi
est minimisée.
Ca engendre aussi d'autre soucis, par exemple, je suis obligé dans la
plupart des cas, d'afficher des boites de message modales (msgox
modal) sinon elle restent coincées sous mes boites d'outils si ces
dernières ont le malheurs d'être au milieu de l'ecran.
Idem pour les boites de sélection de fichier, elle restent derrière
mes boites d'outils, et deviennent parfois innaccessibles...
Comment garder mes boites d'outils devant ma feuille mdi, sans les
mettre topmost (ni modale) ? ce serait ma solution idéale...
Photoshop et la plupart des logiciel réussissent, comment faire ?
Brice
Salut Brice,
ton formulaire principal est-il modal ?
Dans l'affirmative, les formulaires fils que tu affiches ne peuvent masquer
le formulaire principal !
Je ne cerne pas trop ta question peut-être, ma form principal est une feuille MDI appellé en fait par un submain. En effet mon prog démarre sur une submain, qui déclare ma feuille mdi "fmain" et la lance.
Les documents sont internes à cette feuilles mdi.
Mes boites d'outils sont externes, sur le bureu en fait.
Pour répondre à ta question, ma feuille mdi n'est pas modale, puisque c'est la feuille principale, elle ne peut être modale à rien...
Mes boites d'édition et d'outils ne sont (en général) pas non plus modales à ma feuille mdi, puisque je veux pouvoir avoir accès à ces boites d'outils et en même temps à ma feuille mdi et les documents qu'elle contient.
Voilà pourquoi je suis obligé de les mettre topmost si je veux qu'elles restent au dessus de ma feuille mdi. Le hic c'est qu'elles cachent aussi toutes les autres applications, même si ma feuilles mdi est minimisée. Ca engendre aussi d'autre soucis, par exemple, je suis obligé dans la plupart des cas, d'afficher des boites de message modales (msgox modal) sinon elle restent coincées sous mes boites d'outils si ces dernières ont le malheurs d'être au milieu de l'ecran. Idem pour les boites de sélection de fichier, elle restent derrière mes boites d'outils, et deviennent parfois innaccessibles...
Comment garder mes boites d'outils devant ma feuille mdi, sans les mettre topmost (ni modale) ? ce serait ma solution idéale... Photoshop et la plupart des logiciel réussissent, comment faire ?
Brice
Salut Brice,
ton formulaire principal est-il modal ?
Dans l'affirmative, les formulaires fils que tu affiches ne peuvent masquer le formulaire principal !
Yannick
Christophe QUEVAL
Bonjour,
Il est préférable d'utiliser l'API SetParent plutôt que SetWindowsPos. Voici un petit exemple de code pour comprendre :
Créez une appli avec une MDIForm et 2 Forms dont l'une sera en MDIChild False (Form1) et l'autre MDIChild = True (Form2). Déclarez l'api suivante : Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Et insérez ce code : Private Sub MDIForm_Load() Form1.Show Call SetParent(Form1.hWnd, MDIForm1.hWnd) Form2.Show End Sub
Résultat : Form1 reste toujours en avant plan dans l'appli seulement.
Bon courage... :-)
Christophe
"Brice" a écrit dans le message de news:
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie. Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon application, mais restent en arrière quand l'application perd le focus. Un peu à la facon de photoshop et de ses nombreuses boites d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez dans un autre programme, elles suivent photoshop et restent en arrière plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune d'entres elles. Le problème, c'est qu'elles restent aussi au dessus de toutes les autres applications du bureau... C'est là mon problème et c'est très génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne sais par coeur le nom et définition des apis, mais vous devez voir de quoi je parle). Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres filles suivent en effet la fenêtre mère, mais l'inconvénient c'est qu'elle ne restent pas devant la fenêtre mère. Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme. J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe. Si vous pouviez m'indiquer le moyen, ou me donner un début de piste, je serai le plus heureux.
Merci d'avance, Brice
Bonjour,
Il est préférable d'utiliser l'API SetParent plutôt que SetWindowsPos.
Voici un petit exemple de code pour comprendre :
Créez une appli avec une MDIForm et 2 Forms dont l'une sera en MDIChild False (Form1) et l'autre MDIChild = True (Form2).
Déclarez l'api suivante : Private Declare Function SetParent Lib "user32"
(ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Et insérez ce code :
Private Sub MDIForm_Load()
Form1.Show
Call SetParent(Form1.hWnd, MDIForm1.hWnd)
Form2.Show
End Sub
Résultat : Form1 reste toujours en avant plan dans l'appli seulement.
Bon courage... :-)
Christophe
"Brice" <isoat@free.fr> a écrit dans le message de
news:cfoaovsmlb0eihh17nsano2r8vc8ks1he9@4ax.com...
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie.
Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais
je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres
filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon
application, mais restent en arrière quand l'application perd le
focus. Un peu à la facon de photoshop et de ses nombreuses boites
d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez
dans un autre programme, elles suivent photoshop et restent en arrière
plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon
programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune
d'entres elles.
Le problème, c'est qu'elles restent aussi au dessus de toutes les
autres applications du bureau... C'est là mon problème et c'est très
génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale
avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne
sais par coeur le nom et définition des apis, mais vous devez voir de
quoi je parle).
Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres
filles suivent en effet la fenêtre mère, mais l'inconvénient c'est
qu'elle ne restent pas devant la fenêtre mère.
Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme.
J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver
à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas
vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe.
Si vous pouviez m'indiquer le moyen, ou me donner un début de piste,
je serai le plus heureux.
Il est préférable d'utiliser l'API SetParent plutôt que SetWindowsPos. Voici un petit exemple de code pour comprendre :
Créez une appli avec une MDIForm et 2 Forms dont l'une sera en MDIChild False (Form1) et l'autre MDIChild = True (Form2). Déclarez l'api suivante : Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Et insérez ce code : Private Sub MDIForm_Load() Form1.Show Call SetParent(Form1.hWnd, MDIForm1.hWnd) Form2.Show End Sub
Résultat : Form1 reste toujours en avant plan dans l'appli seulement.
Bon courage... :-)
Christophe
"Brice" a écrit dans le message de news:
Bonjour à tous,
j'ai un petit souci qui me bouffe la vie. Je travaille depuis des mois sur un logiciel qui arrivge à terme, mais je me rend compte d'un hic qui pourri la vie de l'utilisateur.
Mon application est multi-documents mais avec de nombreuses fenêtres filles, des boites d'édition et des boites d'outils.
Je souhaite que ces fenêtres filles restent au dessus de mon application, mais restent en arrière quand l'application perd le focus. Un peu à la facon de photoshop et de ses nombreuses boites d'outils. Elles restent au dessus, mais si vous ouvrez ou travaillez dans un autre programme, elles suivent photoshop et restent en arrière plan du logiciel qui a le focus. Est-ce clair ?
Pour que toutes mes fenêtres filles restent au dessus de mon programme, j'ai appliqué l'api 'setwindowspos' en topmost sur chacune d'entres elles. Le problème, c'est qu'elles restent aussi au dessus de toutes les autres applications du bureau... C'est là mon problème et c'est très génant.
J'ai essayé d'uniquement les mettre filles de lla fenêtre principale avec une api "set parent" (je n'ai pas mon code sous les yeux et je ne sais par coeur le nom et définition des apis, mais vous devez voir de quoi je parle). Cet api utilisé sans "setwindowspos topmost" est pas mal, les fenêtres filles suivent en effet la fenêtre mère, mais l'inconvénient c'est qu'elle ne restent pas devant la fenêtre mère. Et si mon programme est maximisé, impossible de les atteindre...
Voilà mon dilemme. J'ai essayé de mettre en oeuvre des solutions incroyables pour arriver à mes fins, mais elles sont beaucoup trop lourdes, et ne sont pas vraiment satisfaisantes.
Je suis certain qu'il doit exister une solution simple qui m'échappe. Si vous pouviez m'indiquer le moyen, ou me donner un début de piste, je serai le plus heureux.
Merci d'avance, Brice
dolham
Il me semble que SetParent fait que la form fille "suivra" la feuille MDI, si l'appli n'est plus active, mais qu'elle ne reste pas en avant plan de la MDI.
Pour ne pas dire de bétise, je vais rééssayé cette solution (une fois chez moi, je suis dans un cyber-café), et je donnerai des nouvelles :)
Merci, Brice
Il me semble que SetParent fait que la form fille "suivra" la feuille
MDI, si l'appli n'est plus active, mais qu'elle ne reste pas en avant
plan de la MDI.
Pour ne pas dire de bétise, je vais rééssayé cette solution (une fois
chez moi, je suis dans un cyber-café), et je donnerai des nouvelles :)
Il me semble que SetParent fait que la form fille "suivra" la feuille MDI, si l'appli n'est plus active, mais qu'elle ne reste pas en avant plan de la MDI.
Pour ne pas dire de bétise, je vais rééssayé cette solution (une fois chez moi, je suis dans un cyber-café), et je donnerai des nouvelles :)