Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modifier un e image de bouton par VBA

11 réponses
Avatar
Papyjac
Bonjour,

j'utilise fréquamment les instructions :
stdole.StdFunctions.LoadPicture et stdole.SavePicture

Les 2 fonctions utilisent un objet temporaire par exemple :
Set U_Objet = Bouton.Picture
stdole.SavePicture U_Objet, "C:\fichier.bmp"

cet objet est appelé IPictureDisp dans l'aide, par contre je n'arrive pas à
trouvé ni ces propriétés, ni les méthodes correspondantes

Mon besoin : je souhaitais modifier le contenu de l'objet U_Objet avant de
l'exporter
Est-ce possible ?

A titre indicatif, je veux créer en simple VBA l'image du bouton "12" à
partir de l'image du bouton "1" et de l'image du bouton "2" en fusionnant les
2 images. Est-ce que je rêve...

Merci pour vos pistes

--
Papyjac

10 réponses

1 2
Avatar
Papyjac
Bonjour papyjac

Pour préciser ma question, je veux seulement utiliser le masque de bouton,
car je pense que c'est plus simple que l'image elle même

J'utilise le masque comme pochoir. Et le pochoir n'a pas de couleur. j'ai
seulemebt trouvé des caractères "ÿ" dans le masque. rien d'autre
--
Papyjac


"Papyjac" a écrit :

Bonjour,

j'utilise fréquamment les instructions :
stdole.StdFunctions.LoadPicture et stdole.SavePicture

Les 2 fonctions utilisent un objet temporaire par exemple :
Set U_Objet = Bouton.Picture
stdole.SavePicture U_Objet, "C:fichier.bmp"

cet objet est appelé IPictureDisp dans l'aide, par contre je n'arrive pas à
trouvé ni ces propriétés, ni les méthodes correspondantes

Mon besoin : je souhaitais modifier le contenu de l'objet U_Objet avant de
l'exporter
Est-ce possible ?

A titre indicatif, je veux créer en simple VBA l'image du bouton "12" à
partir de l'image du bouton "1" et de l'image du bouton "2" en fusionnant les
2 images. Est-ce que je rêve...

Merci pour vos pistes

--
Papyjac


Avatar
Papyjac
Bonjour moi-même

J'ai trouvé sur un autre forum que quelqu'un avait utilisé la méthode
Point(x,y) de l'objet IPictureDisp, mais c'était en VB 6 et non en VBA
sous Excel

--
Papyjac


"Papyjac" a écrit :

Bonjour,

j'utilise fréquamment les instructions :
stdole.StdFunctions.LoadPicture et stdole.SavePicture

Les 2 fonctions utilisent un objet temporaire par exemple :
Set U_Objet = Bouton.Picture
stdole.SavePicture U_Objet, "C:fichier.bmp"

cet objet est appelé IPictureDisp dans l'aide, par contre je n'arrive pas à
trouvé ni ces propriétés, ni les méthodes correspondantes

Mon besoin : je souhaitais modifier le contenu de l'objet U_Objet avant de
l'exporter
Est-ce possible ?

A titre indicatif, je veux créer en simple VBA l'image du bouton "12" à
partir de l'image du bouton "1" et de l'image du bouton "2" en fusionnant les
2 images. Est-ce que je rêve...

Merci pour vos pistes

--
Papyjac


Avatar
isabelle
bonjour Papyjac,

regarde à la rubrique "Picture, propriété" il y a un exemple pour
/Picture/ et pour "Mask"
_______________________________________________________________________________

'L'exemple suivant montre comment définir l'image et le masque du
premier objet *CommandBarButton* que le code renvoie.
'Créez pour cela une image de masque et une image de bouton et remplacez
les chemins contenus dans l'exemple par les chemins d'accès à vos images.

|Sub ChangeButtonImage()
Dim picPicture As IPictureDisp
Dim picMask As IPictureDisp

Set picPicture = stdole.StdFunctions.LoadPicture( _
"c:imagespicture.bmp")
Set picMask = stdole.StdFunctions.LoadPicture( _
"c:imagesmask.bmp")

'Reference the first button on the first command bar
'using a With...End With block.
With Application.CommandBars.FindControl(msoControlButton)
'Change the button image.
.*Picture* = picButton

'Use the second image to define the area of the
'button that should be transparent.
.Mask = picMask
End With
End Sub|

'L'exemple suivant montre comment obtenir l'image et le masque du
premier objet *CommandBarButton* que le code renvoie et comment les
placer dans un fichier.
'Pour cela, spécifiez un chemin pour les fichers de sortie.

|
Sub GetButtonImageAndMask()
Dim picPicture As IPictureDisp
Dim picMask As IPictureDisp

With Application.CommandBars.FindControl(msoControlButton)
'Get the button image and mask of the this CommandBarButton object.
Set picPicture = .*Picture*
Set picMask = .Mask
End With

'Save the button image and mask in a folder.
stdole.SavePicture picPicture, "c:tempimage.bmp"
stdole.SavePicture picMask, "c:tempmask.bmp"
______________________________________________________________________________________________________________________________________
End Sub
|

isabelle

Papyjac a écrit :
Bonjour moi-même

J'ai trouvé sur un autre forum que quelqu'un avait utilisé la méthode
Point(x,y) de l'objet IPictureDisp, mais c'était en VB 6 et non en VBA
sous Excel




Avatar
Papyjac
Bonjour Isabelle

Merci pour ta réponse

J'ai bien utilisé l'aide dont tu parles pour exporter ou importer les images
des boutons.
Disons que , maintenant je sais faire

Par rapport à l'exmple, Ma question se situe exactement entre les 2
instructions suivantes :

Set picMask = stdole.StdFunctions.LoadPicture( _
"c:imagesmask.bmp")

ICI

.Mask = picMask

A cet endroit je souhaite modifier le contenu du masque. S'agissant d'un
masque, chaque point (pixel) est soit vide soit rempli.
Est-il possible d'adresser ces points et de les remplir ?

Existe t-il une méthode de type picMask.points(x, y) ou quelque chose de
similaire

J'ai lu dans un autre forum qu'on pouvait utiliser une telle méthode en VB6
(cas de reconnaissance de forme) pour l'instant je n'ai rien trouvé sous VBA

En attendant la solution, je fabrique manuellement mes masques sous PAINT.
j'en ai déjà 36.

Merci de t'être interessé à ma question


--
Papyjac


"isabelle" a écrit :

bonjour Papyjac,

regarde à la rubrique "Picture, propriété" il y a un exemple pour
/Picture/ et pour "Mask"
_______________________________________________________________________________

'L'exemple suivant montre comment définir l'image et le masque du
premier objet *CommandBarButton* que le code renvoie.
'Créez pour cela une image de masque et une image de bouton et remplacez
les chemins contenus dans l'exemple par les chemins d'accès à vos images.

|Sub ChangeButtonImage()
Dim picPicture As IPictureDisp
Dim picMask As IPictureDisp

Set picPicture = stdole.StdFunctions.LoadPicture( _
"c:imagespicture.bmp")
Set picMask = stdole.StdFunctions.LoadPicture( _
"c:imagesmask.bmp")

'Reference the first button on the first command bar
'using a With...End With block.
With Application.CommandBars.FindControl(msoControlButton)
'Change the button image.
.*Picture* = picButton

'Use the second image to define the area of the
'button that should be transparent.
.Mask = picMask
End With
End Sub|

'L'exemple suivant montre comment obtenir l'image et le masque du
premier objet *CommandBarButton* que le code renvoie et comment les
placer dans un fichier.
'Pour cela, spécifiez un chemin pour les fichers de sortie.

|
Sub GetButtonImageAndMask()
Dim picPicture As IPictureDisp
Dim picMask As IPictureDisp

With Application.CommandBars.FindControl(msoControlButton)
'Get the button image and mask of the this CommandBarButton object.
Set picPicture = .*Picture*
Set picMask = .Mask
End With

'Save the button image and mask in a folder.
stdole.SavePicture picPicture, "c:tempimage.bmp"
stdole.SavePicture picMask, "c:tempmask.bmp"
______________________________________________________________________________________________________________________________________
End Sub
|

isabelle

Papyjac a écrit :
> Bonjour moi-même
>
> J'ai trouvé sur un autre forum que quelqu'un avait utilisé la méthode
> Point(x,y) de l'objet IPictureDisp, mais c'était en VB 6 et non en VBA
> sous Excel
>
>



Avatar
isabelle
bonjour Papyjac,

oui, mais il faut que ton image Mask soit déja créer,

Set picMask = stdole.StdFunctions.LoadPicture("c:imagesmask.bmp")

.Mask = picMask

isabelle

Papyjac a écrit :
Bonjour Isabelle

Merci pour ta réponse

J'ai bien utilisé l'aide dont tu parles pour exporter ou importer les images
des boutons.
Disons que , maintenant je sais faire

Par rapport à l'exmple, Ma question se situe exactement entre les 2
instructions suivantes :

Set picMask = stdole.StdFunctions.LoadPicture( _
"c:imagesmask.bmp")

ICI

.Mask = picMask

A cet endroit je souhaite modifier le contenu du masque. S'agissant d'un
masque, chaque point (pixel) est soit vide soit rempli.
Est-il possible d'adresser ces points et de les remplir ?

Existe t-il une méthode de type picMask.points(x, y) ou quelque chose de
similaire

J'ai lu dans un autre forum qu'on pouvait utiliser une telle méthode en VB6
(cas de reconnaissance de forme) pour l'instant je n'ai rien trouvé sous VBA

En attendant la solution, je fabrique manuellement mes masques sous PAINT.
j'en ai déjà 36.

Merci de t'être interessé à ma question





Avatar
Papyjac
Bonjour Isabelle et merci

Oui, effectivement, j'ai crée le masque en bitmap
et ensuite je le recharge comme tu le dis
Set picMask = stdole.StdFunctions.LoadPicture("c:imagesmask.bmp")
.Mask = picMask

Mais je voulais juste avant .Mask = picMask modifier le masque en mémoire

Pour que tu comprennes mon besoin. J'ai des boutons dont l'image est un
numéro 0, 1, 2... 9. Jusque là c'est simplement car ces images de boutons
existent en standard (Faceidp,71,72... 79).
Ensuite j'arrive à 10, puis 11... à ce jour j'en suis à 36. et je fatigue un
peu car je les crée manuellement. Donc je m'étais mis en tête de fabriquer
par programme ces images. Peut être que je rêve mais je suis à la retraite et
ça m'occupe.

Donc par exemple pour fabriqUer le nombre 67, il faut fusionner les masques
du chiffre 6 et celui du chiffre 7 décalé de 8 pixels sur la droite... si
j'arrive un jour à accéder à ces pixels.

Mais je n'arrive pas à trouver les propriétés et méthode de ton objet
picMask. Un eméthode du genre .picMask.points(x,y) me conviendrait assez


--
Papyjac


"isabelle" a écrit :

bonjour Papyjac,

oui, mais il faut que ton image Mask soit déja créer,

Set picMask = stdole.StdFunctions.LoadPicture("c:imagesmask.bmp")

..Mask = picMask

isabelle

Papyjac a écrit :
> Bonjour Isabelle
>
> Merci pour ta réponse
>
> J'ai bien utilisé l'aide dont tu parles pour exporter ou importer les images
> des boutons.
> Disons que , maintenant je sais faire
>
> Par rapport à l'exmple, Ma question se situe exactement entre les 2
> instructions suivantes :
>
> Set picMask = stdole.StdFunctions.LoadPicture( _
> "c:imagesmask.bmp")
>
> ICI
>
> .Mask = picMask
>
> A cet endroit je souhaite modifier le contenu du masque. S'agissant d'un
> masque, chaque point (pixel) est soit vide soit rempli.
> Est-il possible d'adresser ces points et de les remplir ?
>
> Existe t-il une méthode de type picMask.points(x, y) ou quelque chose de
> similaire
>
> J'ai lu dans un autre forum qu'on pouvait utiliser une telle méthode en VB6
> (cas de reconnaissance de forme) pour l'instant je n'ai rien trouvé sous VBA
>
> En attendant la solution, je fabrique manuellement mes masques sous PAINT.
> j'en ai déjà 36.
>
> Merci de t'être interessé à ma question
>
>
>



Avatar
Papyjac
Bonjour Payjac

J'ai trouvé les membres de l'objet IPictureDisp
Handle, Height, hPal, Render,Type, Width

J'ai pu lire le contenu de Handle, Height Width, hPal et Type

Il me reste Render, mais il y a 10 paramètres en chinois

--
Papyjac


"Papyjac" a écrit :

Bonjour Isabelle et merci

Oui, effectivement, j'ai crée le masque en bitmap
et ensuite je le recharge comme tu le dis
Set picMask = stdole.StdFunctions.LoadPicture("c:imagesmask.bmp")
.Mask = picMask

Mais je voulais juste avant .Mask = picMask modifier le masque en mémoire

Pour que tu comprennes mon besoin. J'ai des boutons dont l'image est un
numéro 0, 1, 2... 9. Jusque là c'est simplement car ces images de boutons
existent en standard (Faceidp,71,72... 79).
Ensuite j'arrive à 10, puis 11... à ce jour j'en suis à 36. et je fatigue un
peu car je les crée manuellement. Donc je m'étais mis en tête de fabriquer
par programme ces images. Peut être que je rêve mais je suis à la retraite et
ça m'occupe.

Donc par exemple pour fabriqUer le nombre 67, il faut fusionner les masques
du chiffre 6 et celui du chiffre 7 décalé de 8 pixels sur la droite... si
j'arrive un jour à accéder à ces pixels.

Mais je n'arrive pas à trouver les propriétés et méthode de ton objet
picMask. Un eméthode du genre .picMask.points(x,y) me conviendrait assez


--
Papyjac


"isabelle" a écrit :

> bonjour Papyjac,
>
> oui, mais il faut que ton image Mask soit déja créer,
>
> Set picMask = stdole.StdFunctions.LoadPicture("c:imagesmask.bmp")
>
> ..Mask = picMask
>
> isabelle
>
> Papyjac a écrit :
> > Bonjour Isabelle
> >
> > Merci pour ta réponse
> >
> > J'ai bien utilisé l'aide dont tu parles pour exporter ou importer les images
> > des boutons.
> > Disons que , maintenant je sais faire
> >
> > Par rapport à l'exmple, Ma question se situe exactement entre les 2
> > instructions suivantes :
> >
> > Set picMask = stdole.StdFunctions.LoadPicture( _
> > "c:imagesmask.bmp")
> >
> > ICI
> >
> > .Mask = picMask
> >
> > A cet endroit je souhaite modifier le contenu du masque. S'agissant d'un
> > masque, chaque point (pixel) est soit vide soit rempli.
> > Est-il possible d'adresser ces points et de les remplir ?
> >
> > Existe t-il une méthode de type picMask.points(x, y) ou quelque chose de
> > similaire
> >
> > J'ai lu dans un autre forum qu'on pouvait utiliser une telle méthode en VB6
> > (cas de reconnaissance de forme) pour l'instant je n'ai rien trouvé sous VBA
> >
> > En attendant la solution, je fabrique manuellement mes masques sous PAINT.
> > j'en ai déjà 36.
> >
> > Merci de t'être interessé à ma question
> >
> >
> >
>


Avatar
isabelle
bonjour Papyjac,

c'est ce chinois là ?

Sub Render(hdc As Long, x As Long, y As Long, cx As Long, cy As Long,
xSrc As OLE_XPOS_HIMETRIC, ySrc As OLE_YPOS_HIMETRIC, cxSrc As
OLE_XSIZE_HIMETRIC, cySrc As OLE_YSIZE_HIMETRIC, prcWBounds As Any)

un exemple ici : http://www.thevbzone.com/cSprite_Background.cls
et ici : http://www.aboutvb.de/khw/artikel/khwrenderpic.htm

isabelle

Papyjac a écrit :
Bonjour Payjac

J'ai trouvé les membres de l'objet IPictureDisp
Handle, Height, hPal, Render,Type, Width

J'ai pu lire le contenu de Handle, Height Width, hPal et Type

Il me reste Render, mais il y a 10 paramètres en chinois




Avatar
isabelle
et un autre ici : http://www.fastgraph.com/help/panner_vb.html
et ici :
http://www.atalasoft.com/Products/imgxcontrols/docs/ImgX6~ImgX_Render~Image.html

isabelle

Papyjac a écrit :
Bonjour Payjac

J'ai trouvé les membres de l'objet IPictureDisp
Handle, Height, hPal, Render,Type, Width

J'ai pu lire le contenu de Handle, Height Width, hPal et Type

Il me reste Render, mais il y a 10 paramètres en chinois




Avatar
Papyjac
Bonjour Isabelle

Et merci pour ces liens, je vais analyser tout ça? je te tien au courant

--
Papyjac


"isabelle" a écrit :

et un autre ici : http://www.fastgraph.com/help/panner_vb.html
et ici :
http://www.atalasoft.com/Products/imgxcontrols/docs/ImgX6~ImgX_Render~Image.html

isabelle

Papyjac a écrit :
> Bonjour Payjac
>
> J'ai trouvé les membres de l'objet IPictureDisp
> Handle, Height, hPal, Render,Type, Width
>
> J'ai pu lire le contenu de Handle, Height Width, hPal et Type
>
> Il me reste Render, mais il y a 10 paramètres en chinois
>
>



1 2