OVH Cloud OVH Cloud

TOC TOC WEBBROWSER Y A QUELQU'UN ???

5 réponses
Avatar
le_troll
Bonjour,

J'ai fait:

' projet\référence\[X]Microsoft Internet Controls ' pour la distribution
' projet\composants\[X]Microsoft Internet Controls ' pour la programmation
'
Sub Form_Load()
WebBrowser1.Navigate "http://perso0.free.fr/cgi-bin/meteo.pl?dep=75"
End Sub
-----------------

Et maintenant, l'image que j'ai comment la recopier dans le presse pour la
coller où que je veux ???

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !

5 réponses

Avatar
François Picalausa
Hello,

Tu peux télécharger l'image dans le cache, comme IE le ferait, et ensuite
utiliser l'image fraichement téléchargée comme n'importe quel autre fichier:
Option Explicit

Private Const MAX_PATH As Long = 260
Private Const S_OK = 0

Private Declare Function URLDownloadToCacheFile _
Lib "urlmon" _
Alias "URLDownloadToCacheFileA" _
( _
ByVal lpUnkcaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwBufLength As Long, _
ByVal dwReserved As Long, _
ByVal pBSC As Long _
) _
As Long

Private Sub Command1_Click()
Dim DownloadPath As String
Dim BufferLenght As Long
Const URL As String = "http://perso0.free.fr/cgi-bin/meteo.pl?depu"

BufferLenght = MAX_PATH + 1
DownloadPath = String$(BufferLenght, vbNullChar)

If URLDownloadToCacheFile(0, URL, DownloadPath, BufferLenght, 0, 0) =
S_OK Then
'Met l'image dans une PBox
Set Picture1.Picture = LoadPicture(TrimNull(DownloadPath))

'Met l'image dans le clipboard
Clipboard.SetData LoadPicture(TrimNull(DownloadPath))
Else
MsgBox "Impossible de télécharger l'image!"
End If
End Sub

Private Function TrimNull(StrString As String) As String
TrimNull = StrString
If InStr(1, StrString, vbNullChar) Then
TrimNull = Left$(StrString, InStr(1, StrString, vbNullChar) - 1)
End If
End Function

Le webbrowser ne te donnera pas, que je sache mais je peux me tromper, la
possibilité de récupérer directement ton objet picture. Donc il faudrait
passer par des techniques de copier coller d'écran en tenant compte du fait
que l'image pourrait ne pas être au même endroit au pixel près, ...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"le_troll" a écrit dans le message de news:

Bonjour,

J'ai fait:

' projetréférence[X]Microsoft Internet Controls ' pour la
distribution ' projetcomposants[X]Microsoft Internet Controls '
pour la programmation '
Sub Form_Load()
WebBrowser1.Navigate "http://perso0.free.fr/cgi-bin/meteo.pl?depu"
End Sub
-----------------

Et maintenant, l'image que j'ai comment la recopier dans le presse
pour la coller où que je veux ???


Avatar
le_troll
Comme dit hier, avec webborwser1.container = picture1 ça marche, sauf
que la picture n'est pas une véritable image, cependant elle peut être
affichée, comme le webbrowser d'ailleurs...

La seconde solution, le webbrowser, en fait il affiche la page net avec
son image, il suffirait (mais je ne crois pas savoir le faire), d'envoyer
une commande de copie d'image à l'IE, car si on clique droit et "copier
image", ça marche, sais-tu aller dans ce sens ?

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !


"François Picalausa" a écrit dans le message de
news:
Hello,

Tu peux télécharger l'image dans le cache, comme IE le ferait, et ensuite
utiliser l'image fraichement téléchargée comme n'importe quel autre


fichier:
Option Explicit

Private Const MAX_PATH As Long = 260
Private Const S_OK = 0

Private Declare Function URLDownloadToCacheFile _
Lib "urlmon" _
Alias "URLDownloadToCacheFileA" _
( _
ByVal lpUnkcaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwBufLength As Long, _
ByVal dwReserved As Long, _
ByVal pBSC As Long _
) _
As Long

Private Sub Command1_Click()
Dim DownloadPath As String
Dim BufferLenght As Long
Const URL As String = "http://perso0.free.fr/cgi-bin/meteo.pl?depu"

BufferLenght = MAX_PATH + 1
DownloadPath = String$(BufferLenght, vbNullChar)

If URLDownloadToCacheFile(0, URL, DownloadPath, BufferLenght, 0, 0) > S_OK Then
'Met l'image dans une PBox
Set Picture1.Picture = LoadPicture(TrimNull(DownloadPath))

'Met l'image dans le clipboard
Clipboard.SetData LoadPicture(TrimNull(DownloadPath))
Else
MsgBox "Impossible de télécharger l'image!"
End If
End Sub

Private Function TrimNull(StrString As String) As String
TrimNull = StrString
If InStr(1, StrString, vbNullChar) Then
TrimNull = Left$(StrString, InStr(1, StrString, vbNullChar) - 1)
End If
End Function

Le webbrowser ne te donnera pas, que je sache mais je peux me tromper, la
possibilité de récupérer directement ton objet picture. Donc il faudrait
passer par des techniques de copier coller d'écran en tenant compte du


fait
que l'image pourrait ne pas être au même endroit au pixel près, ...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"le_troll" a écrit dans le message de news:

> Bonjour,
>
> J'ai fait:
>
> ' projetréférence[X]Microsoft Internet Controls ' pour la
> distribution ' projetcomposants[X]Microsoft Internet Controls '
> pour la programmation '
> Sub Form_Load()
> WebBrowser1.Navigate "http://perso0.free.fr/cgi-bin/meteo.pl?depu"
> End Sub
> -----------------
>
> Et maintenant, l'image que j'ai comment la recopier dans le presse
> pour la coller où que je veux ???




Avatar
François Picalausa
Hello,

"le_troll" a écrit dans le message de news:

Comme dit hier, avec webborwser1.container = picture1 ça marche,



Pas exactement. Tu place simplement le webbrowser dans la picturebox (ce qui
est aussi possible en design mode - comme quand tu mets une case à cocher
dans une frame).

sauf que la picture n'est pas une véritable image,



Le webbrowser n'est pas une image, forcément!
Par contre, l'image affichée par le webbrowser est bien une image GIF, tout
ce qu'il y a de plus standard. (qui a dit qu'un document texte ne pouvait
pas avoir l'extension .zrft ? ici c'est la même chose si ce n'est que
l'image est générée dynamiquement).

cependant elle
peut être affichée, comme le webbrowser d'ailleurs...


elle peut être affichée *par le webbrowser*


La seconde solution, le webbrowser, en fait il affiche la page net
avec son image, il suffirait (mais je ne crois pas savoir le faire),
d'envoyer une commande de copie d'image à l'IE, car si on clique
droit et "copier image", ça marche, sais-tu aller dans ce sens ?



C'est effectivement possible si tu souhaites simplement copier l'image.
Tu peux utiliser execCommand avec SelectAll et Copy pour arriver à celà.
L'effet sera de copier de l'HTML, du RTF et d'autres formats de données dans
le presse papier (mais pas l'image).

As-tu réellement besoin du contrôle webbrowser pour effectuer cette
opération?
Sinon, le bout de code que j'avais prorposé a les même prérequis que le
tiens, rien de plus a redistribuer:
Minimum availability : Internet Explorer 3.0
Minimum operating systems : Windows NT 4.0, Windows 95

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com


"François Picalausa" a écrit dans le message de
news:
Tu peux télécharger l'image dans le cache, comme IE le ferait, et
ensuite utiliser l'image fraichement téléchargée comme n'importe
quel autre fichier: Option Explicit <snip>
Le webbrowser ne te donnera pas, que je sache mais je peux me
tromper, la possibilité de récupérer directement ton objet picture.
Donc il faudrait passer par des techniques de copier coller d'écran
en tenant compte du fait que l'image pourrait ne pas être au même
endroit au pixel près, ...

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com

"le_troll" a écrit dans le message de news:

J'ai fait:

' projetréférence[X]Microsoft Internet Controls ' pour la
distribution ' projetcomposants[X]Microsoft Internet Controls '
pour la programmation '
Sub Form_Load()
WebBrowser1.Navigate
"http://perso0.free.fr/cgi-bin/meteo.pl?depu" End Sub
-----------------

Et maintenant, l'image que j'ai comment la recopier dans le presse
pour la coller où que je veux ???






Avatar
le_troll
François, désolé, c'est une vraie image, tu fais "copier", puis
"coller" dans paint, et tu as l'image...
Ben comme j'ai commencé ainsi, et qu'en plus ça fait une ligne de code,
j'aurais mieux aimer terminer de la même façon...

Peux-tu me m'écrire ce qu'il faut raconter pour que ça fasse
copier(webbrowser1) + coller->Picture1 ???

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !


"François Picalausa" a écrit dans le message de
news:%
Hello,

"le_troll" a écrit dans le message de news:

> Comme dit hier, avec webborwser1.container = picture1 ça marche,

Pas exactement. Tu place simplement le webbrowser dans la picturebox (ce


qui
est aussi possible en design mode - comme quand tu mets une case à cocher
dans une frame).

> sauf que la picture n'est pas une véritable image,

Le webbrowser n'est pas une image, forcément!
Par contre, l'image affichée par le webbrowser est bien une image GIF,


tout
ce qu'il y a de plus standard. (qui a dit qu'un document texte ne pouvait
pas avoir l'extension .zrft ? ici c'est la même chose si ce n'est que
l'image est générée dynamiquement).

> cependant elle
> peut être affichée, comme le webbrowser d'ailleurs...
elle peut être affichée *par le webbrowser*


> La seconde solution, le webbrowser, en fait il affiche la page net
> avec son image, il suffirait (mais je ne crois pas savoir le faire),
> d'envoyer une commande de copie d'image à l'IE, car si on clique
> droit et "copier image", ça marche, sais-tu aller dans ce sens ?

C'est effectivement possible si tu souhaites simplement copier l'image.
Tu peux utiliser execCommand avec SelectAll et Copy pour arriver à celà.
L'effet sera de copier de l'HTML, du RTF et d'autres formats de données


dans
le presse papier (mais pas l'image).

As-tu réellement besoin du contrôle webbrowser pour effectuer cette
opération?
Sinon, le bout de code que j'avais prorposé a les même prérequis que le
tiens, rien de plus a redistribuer:
Minimum availability : Internet Explorer 3.0
Minimum operating systems : Windows NT 4.0, Windows 95

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
>
>
> "François Picalausa" a écrit dans le message de
> news:
>> Tu peux télécharger l'image dans le cache, comme IE le ferait, et
>> ensuite utiliser l'image fraichement téléchargée comme n'importe
>> quel autre fichier: Option Explicit <snip>
>> Le webbrowser ne te donnera pas, que je sache mais je peux me
>> tromper, la possibilité de récupérer directement ton objet picture.
>> Donc il faudrait passer par des techniques de copier coller d'écran
>> en tenant compte du fait que l'image pourrait ne pas être au même
>> endroit au pixel près, ...
>>
>> --
>> François Picalausa (MVP VB)
>> http://faq.vb.free.fr --- http://msdn.microsoft.com
>>
>> "le_troll" a écrit dans le message de news:
>>
>>> J'ai fait:
>>>
>>> ' projetréférence[X]Microsoft Internet Controls ' pour la
>>> distribution ' projetcomposants[X]Microsoft Internet Controls '
>>> pour la programmation '
>>> Sub Form_Load()
>>> WebBrowser1.Navigate
>>> "http://perso0.free.fr/cgi-bin/meteo.pl?depu" End Sub
>>> -----------------
>>>
>>> Et maintenant, l'image que j'ai comment la recopier dans le presse
>>> pour la coller où que je veux ???




Avatar
Fred
Bonjour,

Je vous propose l'intégration suivante :

Créez un formulaire avec les composants suivants :

- webbrowser => name : webbrowser1
- ImageList => name : imagelist1
- Label => name : label1
- ImageCombo => ImageCombo1
- CommandButton => Command1
- Inet => Inet1 (Internet Transfert Control)

Dès que vous cliquez sur le bouton de commande, le programme débute par une
demande du document web.
Une fois le document chargé, il énumère la liste des images présentes dans
le document.
Pour chaque image, il réalise une demande via le composant inet1. (On peut
améliorer en utilisant l'API décrite par François Picalausa en la récupérant
directement dans le cache mais j'ai voulu faire simple)

Après quoi, on alimente la liste d'images en associant en commentaire l'url
d'où l'image a été récupérée...

Cette routine a l'air de fonctionner également avec les sites Web.

Bons tests,

Frédéric Puteaux.

Private Sub Command1_Click()
Dim i, j, index As Integer
Dim ext As String

On Error Resume Next

Command1.Enabled = False
Screen.MousePointer = vbHourglass

WebBrowser1.Navigate2 "http://perso0.free.fr/cgi-bin/meteo.pl?depu", 4
Do
DoEvents
If WebBrowser1.Busy = False Then Exit Do
Loop

Label1.Caption = "Nombre d'images : " &
WebBrowser1.Document.images.length

ImageCombo1.ComboItems.Clear
ImageList1.ListImages.Clear

If WebBrowser1.Document.images.length > 0 Then
For i = 1 To WebBrowser1.Document.images.length
'
' --- On récupère l'image et on la place dans le contrôle image
'

Err.Clear
Select Case LCase(Right(WebBrowser1.Document.images(i - 1).src,
3))
Case "gif"
ext = ".gif"
Case "png"
ext = ".png"
Case "jpg"
ext = ".jpg"
Case "bmp"
ext = ".bmp"
Case Else
ext = ".gif"
End Select

GetImage i, ext

ImageList1.ListImages.Add , , LoadPicture(App.Path & "img_" & i
& ext)
If Err <> 0 Then
Debug.Print Err & " - " & Error
End If
Next i

Set ImageCombo1.ImageList = ImageList1
For i = 1 To WebBrowser1.Document.images.length
Err.Clear
ImageCombo1.ComboItems.Add , , WebBrowser1.Document.images(i -
1).src, i
If Err <> 0 Then
Debug.Print Err & " - " & Error
End If
Next i
ImageCombo1.ComboItems.Item(1).Selected = True
End If

Command1.Enabled = True
Screen.MousePointer = vbNormal

End Sub
Sub GetImage(ByVal i As Integer, ByVal ext As String)
Dim img() As Byte
Dim h As Long
Dim appel As String

On Error Resume Next
Err.Clear

With Me.Inet1
appel = WebBrowser1.Document.images(i - 1).src
img() = .OpenURL(appel, icByteArray)

End With
If Err <> 0 Then
Debug.Print Err & " - " & Error
End If

Err.Clear
h = FreeFile
Open App.Path & "img_" & i & ext For Output As #h
For j = LBound(img()) To UBound(img())
Print #h, Chr(img(j));
Next j
Close #h
If Err <> 0 Then
Debug.Print Err & " - " & Error
End If
End Sub






"le_troll" a écrit dans le message de news:

Bonjour,

J'ai fait:

' projetréférence[X]Microsoft Internet Controls ' pour la distribution
' projetcomposants[X]Microsoft Internet Controls ' pour la
programmation
'
Sub Form_Load()
WebBrowser1.Navigate "http://perso0.free.fr/cgi-bin/meteo.pl?depu"
End Sub
-----------------

Et maintenant, l'image que j'ai comment la recopier dans le presse pour la
coller où que je veux ???

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !