A L'AIDE ! barre de titre d' EXCEL qui disparaît, en plein écran !

cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 avril 2017 - 17 mars 2009 à 18:14
cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 avril 2017 - 18 mars 2009 à 11:44
AIE!!! depuis un bon bout de temps je cherche à faire des trucs en VBA, pour afficher un menu en haut de la fenêtre, après être passé normalement en plein écran.

J'y suis enfin arrivé (boite de dialogue ouverte sur un hook clavier et repositionnée en haut de la fenêtre principale) et tout d'un coup ma fenêtre ne s'affiche plus car la zone cliente (celle dans laquelle s'affiche la feuille de travail) prend maintenant tout l'écran et qu'il n'y a même plus la barre de titre (le 'menu système').

Quand je sors du plein écran tout apparaît normalement !!!!!

.. et ça le fait pour tous mes fichiers, pas seulement celui ou j'ai mis mon code.

Il doit y avoir des options dans excel qui ont été modifiées par mes essais/erreurs sur les menus...

Quel qu'un arait il une idée ???

Merci d'avance

InfOrom

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 mars 2009 à 20:41
Salut
Manque de précision :
- Catégorie VB.Net et tu parles d'Excel : Pilotes-tu ce dernier en .Net ?
- "Haut de fenêtre" : C'est quoi ? l'application Excel ou une UserForme ?
- "boite de dialogue ouverte sur un hook clavier" : Explique puisque ca semble être l'orogine de ton problème
- "Fenêtre principale" : Dito

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 avril 2017
18 mars 2009 à 06:34
Désolé pour la catégorie... j'ai vu Windows/API, j'ai pris.... 

Je réponds tranquillement à tes questions, bien que gobalement je trouve ton message un peu... 'cavalier'... enfin, ce n'est pas le plus important:

- "haut de fenêtre": aux mêmes coordonnées écran que la "fenêtre principale", celle de l'application (Application.hWnd), mais sur une hauteur réduite, pour fairejuste apparaître une barre de menus.

Jusqu'à l'apparition de mon problème, elle recouvrait l'emplacement de la "barre de titre", là où il y a l'icone ("menu système") d'excel et le titre, ainsi que les 3 boutons réduction ,etc.  La fenêtre cliente (celle qui affiche la feuille de travail) commençait juste en dessous. Maintenant, lorsque je passe en plein écran, la barre de titre a disparu et la feuille de travail (le "document") occupe tout l'écran (je ne veux pas recouvrir cette fenêtre, qui est destinée à l'utilisateur).

- l'histoire du 'hook clavier': je t'explique
Je dois rajouter une barre de menus perso, à la place de celle d'EXCEL et en mode plein écran, mais avec Office 2007 les menus rajoutés sont intégrés dans le ruban et disparaissent avec le mode plein écran (dans les versions précédentes la barre de menus restait visible - dans 2007, je ne sais pas faire disparaître le ruban autrement).

J'ai donc choisi de créer une boite de dialogue (un"Userform") dans laquelle j'ai créé ma barre de menus (par les API's, car le VBA ne le permet pas), à qui j'enlève la bordure (WS-CAPTION) et que je positionne en fonction du 'rectangle' donné par GetWindowRect (Application.hWnd).

J'utilise un 'hook clavier' pour l'afficher, car je n'ai pas réussi à la faire fonctionner en "modeless" au niveau du traitement des messages WM_COMMAND dans la procédure de fenêtre ("sous-classement par instance"), et que la touche que j'ai choisie (celle du menu contextuel -- je ne sais pas comment on l'appelle, mais elle correspond au code "Virtual Key" 93) n'est pas prévue dans les mnémoniques de la méthode application.OnKey.

Il y a du y avoir un problème au cours des différents essais de mise au point, qui aurait modifié les caractéristiques de la fenêtre de l'application, et qui se seraient enregistrées quelque part, mais je ne sais pas du tout où chercher, dans la mesure surtout où la disposition est tout à fait normale lorsqu'on quitte le mode 'plein écran'. 

Merci de t'intéresser à mon pb.

   

 

InfOrom
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mars 2009 à 09:27
Cavalier : lol, on passe notre temps à essayer de comprendre le problème des gens qui ne savent pas expliquer ce qu'ils ont sous les yeux, alors excuse ma froideur.
Je dois être bouché, je ne la comprends toujours pas :
Reprenons :
Dans ta question, tu parles de Excel.
Ca, ça fait une fenêtre pour moi.
Quelle est donc cette autre fenêtre dont tu parles ?
Ah voilà, au 3ème chapitre de ta deuxième réponse, tu parles enfin d'une UserForm

Il a fallu arriver au 2ème chapitre de ta deuxième réponse pour savoir que tu travailles sous Excel 2007.
C'est un détail important, non ?
Tu aurais dû commencer par là.

Donc, si je résume :
Excel 2007 est affiché en plein écran = Maximized
Tu veux y ajouter un barre de menu personnelle.
Tu as choisi ....
Non, je comprends rien avec tes hook clavier ... quel rapport entre l'affichage d'une forme et une touche clavier 93 ?
Un menu contextuel ?
Il a fallu arriver au 5ème chapitre de ta deuxième réponse pour comprendre que tu voulais provoquer l'affichage de ta UserForm d'une manière conditionnelle

J'abandonne, désolé
De toute façon, je ne connais pas l'environnement 2007.

Si qqun d'autre a compris quelque chose, je veux bien qu'il me dise si c'est moi qui vieillit ou bien ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 avril 2017
18 mars 2009 à 10:03
Bon... je te remercie quand même, mais il me semble que tu cherches un peu trop la p'tit bête, dans la forme du texte, au lieu d'essayer de comprendre le problème que je pose. Je reconnais que celui qui appelle à l'aide se trouve plus ou moins 'débiteur' vis à vis de celui qui répond, mais ce n'est que temporaire. Toi aussi tu pourrais un jour avoir des difficultés!

Bien sur il s'agissait d'EXCEL (c'est dans le titre) et le problème est simplement que la barre de titre disparaît quand je passe en plein écran (et pas dans EXCEL 2007!), et ça me gêne parce que c'est cet espace que j'ai choisi pour afficher mon menu. Le fait que j'utilise une touche du clavier pour ouvrir le menu vient de ce que je suis pour le moment obligé d'afficher mon menu dans une boite modale, c'est tout. J'en ai parlé uniquement parceque la manip involontaire qui a provoqué le problème vient certainement des API que j'ai utilisées pour cela. 
 

En espérant que notre échange ne va pas trop décourager les éventuels autres lecteurs, je continue de demander si quelqu'un sait comment est géré le passage en plein écran sous EXCEL (lorsqu'une fenêtre est 'maximized' la barre de titre demeure visible, ne serait-ce d'ailleurs que pour pouvoir la restaurer...)

InfOrom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mars 2009 à 10:49
Non non, je te rassure, j'essaye bien de comprendre le problème, mais qqun qui parle de fenêtre et de hook clavier pelle-mèle, c'est dur à comprendre.
Si si, tu as parlé de Excel 2007.
Si ce n'est pas le cas, précise bien la version que tu utilises (2003 ?)
Tu viens de parler d'API : sous quel Windows tu es ?

Mets toi à notre place : On ne connait pas ta machine ni tes logiciels, on ne sait pas ce que tu as sous les yeux.
Le site peut attirer des problèmes de VB sous de multiples formes (VB6, VBA, VBS, VB.Net), alors précise bien tout.
Si tu as des problèmes de ligne de code, colle-les (pas un roman, juste celles qui posent problème)

Maintenant que j'ai bien polué le post, je te conseille de reposer ta question en précisant bien tous les éléments succeptibles de faire comprendre au lecteur sur quoi (versions de Windows, Excel), avec quoi tu travailles (VBA) ...
Bon courage
0
cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 avril 2017
18 mars 2009 à 11:44
OK...

J'ai parlé de 2007, oui, mais pour expliquer pourquoi je me casse la tête à faire un menu par les API's alors que le VBA fait très bien tout ça... le problème se pose sur mon ordi de dev, qui est sous OFFICE 2003.

De toute façon je laisse tomber pour le moment: pour mon appli en cours, je viens de découvrir qu'il suffira de  recadrer la fenêtre (SetWindowPos).. J'ai essayé, ça marche: en fait le plein écran décale la fenêtre avec des coordonnées négatives (-8, -27,...) pour masquer la barre de titre.. l'embêtant c'est que ça le fait avec n'importequel classeur, et même sous WORD...!

Soit j'ai rêvé, et c'est le fonctionnement normal, soit OFFICE stocke quelque part la position par défaut de la fenêtre d'application, en mode normal et en mode plein écran, et j'ai du modifier ça sans le faire exprès, et c'est surtout à ce sujet que j'aurais apprécié un coup de main...

Au cas où ça servirait à quelqu'un

' Déclarations API
Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type
Public Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
    ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

'-------------------------------------------------
Sub test5()
Dim slength As Long, buffer As String  ' title bar text length and buffer
Dim retval As Long  ' return value
Dim coord As RECT


' obtention du titre de la fenêtre d'application
' on peut vérifier que le texte est renvoyé même en plein écran: il n'a donc pas disparu !
slength = GetWindowTextLength(Application.hwnd) + 1  ' get length of title bar text
If slength > 1 Then  ' if return value refers to non-empty string
    buffer = Space(slength)  ' make room in the buffer
    retval = GetWindowText(Application.hwnd, buffer, slength)  ' get title bar text
    MsgBox buffer
Else
    MsgBox "RIEN!"
End If


'coordonnées:  on voit que la fenêtre est décalée par rapport à l'origine de l'écran
GetWindowRect Application.hwnd, coord
MsgBox "Coordonnées actuelles : " & coord.left & " " & coord.top & " " & coord.right & " " & coord.bottom


' essai de recadrage
SetWindowPos Application.hwnd, HWND_TOP, 0, 0, coord.right + coord.left, coord.bottom + coord.top, &H20


Bingo! le titre réapparaît
End Sub

@+

 

InfOrom
0
Rejoignez-nous