Word : clic => apparition d'image dans texte
Fermé
geli
Messages postés
1
Date d'inscription
samedi 11 février 2006
Statut
Membre
Dernière intervention
11 février 2006
-
11 févr. 2006 à 21:52
plubarj - 17 avril 2008 à 16:00
plubarj - 17 avril 2008 à 16:00
A voir également:
- Word : clic => apparition d'image dans texte
- Espace insécable word - Guide
- Supprimer une page word - Guide
- Organigramme word - Guide
- Suivi des modifications word - Guide
- Tableau word - Guide
4 réponses
Hello Geli
Tu peux utiliser une vieille fonction de Word: les hidden texts. Couplée avec le champ MacroButton, tu as exactement ce que tu veux:
1. Tu crées une petite macro
2. Tu insères tes images
3. Dans le paragraphe qui précède chaque image, tu insères un champ de type MacroButton qui appelle la macro créée plus haut (HidePix) et tu tapes un texte à afficher (p.ex. 'view detail')
et c'est tout!
Une seule petit réserve: il faut que l'utilisateur n'ait pas choisi l'option d'afficher les Hidden texts par défaut. Pour s'en prémunir, tu peux ajouter une petite macro qui les cache à l'ouverture du document:
Tu peux utiliser une vieille fonction de Word: les hidden texts. Couplée avec le champ MacroButton, tu as exactement ce que tu veux:
1. Tu crées une petite macro
Sub HidePix() Selection.MoveDown Unit:=wdLine, Count:=1 Selection.EndKey Unit:=wdLine, Extend:=wdExtend Selection.Font.Hidden = Not (Selection.Font.Hidden) Selection.EndKey Unit:=wdLine End SubElle passe le paragraphe suivant de Hidden à not Hidden et inversément
2. Tu insères tes images
3. Dans le paragraphe qui précède chaque image, tu insères un champ de type MacroButton qui appelle la macro créée plus haut (HidePix) et tu tapes un texte à afficher (p.ex. 'view detail')
et c'est tout!
Une seule petit réserve: il faut que l'utilisateur n'ait pas choisi l'option d'afficher les Hidden texts par défaut. Pour s'en prémunir, tu peux ajouter une petite macro qui les cache à l'ouverture du document:
Sub AutoOpen() ActiveWindow.ActivePane.View.ShowAll = 0 ActiveWindow.View.ShowHiddenText = 0 End SubSimple, élégant...
Bonjour,
j'ai voulu faire exactement la même chose pour un tutoriel : des images en miniatures qui ne s'agrandissent qu'à la demande du lecteur.
Il y a bien la première solution proposée qui consiste à convertir le doc en page web et à faire des liens hypertextes sur toutes les miniatures. Mais d'une part c'est lourd à écrire s'il y a de nombreuses images (à moins d'automatiser ça par une macro ..), d'autre part on perd l'avantage du document word : un fichier unique avec images incorporées au fichier. Et puis les popup .. c'est pas top.
Une variante avec les mêmes inconvénients sauf le popup: on écrit un code javascript qui modifie la taille de l'image par à un clic sur un bouton.
Finalement j'ai opté pour une solution word uniquement .
Tout d'abord je n'ai pas réussi à 'intercepter le double-clic sur une image. Quand on double-clique sur une image la boîte de dialogue de formatage de l'image s'ouvre. Normalement on devrait pouvoir l'intercepter avec une macro "Sub Formatimage " dans un module vba mais chez moi ça ne fonctionne pas (alors que j'intercepte très bien d'autres événement comme enregistrer sous , etc)
A la place j'ai choisi de créer une macro qui bascule la taille des images sélectionnées (miniature <-> taille normal) et qui est lancée par un raccourci clavier.
Pour faire bonne mesure jai prévu un basculement de certains textes (en taille 10,5 par ex) en une taille très petite (4). Je peux ainsi masquer/montrer certains commentaires par le même raccourci clavier.
voici le code VBA :
j'ai voulu faire exactement la même chose pour un tutoriel : des images en miniatures qui ne s'agrandissent qu'à la demande du lecteur.
Il y a bien la première solution proposée qui consiste à convertir le doc en page web et à faire des liens hypertextes sur toutes les miniatures. Mais d'une part c'est lourd à écrire s'il y a de nombreuses images (à moins d'automatiser ça par une macro ..), d'autre part on perd l'avantage du document word : un fichier unique avec images incorporées au fichier. Et puis les popup .. c'est pas top.
Une variante avec les mêmes inconvénients sauf le popup: on écrit un code javascript qui modifie la taille de l'image par à un clic sur un bouton.
Finalement j'ai opté pour une solution word uniquement .
Tout d'abord je n'ai pas réussi à 'intercepter le double-clic sur une image. Quand on double-clique sur une image la boîte de dialogue de formatage de l'image s'ouvre. Normalement on devrait pouvoir l'intercepter avec une macro "Sub Formatimage " dans un module vba mais chez moi ça ne fonctionne pas (alors que j'intercepte très bien d'autres événement comme enregistrer sous , etc)
A la place j'ai choisi de créer une macro qui bascule la taille des images sélectionnées (miniature <-> taille normal) et qui est lancée par un raccourci clavier.
Pour faire bonne mesure jai prévu un basculement de certains textes (en taille 10,5 par ex) en une taille très petite (4). Je peux ainsi masquer/montrer certains commentaires par le même raccourci clavier.
voici le code VBA :
Dim petite_taille As Single Dim grande_taille As Single Dim position_initiale As Range Function testeExistenceVariable(nomvariable) Dim aVar As Variable ''cherche si la variable est déjà définie pour éviter une erreur For Each aVar In ActiveDocument.Variables If aVar.Name = nomvariable Then testeExistenceVariable = True: Exit For Next aVar End Function Sub bascule_taille() 'fonction destinée à montrer/cacher les images et certaines explications du tutoriel 'à chaque fois que change_taille est appelé la variable "miniatures" (incluse dans 'ce document) est consultée 'si elle est à 1 on remet les images de la sélection en taille normale et on 'met la variable "miniatures" à 0 'sinon on diminue la taille des images de la sélection et on on met ' la variable 'miniatures" à 1 'si aucun texte ou image n'est sélectionné le changement de taille affecte toutes les images du 'document 'de la même façon on bascule les textes de la sélection (ou de tout le document) ' de la taille "petite_taille" à la taille ' "grande_taille" (typiquement : petite_taille=4 et grande_taille=10,5 petite_taille = 4 grande_taille = 10.5 'mémorisation de la sélection initiale pour repositionnement 'à la fin de la macro Set initial = Selection.Range 'si la variable "miniatures" n'existe pas on la crée If Not testeExistenceVariable("miniatures") Then ActiveDocument.Variables.Add "miniatures" flgminiatures = ActiveDocument.Variables("miniatures").Value If flgminiatures = 1 Then change_taille 1 flgminiatures = 0 Else change_taille 0 flgminiatures = 1 End If ActiveDocument.Variables("miniatures").Value = flgminiatures initial.Select End Sub Sub change_taille(taille) Dim plage As Range 'si rien n'est sélectionné (texte ou image) 'alors faire la recherche/remplacement sur tout le document If Selection.Range.Characters.Count <= 1 And Selection.InlineShapes.Count = 0 Then Set plage = ActiveDocument.Range Else Set plage = Selection.Range End If change_taille_image plage, taille change_taille_texte plage, taille End Sub Sub change_taille_texte(plage As Range, taille) If taille = 1 Then taille_recherche = petite_taille taille_remplace = grande_taille Else taille_recherche = grande_taille taille_remplace = petite_taille End If plage.Find.ClearFormatting plage.Find.Replacement.ClearFormatting With plage.Find .Text = "" .Replacement.Text = "" .Forward = True .Format = True .Font.Size = taille_recherche .Replacement.Font.Size = taille_remplace End With plage.Find.Execute Replace:=wdReplaceAll End Sub Sub change_taille_image(plage As Range, taille) Dim image As InlineShape 'taux de diminution de la taille de l'image (modifiable) ratio = 0.1 'dans la cas particulier où une seule image est sélectionnée ' regarder si elle est en miniature ou pas pour appliquer ' 'agrandissement ou rapetissement If plage.InlineShapes.Count = 1 Then Set image = plage.InlineShapes(1) If image.ScaleHeight < 10 Then taille = 1 Else taille = 0 End If For Each image In plage.InlineShapes With image .LockAspectRatio = msoTrue If .AlternativeText = "" And taille = 0 Then coeff = ratio .AlternativeText = "miniature" .Height = coeff * .Height .Width = coeff * .Width Else If .AlternativeText = "miniature" And taille = 1 Then coeff = 1 / ratio .AlternativeText = "" .Height = coeff * .Height .Width = coeff * .Width End If End If End With Next image End Sub
Gihef
Messages postés
5150
Date d'inscription
mercredi 20 juillet 2005
Statut
Contributeur
Dernière intervention
20 février 2023
2 778
12 févr. 2006 à 01:28
12 févr. 2006 à 01:28
Bonjour,
Je crois que Word ne te permettra pas de faire ça.
Par contre, tu parles du moyen de le faire : HTML.
Avec des CSS, ça te facilitera la tâche.
En t'inspirant de ça, par exemple : http://openweb.eu.org/articles/zoom_image/
Je crois que Word ne te permettra pas de faire ça.
Par contre, tu parles du moyen de le faire : HTML.
Avec des CSS, ça te facilitera la tâche.
En t'inspirant de ça, par exemple : http://openweb.eu.org/articles/zoom_image/
chalchalero
Messages postés
1
Date d'inscription
samedi 24 mars 2007
Statut
Membre
Dernière intervention
24 mars 2007
24 mars 2007 à 11:15
24 mars 2007 à 11:15
je viens de tester une solution html/javascript
Il suffit d'enregistrer le document word en html (filtré ou non, mais pas mht) puis de modifier le html pour y inclure le code suivant juste après la balise </head>
à l'ouverture de la page web les images sont en miniatures.
Des clics successifs sur une image la font passer de taille alternativement de taille réduite à taille normale.
Il suffit d'enregistrer le document word en html (filtré ou non, mais pas mht) puis de modifier le html pour y inclure le code suivant juste après la balise </head>
</head> <script language="JavaScript" type="text/JavaScript"> <!-- ratio=10; function ajoute_onclick() { var var_change_taille = new Function("bascule_taille(this)"); coef=1/ratio; for(i = 0; i < document.images.length; ++i) { image=document.images[i]; if (image.width>50) { image.width=coef* image.width; image.height=coef*image.height; image.alt="miniature"; image.border=1; image.onclick= var_change_taille; } } } function bascule_taille(obj){ largeur=this.width; hauteur=this.heigth; if (obj.alt=="miniature") { coef=ratio ; obj.border=1; obj.alt=""; } else { coef=1/ratio ; obj.alt="miniature"; } obj.width=coef* obj.width; obj.height=coef*obj.height; } //--> </script> </head> <body onload="ajoute_onclick()"; lang=FR link=blue vlink=purple>
à l'ouverture de la page web les images sont en miniatures.
Des clics successifs sur une image la font passer de taille alternativement de taille réduite à taille normale.