re
Bonjour fanch55
si on ne voulait pas s'ennuyer avec les calculs on pourrait voir les choses a l'envers
sans property l'image est en aspect ratio a true d'origine
donc on pourrait simplement mettre le width de l'image au width du body
et si le height devient trop grand on met le height de l'image au height du body et le width de l'image en auto
j'ai bien sur ajouté le position:absolute dans le style pour pouvoir la centrer
et voila
donc ton exemple revue simplement avec cette idée
VB:
Private Sub lstImages_Click()
Dim Img
With WebBrowser1
.Navigate "about:blank"
Do While .ReadyState < 4: DoEvents: Loop
'lblNomActuel = txtChemin & "" & lstFichiers.List(lstFichiers.ListIndex)
lblNomActuel = "C:\Users\Public\Pictures\Sample Pictures\aaaa.jpg"
style0 = "margin:0;width:100%;height:100%;"""
style1 = "display:block;margin:0;position:absolute"
.Document.Write "<body style=" & style0 & "><img id='MyImg' style=""" & style1 & """ src='" & lblNomActuel & "'></body>"
Set Img = .Document.GetElementById("MyImg")
Img.Width = .Document.body.ClientWidth ' on force le width de l'image au width du body sans chercher si c'est bon ou pas
'forcement le height va se modifier car elle est en aspect ratio d'origine
' donc on vérifie si le height n'est pas devenu trop grand et on le remet au height du body
'et on met le width de l'image en auto pour garder l'aspect ratio
If Img.Height > .Document.body.ClientHeight Then Img.Style.Height = "100%": Img.Style.Width = "auto"
'et on la centre
Img.Style.Left = (.Document.body.ClientWidth - Img.offsetwidth) / 2
Set Img = Nothing
TextBox1 = .Document.getelementsbytagname("body")(0).outerhtml
End With
End Sub
voila le ratio se fait en deux étapes par la condition "If"
Bonjour et merci a tous.
Vous m'avez bien aidé et je vous en remercie encore,
je vous joint mon fichier( Visionneuse IMAGE) avec le code qui fonctionne et redimensionne les images. C'est super.
Comme annoncé, je suis novice et je ne sais pas comment procéder pour supprimer directement un fichier image du disque dur a partir de la listbox (liste des images)
Bonjour tu n'a rien écouté de notre débat a @fanch55 et moi 1° les deux tests if ( du redimensionnement) ne fonctionnent pas
2° ; dis moi pourquoi utilise tu un webbrowser si c'est que des ".JPG" ????????
c'est absolument pas utile avec un simple control image en mode zoom tu n'a pas besoins de code
juste une ligne de load image
3° tu rempli ta liste avec un dir sur "jpg" NomFichier = Dir(txtChemin & "\*.jpg") dis moi comment veux tu que la boucle do loop
VB:
Do While NomFichier <> ""
If InStr(1, Right(NomFichier, 4), ".bmp") > 0 Or InStr(1, Right(NomFichier, 4), ".jpg") > 0 Or InStr(1, Right(NomFichier, 4), ".png") > 0 Or InStr(1, Right(NomFichier, 4), ".jpeg") > 0 Then
lstFichiers.AddItem NomFichier
trouve autre chose que des jpg !!!! c'est pas bon !!!!
et j'en passe et des meilleures ,c'est pas la peine que j'aille jusqu'au bout
car là on partirait tout azimut
il faudrait savoir déjà si les images doivent etre de différent format
si tel est le cas il faut revoir le dir
bref a quoi ça sert que ducros se décarcasse hein !!!
Désolé, vraiment désolé,
j'allais faire la correction après,
je m'initialise depuis peu et j'essaye d'y aller progressivement.
j'aurai du rectifié avant d'envoyer le fichier j'ai voulu mettre un bouton supprimer avant.
@patricktoulon ,
Bonjour Pat,
Ci-joint le classeur dans lequel j'ai ma version un peu modifiée et ta dernière .
Il est vrai que la tienne occupe mieux l'espace du browser,
cependant il y a un petit phénomène bizarre et aléatoire tout au moins chez moi :
le premier chargement d'une nouvelle image n'est pas forcément bien optimisé, les ascenseur restent .
re @fanch55
très étonnante votre gestion graphique
chez moi a aucun des essais ta version donne bon
de toute façon ça ne peut fonctionner correctement avec ton css
because
Avec IE on ne peut pas utiliser 100% et maxheight ou maxwidth et margin:auto dans un style pour le même élément
les webmaster le font par ce que sur certain navigateurs certains membre de style ne peuvent être lu ils sont donc zappés ils ne gênent donc en rien
là on travaille avec le webbrowser donc librairie IE 09/10 et accepte css1 certaines chose du css2 css3
il est évident que ça va pas matcher sur IE (tantôt tu lui dis margin:auto donc marge automatique forcée et tantôt tu lui dis 100% c'est pas cohérent )surtout que tu ne margin pas à 0 ton body
il y a une seule logique a prendre
1° le body doit être a margin:0 pour supprimer les marges forcées natives
2° on a les dimensions body d'accessibles
3° on a les dimensions image d'accessibles
4° on calcule le quel prorata est le plus petitbodywidth/imagewidth et bodyheight/imageheght
5°on applique le prorata au width de l'image et le height on le met à auto pour garder l'aspect ration d'origine
avec cette logique on a un résultat supérieur ou inférieur a la taille de l'image d'origine selon le besoins
le principe est très simple a comprendre
si ça ne fonctionne pas dans le webbrowser c'est que votre librairie IE est défaillante ou absente
@fanch55
reprends ton double USF avec web et colle lui ça a la place de ton code (complet)
VB:
Option Explicit
Private Sub Run_Patrick(lblnomactuel)
Dim Img, body As Object
With WebPatrick
.Navigate "about:blank"
Do While .ReadyState < 4: DoEvents: Loop
Set body = .Document.getelementsbytagname("body")(0)
With body: .Style.margin = "0": .bgcolor = "brown": End With
Set Img = .Document.body.appendchild(.Document.createelement("img"))
With Img
.src = lblnomactuel
.ID = "MyImg"
.Width = body.ClientWidth
If .Height > body.ClientHeight Then Img.Style.Height = "100%": Img.Style.Width = "auto"
With Img.Style
.Position = "absolute" ' sans ca on ne peut mettre une image ailleur qu'a gauche
.Left = ((body.ClientWidth) - Img.offsetWidth) / 2 'on la centre en CSS
.Top = ((body.ClientHeight) - Img.offsetheight) / 2 'on la centre en CSS
End With
End With
TextPatrick = .Document.getelementsbytagname("body")(0).outerhtml
End With
Set Img = Nothing
End Sub
Private Sub Run_Fanch(lblnomactuel)
Dim Img
With WebFanch
.Navigate "about:blank"
Do While .ReadyState < 4: DoEvents: Loop
.Document.Write "<img id='MyImg' src='" & lblnomactuel & "'>"
With .Document.body: .bgcolor = "brown": .Style.margin = 0: End With
Set Img = .Document.GetElementById("MyImg")
Img.Style.Position = "absolute"
Img.Width = .Document.body.ClientWidth
If Img.Height > .Document.body.ClientHeight Then Img.Style.Height = "100%": Img.Style.Width = "auto"
Img.Style.Left = (.Document.body.ClientWidth - Img.offsetwidth) / 2
Img.Style.Top = ((.Document.body.ClientHeight) - Img.offsetheight) / 2 'on la centre en CSS
TextFanch = .Document.getelementsbytagname("body")(0).outerhtml
End With
End Sub
Function GetSpecialFolder(Optional Target As Variant = &H5) As String
Dim objFolderItem As Object
On Error Resume Next
Set objFolderItem = CreateObject("Shell.Application").Namespace(Target).Self
If Err _
Then GetSpecialFolder = "?" _
Else GetSpecialFolder = objFolderItem.Path
Set objFolderItem = Nothing
End Function
Private Sub GetImage_Click()
Static ImgFile
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Sélectionner une Image"
.InitialFileName = IIf(ImgFile = vbNullString, GetSpecialFolder(&H27), ImgFile)
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Images", "*.*"
If .Show Then
ImgFile = .SelectedItems(1)
Run_Fanch ImgFile
Run_Patrick ImgFile
End If
End With
End Sub
avec celui la j'ai le même résultat pour les deux
l'un est monté en DOM l'autre ecrit avec write
re
oui ma fois je sais je n'ai pas ce soucis là et difficile de reproduire cette erreur
mais en l’état sont fichier complètement refait (post#26) fonctionne
c'est bizarre quand même peut être un doevents quelque part