1-
rentre l'image cadrée dans la miniature avec un arrière plan noir. Si
l'image est un long rectangle, alors il aura deux bandes noir une au
dessus de l'image et une en dessous.
2- L'image vue a 100% ne
s'affiche pas au complet quand elle est grande. Elle est coupée a la
fin du coté droit et a la fin du bas. Et quand elle est petite (en
taille d'origine) elle n'est pas centrée dans le cadre de l'image mais
au coin haut gauche.
3- Le bouton Parcourir va chercher une
image. Malheureusement si il y a plus qu'une image dans le dossier, je
ne peux pas sélectionner l'image souhaité, il m'affiche toujours la
première image.
4- Je ne sais pas sauvegarder dans une base de
données Access. Ce qui est obligatoire pour récupérer l'image quand je
veux la faire afficher au load du formulaire.
5- Au load, quand
il n'y a pas d'image, la zone des image est de couleur blanche. Une
fois que je sauvegarde l'image, ferme le logiciel et le réouvre,
l'image sauvegardée précédemment doit s'afficher.
6- Une copie
de l'image choisie doit se faire dans le dossier de la source, la
sauvegarde se fera donc après la copie de l'image et la récupération se
fera sur la copie de l'image.
Voilà les 6 points à effectuer.
Si
quelqu'un peut m'aider, je lui serrai vraiment reconnaissant. J'ai
fouillé partout sur vbfrance mais cette source n'existe pas, pourtant
pour l'intégrer dans un logiciel de comptabilité, je ne pense pas que
c'est une mauvaise idée bien au contraire.
Merci pour votre aide à tous !
----------
OS : Windows XP SP3
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
Sub
Stretch(
ByRef
oDest
As Object
, sPath
As String
,
Optional ByVal
lMaxWidth
As Long
=
0
,
Optional
ByVal
lMaxHeigh
t
As Long
=
0
)
'oDest control avec hDC
classique (propriétés hDC, Width, Height, ScaleX-Y, PaintPicture), doit être en
twips
'lMaxWidth largeur max, celle du control
par défaut
'lMaxHeight hauteur max, celle du
control par défaut
Dim lOldWidth As Long
Dim lOldHeight As Long
Dim lNewWidth As Long
Dim lNewHeight As Long
Dim cRatio As Currency
Dim oStd As New StdPicture
'
régule la taille MAX par défaut
If (lMaxWidth <= 0) Or (lMaxWidth > oDest.Width)
Then lMaxWidth =
oDest.Width
If (lMaxHeight <= 0) Or (lMaxHeight > oDest.Height) Then
lMaxHeight = oDest.Height
' charge l'image et récupère sa taille
Set oStd = LoadPicture(sPath)
lOldWidth = oDest.ScaleX(oStd.Width, vbHimetric,
vbTwips)
lOldHeight = oDest.ScaleY(oStd.Height, vbHimetric,
vbTwips)
' orientation, on va étirer l'image au
plus possible en touchant la taille max autorisée avec le bord du type d'image.
l'autre côté peut tout de même dépasser
If lOldWidth > lOldHeight Then
' image réelle :
paysage
lNewWidth = lMaxWidth
cRatio = lMaxWidth / lOldWidth
lNewHeight = lOldHeight * cRatio
If lNewHeight > lMaxHeight Then
' la hauteur dépasse,
même manip
cRatio = lMaxHeight / lNewHeight
lNewHeight = lMaxHeight
lNewWidth = lNewWidth * cRatio
End If
Else
' image réelle : portrait
lNewHeight = lMaxHeight
cRatio = lMaxHeight / lOldHeight
lNewWidth = lOldWidth * cRatio
If lNewWidth > lMaxWidth Then
' la largeur dépasse,
même manip
cRatio = lMaxWidth / lNewWidth
lNewWidth = lMaxWidth
lNewHeight = lNewHeight * cRatio
End If
End If
' on dessine le rendu centré (NB : l'API StretchBlt donne une
trop mauvaise qualité, autant passer par la méthode accessible par le
contrôle)
oDest.PaintPicture oStd, (oDest.Width - lNewWidth) / 2, (oDest.Height - lNewHeight) /
2, lNewWidth, lNewHeight,
0, 0, lOldWidth, lOldHeight,
vbSrcCopy
Set oStd = Nothing
End Sub
'
===================
' EXEMPLE
D'UTILISATION
'
===================
'
Private Sub Command1_Click()
' par exemple sur
une picturebox sans bordure, avec l'autoredraw
Picture1.BorderStyle = vbBSNone
Picture1.AutoRedraw = True
Picture1.BackColor = vbRed
'
nettoyer si ncéssaire
Picture1.Cls
' Picture1 : on étire
l'image en gardant la proportion, sur la taille TOTALE de la
box
Call Stretch(Picture1, "C:\image1.jpg")
' Picture1 (aussi !!) : on étire l'image en gardant la
proportion, sur la MOITIé de la box (toujours en son centre)
Call Stretch(Picture1, "C:\image1.jpg", Picture1.Width / 2, Picture1.Height / 2)
End Sub
'ce code permet d'étirer une image au centre d'un contrôle en
conservant les proportions d'origines.
'lMaxWidth et lMaxHeight étant
optionnels, vous pouvez également jouer pour, par exemple, dessiner ensuite une
bordure sur votre contrôle sans mordre sur le rendu.
pour le reste, presque tout trouve réponse aussi sur codyx.org ++