Task Pane Project R-W v2.0   (le volet docké a droite de la feuille Excel)(Macro complementaire)

Task Pane Project R-W v2.0 (le volet docké a droite de la feuille Excel)(Macro complementaire) 2.1.2

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

oui mais ca prive les utilisateur du menu fichier word je peux te refaire une version comme ca si tu veux
et ce n'est pas un trou dans le userform mais dans word
engros je decoupe la partie du haut de la barre de titre jusqu'en bas du bouton fichier du coup on vois le fond du userform derrière
mais comme je viens de le dire la seule solution pour enregistrer des eventuel modif apres c'est de clicker sur la crois pour declancher le dialog d'enregistrement sauf que si je positionne a -40 *windowszoom tu n'a plus la croix
ou alors je coupe mais je masque pas la barre de titre
tu veux une version comme ça ?
 
alors je viens d'apprendre avec copilot justement la duperie des fenêtre word
en fait ma petite fenêtre y est bien transparente de type "button" mais word refuse de redessiner sur son ribbon cette fenêtre du coup je me demandais pourquoi je ne la voyais pas dans la liste de word pourquoi je la voyais pas quand je la mettais non transparente
et bien la raison c'est ça la seul fenêtre qu'il accepte de redessiner c'est une fenêtre de type "static" qui ne gère aucun message window
voila pourquoi ca marchait mais on voyait rien ni dans la liste ni en visuel

alors on a le choix
soit on masque avec une fenêtre de type button ce qui fait meme si on la vois pas le click sur le bouton fichier de word ne provoque pas le crash excel

soit on cache avec une fentre static mais on a plus le bouton

soit on découpe cette portion en haut a gauche de la fenêtre du coup on vois biens le userform derriere sur cette partie tout du moisns
demo

demo4.gif

on vois bien les première lettre du label dans le userform c'est vraiment un decoupage
 
oui c'est lui qui est a l'origine de la demande sur le forum mais ici on est dans ma ressource pas dans son topic
tu me dis que tu a un soucis avec cette source avec les positions ,je te donne une autre solution
et je peux même les combiner toute les 3 en une si je voulais
et de toute facon @Dudu2 a clairement exprimé le fait qu'il ne désirais pas utiliser le volet xml
et qu'il préférais son moulin tournant en arrière plan car il n'a pas la main mise sur la fenêtre dockée donc pas d'events exploitable
donc sa méthode n'a rien avoir avec la mienne

donc du coup heu.... je vois pas trop ce que @Dudu2 pourrait dire sur ces points puisqu'il ne les utilise pas
le seul qui aurait quelque chose a dire c'est l'utilisateur qui décide d'employer ma méthode en l'occurrence toi pour l'instant

donc soit tu veux soit tu veux pas y a pas de soucis pour moi ( je propose ,tu dispose )
 
Salut patricktoulon,
avec ton système de découpe de la fenêtre word par région du post #249 de la discussion à dudu2, on arrive à cacher l'onglet Fichier et à laisser apparent la croix pour fermer de l'appli Word :
DecoupeWord.gif

VB:
        'Crée la région entiere de la fenêtre
        hRgnGlobal = CreateRectRgn(0, 0, large - 10, Haut + 30 * WindowsZoom)
        'Crée la région entiere de la barre de titre moins le bouton fermer
        hRgnCaption = CreateRectRgn(0, 0, large - 50 * WindowsZoom, 50 * WindowsZoom)
        'on retire la région de la barre de titre  à la région globale(methode RGN_DIFF pour exclure)
        CombineRgn hRgnGlobal, hRgnGlobal, hRgnCaption, RGN_DIFF
      
        'Crée la région du bouton à masquer
        hRgnBouton = CreateRectRgn(0, 0, 60 * WindowsZoom, 98)
        'on retire la région du bouton à la région globale(methode RGN_DIFF pour exclure)
        CombineRgn hRgnGlobal, hRgnGlobal, hRgnBouton, RGN_DIFF
  
        'Applique LE DECOUPAGE DE la région à la fenêtre WORD
         SetWindowRgn hword, hRgnGlobal, True

Et pour l' ajustement des offsets , il faudrait travailler avec UIAUtomation car
1 - On a la dimension de plus d'objets que par API Windows (par exemple le ruban inférieur quand il est déplié)
2 - Les dimensions renvoyées par UIAutomation tiennent compte du facteur d'échelle (plus besoin de Ppx WindowsZoom)
Attention il faut récupérer les dimensions avant les SetParent car après les objets ne sont plus accessibles.

Ci cela t'intéresse j"ai un module de classe réalisé avec l'aide de ChatGpt qui permet de simplifier grandement l'utilisation de UIAutomation (doc simplifiée en pièce jointe). Exemple d'utilisation :
VB:
     Set ExcelWin = cls.GetElemFromHandle(Application.hwnd)
     Set BosaWin = ExcelWin.GetUIElem("bosa_sdm_XL9")
     Hdock = GetParent(GetParent(BosaWin.hwnd))
     Haut = BosaWin.Height
     large = ExcelWin.Width / 2 ' GetSystemMetrics(0) / 2
    ' ...
    ' Ici tu utilises ta fonction GetWinHandle
    hword = GetWinHandle("OpusApp", N, 10)
    Set AppliWord = cls.GetElemFromHandle(hword)
    Set RubanWin = AppliWord.GetUIElem("Ribbon", "firstD", "Name")
    Set RubanInf = RubanWin.GetUIElem("Ruban inférieur", "firstD", "Name")

Si RubanInf n'est pas trouvé , c'est qu'il est pas déplié.

Nullosse
 

Pièces jointes

Dernière édition:
oui tu découpe un peu plus la barre
tu fait deux decoupe comme dans mon exemple précedant dans la discussion de @Dudu2
perso j'estime que découper seulement le bouton est amplement suffisant surtout que ca me permet de garder le undo/redo
et!! la croix pour fermer word

je vais regarder ton cls uiauto

moi aussi j'ai une methode uiauto mais je trouvais que ça faisait encore un module en plus et je pense qu'il y en a assez

d'autre part je suis en train de finaliser l'autre moteur de docking sans le volet xml mais qui lui ressemble trait pour trait
a savoir un vrai slider et pas un resize
le principe repose sur le userform qui sert de host et monitoreur
les fenêtre subbissent VRAIMENT UN CLIPING pour atténuer le freekling et liasing ,etc...
la fenêtre docké est vraiment slidé et non redimensionner a l'userform
j'ai trouvé aussi le moyen de shunter le rebond quand on arrive a la moitié ca sursaute plus
mais bref ça se passe dans la discussion pas ici
 
ou est le module de fonction ou son code
oui c'est un module de classe , les fonctions sont à l'intérieur disponibles pour chaque instance. Si on veut appeler une fonction sans passer par une instance on créer une nouvelle instance vide avec un New .
Exemple (cls est l'instance vide) .
VB:
    Dim cls As New cUIAElemInfo, ExcelWin As cUIAElemInfo, AppliWord As cUIAElemInfo, UsfWin As cUIAElemInfo
    Dim BosaWin As cUIAElemInfo, RubanWin As cUIAElemInfo, RubanInf As cUIAElemInfo, BtnFermer As cUIAElemInfo
    Dim UsfTitle As cUIAElemInfo, OngletFichier As cUIAElemInfo, bordureX As Long, bordureY As Long, htRuban As Long
     Set ExcelWin = cls.GetElemFromHandle(Application.hwnd)
     Set BtnFermer = ExcelWin.GetUIElem("Fermer", "firstD", "Name")
     Set BosaWin = ExcelWin.GetUIElem("bosa_sdm_XL9")
     Hdock = GetParent(GetParent(BosaWin.hwnd))
     Haut = BosaWin.Height
     large = ExcelWin.Width / 2 ' GetSystemMetrics(0) / 2
     ' ========================================
     HForm = GetActiveWindow
    Set UsfWin = cls.GetElemFromHandle(HForm)
    Set UsfTitle = UsfWin.GetUIElem("TitleBar", "FirstC", "controltype)
    '  ========================================
        hword = GetWinHandle("OpusApp", N, 10)
    Set AppliWord = cls.GetElemFromHandle(hword)
    Set RubanWin = AppliWord.GetUIElem("Ribbon", "firstD", "Name")
    Set OngletFichier = RubanWin.GetUIElem("Onglet Fichier", "firstD", "Name")
    Set RubanInf = RubanWin.GetUIElem("Ruban inférieur", "firstD", "Name")
    If RubanInf Is Nothing Then
       htRuban = RubanWin.Height
    Else
       htRuban = RubanWin.Height - RubanInf.Height
    End If
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour