Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
message
de news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
message
de news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN perso
qui ramait suffisement pour voir que le résultat était pas mal... mais pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné, mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas un
expert en compression d'image, mais les fichiers obtenus sont super light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512 x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel qui
semble emmagasiner toutes les photos chargées lors du traitement et ne se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le point
dansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a écrit
dans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office.
Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur
et neme permet pas de tester le code veritablement. Lorsque je met les lignes
decode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN perso
qui ramait suffisement pour voir que le résultat était pas mal... mais pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné, mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas un
expert en compression d'image, mais les fichiers obtenus sont super light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512 x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel qui
semble emmagasiner toutes les photos chargées lors du traitement et ne se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:%23$1lQpwGEHA.688@tk2msftngp13.phx.gbl...
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN perso
qui ramait suffisement pour voir que le résultat était pas mal... mais pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné, mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas un
expert en compression d'image, mais les fichiers obtenus sont super light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512 x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel qui
semble emmagasiner toutes les photos chargées lors du traitement et ne se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le point
dansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a écrit
dans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office.
Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur
et neme permet pas de tester le code veritablement. Lorsque je met les lignes
decode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et neme permet pas de tester le code veritablement. Lorsque je met les
lignes
decode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:ufuwRP6GEHA.2844@tk2msftngp13.phx.gbl...
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:%23$1lQpwGEHA.688@tk2msftngp13.phx.gbl...
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a
écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les
lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et neme permet pas de tester le code veritablement. Lorsque je met les
lignes
decode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et neme permet pas de tester le code veritablement. Lorsque je met les
lignes
decode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:ufuwRP6GEHA.2844@tk2msftngp13.phx.gbl...
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:%23$1lQpwGEHA.688@tk2msftngp13.phx.gbl...
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a
écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les
lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et neme permet pas de tester le code veritablement. Lorsque je met les
lignes
decode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Michel,
l'adresse est refusée...
Kristof
"Michel Pierron" a écrit dans le message de
news:Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton codeici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a écrit
dans lemessage de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avaisplus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
ducode + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
persoqui ramait suffisement pour voir que le résultat était pas mal... mais
paséternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas àdéterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
maisen tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continuensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
lafenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
àdu bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
unexpert en compression d'image, mais les fichiers obtenus sont super
light etidéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
quisemble emmagasiner toutes les photos chargées lors du traitement et ne
se"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'aillesalimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
LongPrivate Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
pointdansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a
écritdans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisationfournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)concernent l'utilisation dans un environnement VB et non VBA
d'office.Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreuret neme permet pas de tester le code veritablement. Lorsque je met les
lignesdecode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
derien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
enessayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
jene vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formatsd'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chezIntel, mais j'ai perdu la référence.
Michel,
l'adresse mpierron@europtest.com est refusée...
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:OcJP6E7GEHA.2052@TK2MSFTNGP12.phx.gbl...
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:ufuwRP6GEHA.2844@tk2msftngp13.phx.gbl...
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal... mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:%23$1lQpwGEHA.688@tk2msftngp13.phx.gbl...
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a
écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met les
lignes
de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chez
Intel, mais j'ai perdu la référence.
Michel,
l'adresse est refusée...
Kristof
"Michel Pierron" a écrit dans le message de
news:Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais péter
ton codeici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a écrit
dans lemessage de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avaisplus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne (ensemble
ducode + suggestion Michel dans Module UserForm ) et l'image apparait bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
persoqui ramait suffisement pour voir que le résultat était pas mal... mais
paséternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne parviens
pas àdéterminer (en mode débogage) le momment où et pourquoi le userform est
redéssiné (en fait je ne suis pas sur qu'il soit réellement redéssiné,
maisen tout cas le userform apparaît vierge) éffacant ainsi le résultat de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continuensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition que
lafenètre VBA soit réduite de façon à ne pas depasser sur l'affichage du
Userform (pas facile de décrire ça , quelques copies écran seraient les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça ressemble
àdu bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis pas
unexpert en compression d'image, mais les fichiers obtenus sont super
light etidéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en 512
x384
Par contre, j'ai toujours un problème de taille avec ce fichier excel
quisemble emmagasiner toutes les photos chargées lors du traitement et ne
se"Vide" les neurones qu'aprés une fermeture et réouverture complète du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'aillesalimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
LongPrivate Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
pointdansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" a
écritdans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisationfournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)concernent l'utilisation dans un environnement VB et non VBA
d'office.Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreuret neme permet pas de tester le code veritablement. Lorsque je met les
lignesdecode comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien
derien...
Si quelqu'un connait un peu le genre de problèmes que l'on rencontre
enessayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
jene vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formatsd'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images JPEG
chezIntel, mais j'ai perdu la référence.
Re Christophe;
Quel est ton message d'erreur ?
Cette adresse est fonctionnelle et accessible à d'autres (y compris les
spameurs)
alors pourquoi pas toi ?
Elle fonctionne même quand je tombe dans l'oubli et que je m'écris pour me
remonter le moral !
Je te recommande d'insister.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Michel,
l'adresse est refusée...
Kristof
"Michel Pierron" a écrit dans le message de
news:Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais
péter
ton codeici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avaisplus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne
(ensemble
ducode + suggestion Michel dans Module UserForm ) et l'image apparait
bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
persoqui ramait suffisement pour voir que le résultat était pas mal...
mais
paséternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne
parviens
pas àdéterminer (en mode débogage) le momment où et pourquoi le userform
est
redéssiné (en fait je ne suis pas sur qu'il soit réellement
redéssiné,
maisen tout cas le userform apparaît vierge) éffacant ainsi le résultat
de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continuensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition
que
lafenètre VBA soit réduite de façon à ne pas depasser sur l'affichage
du
Userform (pas facile de décrire ça , quelques copies écran seraient
les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça
ressemble
àdu bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis
pas
unexpert en compression d'image, mais les fichiers obtenus sont super
light etidéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en
512
x384
Par contre, j'ai toujours un problème de taille avec ce fichier
excel
quisemble emmagasiner toutes les photos chargées lors du traitement et
ne
se"Vide" les neurones qu'aprés une fermeture et réouverture complète
du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'aillesalimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long)
As
LongPrivate Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
pointdansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN"
a
écritdans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à
mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisationfournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)concernent l'utilisation dans un environnement VB et non VBA
d'office.Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,autre...) ,si on doit créer un objet VirtualPicture sur un
nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me
heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreuret neme permet pas de tester le code veritablement. Lorsque je met
les
lignesdecode comportant Me en commentaire, tout le reste semble
fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument
rien
derien...
Si quelqu'un connait un peu le genre de problèmes que l'on
rencontre
enessayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As
Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans
le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait
de
redimensionner une image et/ou de la convertir en JPEG ou en
GIF,
jene vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formatsd'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images
JPEG
chezIntel, mais j'ai perdu la référence.
Re Christophe;
Quel est ton message d'erreur ?
Cette adresse est fonctionnelle et accessible à d'autres (y compris les
spameurs)
alors pourquoi pas toi ?
Elle fonctionne même quand je tombe dans l'oubli et que je m'écris pour me
remonter le moral !
Je te recommande d'insister.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:uBf03y7GEHA.1268@TK2MSFTNGP12.phx.gbl...
Michel,
l'adresse mpierron@europtest.com est refusée...
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:OcJP6E7GEHA.2052@TK2MSFTNGP12.phx.gbl...
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais
péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a
écrit
dans le
message de news:ufuwRP6GEHA.2844@tk2msftngp13.phx.gbl...
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne
(ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait
bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal...
mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne
parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform
est
redéssiné (en fait je ne suis pas sur qu'il soit réellement
redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat
de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition
que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage
du
Userform (pas facile de décrire ça , quelques copies écran seraient
les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça
ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis
pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en
512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier
excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et
ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète
du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:%23$1lQpwGEHA.688@tk2msftngp13.phx.gbl...
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long)
As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr>
a
écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à
mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un
nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me
heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met
les
lignes
de
code comportant Me en commentaire, tout le reste semble
fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument
rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on
rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As
Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans
le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait
de
redimensionner une image et/ou de la convertir en JPEG ou en
GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images
JPEG
chez
Intel, mais j'ai perdu la référence.
Re Christophe;
Quel est ton message d'erreur ?
Cette adresse est fonctionnelle et accessible à d'autres (y compris les
spameurs)
alors pourquoi pas toi ?
Elle fonctionne même quand je tombe dans l'oubli et que je m'écris pour me
remonter le moral !
Je te recommande d'insister.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Michel,
l'adresse est refusée...
Kristof
"Michel Pierron" a écrit dans le message de
news:Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais
péter
ton codeici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avaisplus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne
(ensemble
ducode + suggestion Michel dans Module UserForm ) et l'image apparait
bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
persoqui ramait suffisement pour voir que le résultat était pas mal...
mais
paséternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne
parviens
pas àdéterminer (en mode débogage) le momment où et pourquoi le userform
est
redéssiné (en fait je ne suis pas sur qu'il soit réellement
redéssiné,
maisen tout cas le userform apparaît vierge) éffacant ainsi le résultat
de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continuensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition
que
lafenètre VBA soit réduite de façon à ne pas depasser sur l'affichage
du
Userform (pas facile de décrire ça , quelques copies écran seraient
les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça
ressemble
àdu bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis
pas
unexpert en compression d'image, mais les fichiers obtenus sont super
light etidéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en
512
x384
Par contre, j'ai toujours un problème de taille avec ce fichier
excel
quisemble emmagasiner toutes les photos chargées lors du traitement et
ne
se"Vide" les neurones qu'aprés une fermeture et réouverture complète
du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'aillesalimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long)
As
LongPrivate Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
pointdansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN"
a
écritdans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à
mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisationfournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)concernent l'utilisation dans un environnement VB et non VBA
d'office.Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,autre...) ,si on doit créer un objet VirtualPicture sur un
nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me
heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreuret neme permet pas de tester le code veritablement. Lorsque je met
les
lignesdecode comportant Me en commentaire, tout le reste semble
fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument
rien
derien...
Si quelqu'un connait un peu le genre de problèmes que l'on
rencontre
enessayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As
Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans
le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait
de
redimensionner une image et/ou de la convertir en JPEG ou en
GIF,
jene vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formatsd'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images
JPEG
chezIntel, mais j'ai perdu la référence.
Re Christophe;
Quel est ton message d'erreur ?
Cette adresse est fonctionnelle et accessible à d'autres (y compris les
spameurs)
alors pourquoi pas toi ?
Elle fonctionne même quand je tombe dans l'oubli et que je m'écris pour me
remonter le moral !
Je te recommande d'insister.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Michel,
l'adresse est refusée...
Kristof
"Michel Pierron" a écrit dans le message de
news:Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais
péter
ton codeici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avaisplus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne
(ensemble
ducode + suggestion Michel dans Module UserForm ) et l'image apparait
bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
persoqui ramait suffisement pour voir que le résultat était pas mal...
mais
paséternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne
parviens
pas àdéterminer (en mode débogage) le momment où et pourquoi le userform
est
redéssiné (en fait je ne suis pas sur qu'il soit réellement
redéssiné,
maisen tout cas le userform apparaît vierge) éffacant ainsi le résultat
de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continuensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition
que
lafenètre VBA soit réduite de façon à ne pas depasser sur l'affichage
du
Userform (pas facile de décrire ça , quelques copies écran seraient
les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça
ressemble
àdu bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis
pas
unexpert en compression d'image, mais les fichiers obtenus sont super
light etidéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en
512
x384
Par contre, j'ai toujours un problème de taille avec ce fichier
excel
quisemble emmagasiner toutes les photos chargées lors du traitement et
ne
se"Vide" les neurones qu'aprés une fermeture et réouverture complète
du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'aillesalimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long)
As
LongPrivate Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
pointdansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN"
a
écritdans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à
mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisationfournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)concernent l'utilisation dans un environnement VB et non VBA
d'office.Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,autre...) ,si on doit créer un objet VirtualPicture sur un
nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me
heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreuret neme permet pas de tester le code veritablement. Lorsque je met
les
lignesdecode comportant Me en commentaire, tout le reste semble
fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument
rien
derien...
Si quelqu'un connait un peu le genre de problèmes que l'on
rencontre
enessayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As
Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans
le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait
de
redimensionner une image et/ou de la convertir en JPEG ou en
GIF,
jene vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formatsd'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images
JPEG
chezIntel, mais j'ai perdu la référence.
Re Christophe;
Quel est ton message d'erreur ?
Cette adresse est fonctionnelle et accessible à d'autres (y compris les
spameurs)
alors pourquoi pas toi ?
Elle fonctionne même quand je tombe dans l'oubli et que je m'écris pour me
remonter le moral !
Je te recommande d'insister.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a écrit
dans le
message de news:uBf03y7GEHA.1268@TK2MSFTNGP12.phx.gbl...
Michel,
l'adresse mpierron@europtest.com est refusée...
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:OcJP6E7GEHA.2052@TK2MSFTNGP12.phx.gbl...
Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais
péter
ton code
ici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr> a
écrit
dans le
message de news:ufuwRP6GEHA.2844@tk2msftngp13.phx.gbl...
Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avais
plus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne
(ensemble
du
code + suggestion Michel dans Module UserForm ) et l'image apparait
bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
perso
qui ramait suffisement pour voir que le résultat était pas mal...
mais
pas
éternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne
parviens
pas à
déterminer (en mode débogage) le momment où et pourquoi le userform
est
redéssiné (en fait je ne suis pas sur qu'il soit réellement
redéssiné,
mais
en tout cas le userform apparaît vierge) éffacant ainsi le résultat
de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continu
ensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition
que
la
fenètre VBA soit réduite de façon à ne pas depasser sur l'affichage
du
Userform (pas facile de décrire ça , quelques copies écran seraient
les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça
ressemble
à
du bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis
pas
un
expert en compression d'image, mais les fichiers obtenus sont super
light et
idéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en
512
x
384
Par contre, j'ai toujours un problème de taille avec ce fichier
excel
qui
semble emmagasiner toutes les photos chargées lors du traitement et
ne
se
"Vide" les neurones qu'aprés une fermeture et réouverture complète
du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'ailles
alimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:%23$1lQpwGEHA.688@tk2msftngp13.phx.gbl...
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long)
As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
point
dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN" <campain.christophe_PasDePub@libertysurf.fr>
a
écrit
dans le
message de news:eUCV8AvGEHA.2436@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à
mes
besoins
(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisation
fournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA
d'office.
Je
ne parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,
autre...) ,si on doit créer un objet VirtualPicture sur un
nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me
heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreur
et ne
me permet pas de tester le code veritablement. Lorsque je met
les
lignes
de
code comportant Me en commentaire, tout le reste semble
fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument
rien
de
rien...
Si quelqu'un connait un peu le genre de problèmes que l'on
rencontre
en
essayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As
Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans
le
message
de news:%23Cj4aiMGEHA.4084@TK2MSFTNGP11.phx.gbl...
Bonjour,
Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"
dans ses
documents (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait
de
redimensionner une image et/ou de la convertir en JPEG ou en
GIF,
je
ne vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats
d'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images
JPEG
chez
Intel, mais j'ai perdu la référence.
Re Christophe;
Quel est ton message d'erreur ?
Cette adresse est fonctionnelle et accessible à d'autres (y compris les
spameurs)
alors pourquoi pas toi ?
Elle fonctionne même quand je tombe dans l'oubli et que je m'écris pour me
remonter le moral !
Je te recommande d'insister.
MP
"Christophe CAMPAIN" a écrit
dans le
message de news:Michel,
l'adresse est refusée...
Kristof
"Michel Pierron" a écrit dans le message de
news:Bonjour Christophe;
Cela est probablement du à la chronologie de tes procédures. Fais
péter
ton codeici pour qu'on te le dévermine ou bien en bal perso si tu préfères.
MP
"Christophe CAMPAIN" a
écrit
dans lemessage de news:Bonjour à tous,
Michel, Clément, désolé pour les confusions dans les noms mais je
n'avaisplus l'historique complet du post.
En tout cas merci à vous pour l'aide que vous m'apportez.
Du nouveau pour l'ActiveX : L'adaptation de Michel fonctionne
(ensemble
ducode + suggestion Michel dans Module UserForm ) et l'image apparait
bien
redimensionnée MAIS... (Il y a encore un mais...) Le tout disparait
quasiment instantanément... (J'ai pu le voir hier grace à ma TRABAN
persoqui ramait suffisement pour voir que le résultat était pas mal...
mais
paséternel...)
--------
Je ne sais pas pourquoi l'affichage disparait aussitôt. Je ne
parviens
pas àdéterminer (en mode débogage) le momment où et pourquoi le userform
est
redéssiné (en fait je ne suis pas sur qu'il soit réellement
redéssiné,
maisen tout cas le userform apparaît vierge) éffacant ainsi le résultat
de
l'activeX.
-------
Aprés quelques esais, si je met un point d'arrêt au début du code et
continuensuite sont éxécution (F5), le userform n'est pas "redessiné" et le
résultat de l'activeX est visible de manière constante (à condition
que
lafenètre VBA soit réduite de façon à ne pas depasser sur l'affichage
du
Userform (pas facile de décrire ça , quelques copies écran seraient
les
bienvenues...).
En ce qui concerne la solution passant par un ChartObjects, ça
ressemble
àdu bricolage, mais j'ai été bluffé par les résultats !!! (Je ne suis
pas
unexpert en compression d'image, mais les fichiers obtenus sont super
light etidéal pour un affichage écran (éviter de faire un zoom tout de même)
ex:
image origine : JPEG 227 Ko en 1024 x 768
Exportée par ChartObject : JPEG 36 Ko en 800 x 600 ; JPEG 15 Ko en
512
x384
Par contre, j'ai toujours un problème de taille avec ce fichier
excel
quisemble emmagasiner toutes les photos chargées lors du traitement et
ne
se"Vide" les neurones qu'aprés une fermeture et réouverture complète
du
fichier (Problème de vidage de mémoire ?). Il faut d'ailleurs que
j'aillesalimenter le post sur ce sujet...
Merci,
@+
Kristof
"Michel Pierron" a écrit dans le message de
news:%23$Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long)
As
LongPrivate Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long
Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub
Execute ensuite les procédures de démo souhaitées en supprimant le
pointdansMe.hDC
et reviens si tu as besoin de nouvelles infos.
MP
"Christophe CAMPAIN"
a
écritdans lemessage de news:Bonjour à tous,
Clément,
Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX
(gratuit)nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à
mes
besoins(redimensionnement/compression image à la volée).
Cependant, cet ActiveX est développé en VB et les exemples
d'utilisationfournis sur le site
(http://www.alphabeta-net.com/VirtualPicture.html)concernent l'utilisation dans un environnement VB et non VBA
d'office.Jene parviens pas à le tester avec VBA.
Il n'est pas précisé où le code doit être recopier (Formulaire,
module,autre...) ,si on doit créer un objet VirtualPicture sur un
nouveau
formulaire, comment les nommer etc.
Ce qui fait qu'en essayant de tester le code suivant, je me
heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une
erreuret neme permet pas de tester le code veritablement. Lorsque je met
les
lignesdecode comportant Me en commentaire, tout le reste semble
fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument
rien
derien...
Si quelqu'un connait un peu le genre de problèmes que l'on
rencontre
enessayant d'adapter un code VB pour le VBA, ses conseils sont les
bienvenus.
@+
Kristof
'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As
Long
Dim lngCurrentY As Long
Dim obj As Object
'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------
'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)
objPicture.PaintPicture Me.hDC
End If
'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 130, 0
End If
'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
objPicture.PaintPicture Me.hDC, 260, 0
End If
' Editer un Texte
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")
objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font
Verdana")
objPicture.PrintText "Size 10", 20, lngCurrentY
objPicture.PaintPicture Me.hDC, 390, 0
End If
' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing
lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight,
lngNewWidth)objSample.PaintPicture Me.hDC, lngCurrX + 10, 130
Set objSample = Nothing
End If
' Libération des ressources
Set objPicture = Nothing
'------------------------------
"Clément Marcotte" a écrit dans
le
messagede news:%Bonjour,Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"dans sesdocuments (Par n'importe quel moyen)
À part que de te trouver un contrôle ActiveX qui permettrait
de
redimensionner une image et/ou de la convertir en JPEG ou en
GIF,
jene vois pas trop.
Les contrôles Image et PictureBox de MS peuvent lire d'autres
formatsd'image que BMP, mais exportent seulement en BMP.
Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com
Il y avait bien une bibliothèque de manipulation des images
JPEG
chezIntel, mais j'ai perdu la référence.