AJUDA DE C# PARA VB.NET

PEGUDO 16/02/2012 11:39:16
#394890
Pessoal não sei se este seria o forum certo mas vamos lá:

Preciso traduzir este código em C#:
IHTMLDocument2 doc = (IHTMLDocument2)WebBrowser1.Document.DomDocument;
IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();


para VB.NET

Também programo pouco em C#, mas não entendi estas atribuições em destaque:
[txt-color=#e80000](IHTMLDocument2)[/txt-color]WebBrowser1.Document.DomDocument;
[txt-color=#e80000](IHTMLControlRange)[/txt-color]([txt-color=#e80000](HTMLBody)[/txt-color]doc.body).createControlRange();


Quem puder me ajudar fico muito agradecido.
AJSO 16/02/2012 11:54:23
#394894
Resposta escolhida
Caro PEGUDO

Dim doc As IHTMLDocument2 = DirectCast(WebBrowser1.Document.DomDocument, IHTMLDocument2)
Dim imgRange As IHTMLControlRange = DirectCast(DirectCast(doc.body, HTMLBody).createControlRange(), IHTMLControlRange)


DirectCast(WebBrowser1.Document.DomDocument, IHTMLDocument2)
DirectCast(DirectCast(doc.body, HTMLBody).createControlRange(), IHTMLControlRange)

Acho que falta alguma coisa nessas declarões de variáveis, mas traduzindo é isso.....................................

Boa Sorte
PEGUDO 16/02/2012 12:57:47
#394903
AJSO
Tua explicação foi muito útil, aliás eu não sairia deste passo se não fosse vc

já traduzi todo o código, contudo, estou com mais um problema: ocorre um erro. veja o destaque:
IHTMLDocument2 doc = (IHTMLDocument2)browser.Document.DomDocument;
IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();

imgRange.add([txt-color=#e80000](IHTMLControlElement)img[/txt-color]);
imgRange.execCommand([Ô]Copy[Ô], false, null);
using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
{
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Bmp);
bitmapData = ms.ToArray();
}

Eu trabalho em conjunto com uma galera lá da Índia e eles me passaram este código para passar para VB.NET
Como eu adicionaria esta variável [Ô]img[Ô] dentro de imgRange?
desta forma:
Dim img As mshtml.IHTMLControlElement

acusa Referência nula

Eis meu código em VB.NET:
Dim doc As mshtml.IHTMLDocument2 = DirectCast(QualWebBrowser.Document.DomDocument, mshtml.IHTMLDocument2)
Dim imgRange As mshtml.IHTMLControlRange = DirectCast(DirectCast(doc.body, mshtml.HTMLBody).createControlRange(), mshtml.IHTMLControlRange)
Dim img As mshtml.IHTMLControlElement
Dim bmp As Bitmap
Dim ms As MemoryStream
Dim bitmapData

imgRange.add(img)
imgRange.execCommand([Ô]Copy[Ô], False, vbNull)

bmp = DirectCast(Clipboard.GetDataObject.GetData(DataFormats.Bitmap), Bitmap)
ms = New MemoryStream
bmp.Save(ms, Imaging.ImageFormat.Bmp)
bitmapData = ms.ToArray()

Obrigado mais uma vez.
AJSO 17/02/2012 14:44:16
#395023
Caro PEGUDO

Olhando sua tradução do C para VB.Net ficaria assim
---------------------------------------------------------------------------------------------------------------------------
Dim doc As IHTMLDocument2 = DirectCast(browser.Document.DomDocument, IHTMLDocument2)
Dim imgRange As IHTMLControlRange = DirectCast(DirectCast(doc.body, HTMLBody).createControlRange(), IHTMLControlRange)

imgRange.add(DirectCast(img, IHTMLControlElement))
imgRange.execCommand([Ô]Copy[Ô], False, Nothing)

Using bmp As Bitmap = DirectCast(Clipboard.GetDataObject().GetData(DataFormats.Bitmap), Bitmap)
Dim ms As New MemoryStream()
bmp.Save(ms, ImageFormat.Bmp)
bitmapData = ms.ToArray()
End Using
---------------------------------------------------------------------------------------------------------------------------


Este é seu Código
--------------------------------------------------------------------------------------------------------------------------
Dim doc As mshtml.IHTMLDocument2 = DirectCast(QualWebBrowser.Document.DomDocument, mshtml.IHTMLDocument2)
Dim imgRange As mshtml.IHTMLControlRange = DirectCast(DirectCast(doc.body, mshtml.HTMLBody).createControlRange(), mshtml.IHTMLControlRange)
Dim img As mshtml.IHTMLControlElement
Dim bmp As Bitmap
Dim ms As MemoryStream
Dim bitmapData

imgRange.add(img)
imgRange.execCommand([Ô]Copy[Ô], False, vbNull)

bmp = DirectCast(Clipboard.GetDataObject.GetData(DataFormats.Bitmap), Bitmap)
ms = New MemoryStream
bmp.Save(ms, Imaging.ImageFormat.Bmp)
bitmapData = ms.ToArray()

--------------------------------------------------------------------------------------------------------------------------

Modifique desta forma
---------------------------------------------------------------------------------------------------------------------------
[ô]Comentarios de Mudança
Adicione a esta Classe
++++++++++++++++++++++
Imports mshtml
+++++++++++++++++++++

Dim doc As mshtml.IHTMLDocument2 = DirectCast(QualWebBrowser.Document.DomDocument, mshtml.IHTMLDocument2)
Dim imgRange As mshtml.IHTMLControlRange = DirectCast(DirectCast(doc.body, mshtml.HTMLBody).createControlRange(), mshtml.IHTMLControlRange)
Dim img As mshtml.IHTMLControlElement
Dim bmp As Bitmap
Dim ms As MemoryStream
Dim bitmapData

[ô]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
For Each img As IHTMLImgElement In doc.images
If img.GetAttribute([Ô]src[Ô]).ToString.Contains([Ô]securimage[Ô]) Then
imgRange.add(DirectCast(img, IHTMLControlElement))
imgRange.execCommand([Ô]Copy[Ô], False, Nothing)

Using bmp As Bitmap = DirectCast(Clipboard.GetDataObject().GetData(DataFormats.Bitmap), Bitmap)
Dim ms As New MemoryStream()
bmp.Save(ms, ImageFormat.Bmp)
bitmapData = ms.ToArray()
End Using

Exit For
End If
Next
[ô]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Mudanças em seu Código

Fazer Referências a esta Biblioteca
Imports mshtml

Colocar seu Código em um Loop e depois um IF de verificação

For Each img As IHTMLImgElement In doc.images
If img.GetAttribute([Ô]src[Ô]).ToString.Contains([Ô]securimage[Ô]) Then

[ô]SEU CÓDIGO

Exit For
End If
Next

Veja se isso da certo.......................

Boa Sorte
SPRITU 17/02/2012 14:55:30
#395028
boa tarde,

(IHTMLDocument2)WebBrowser1.Document.DomDocument;
(IHTMLControlRange)((HTMLBody)doc.body).createControlRange();

em resumo, essas linhas efetuam uma conversão explicita.

no caso directcast, porém também pode ser utilizado

Ctype(WebBrowser1.Document.DomDocument,IHTMLDocument2).Propriedade

=D
AJSO 17/02/2012 15:25:38
#395030
Car SPRITU

Citação:

:
boa tarde,

(IHTMLDocument2)WebBrowser1.Document.DomDocument;
(IHTMLControlRange)((HTMLBody)doc.body).createControlRange();

em resumo, essas linhas efetuam uma conversão explicita.

no caso directcast, porém também pode ser utilizado

Ctype(WebBrowser1.Document.DomDocument,IHTMLDocument2).Propriedade

=D



Concordo que pode ser assim utilizar o Ctype só uma correção ambos são semelhantes mas com diferenças implicitas de uso assim em resumo:

O CType é equivalente ao DirectCast, exceto que o CType você utiliza para variáveis do tipo valor (Integer, Long, Double, Decimal), e o DirectCast você utiliza para variáveis do tipo referência (Instâncias de classes / objetos).

No caso OBJETO WebBrowser1 o mais correto para não ter problemas genéricos ou indecifráveis

Mas concordo com o caro colega SPRITU pode ser sim utilizado Ctype neste caso.............................................



Boa sorte a todos.
PEGUDO 18/02/2012 10:38:49
#395061
Obrigado aos dois,
Tradução feita.

Vou, agora, unir este trecho ao código completo para dar continuidade ao projeto.
Obrigado novamente ao [txt-color=#0000f0]AJSO[/txt-color] e ao [txt-color=#0000f0]SPRITU[/txt-color].
Tópico encerrado , respostas não são mais permitidas