Roland's profileSnoopy´s Live-SpaceBlogListsNetwork Tools Help

Snoopy´s Live-Space

Mein Space Rund um VB.Net und Segelfliegen

Roland Wutzke

Occupation
Location
Interests
Verheiratet, 2 Kinder
June 01

HexDump Visualizer für Visual Studio 2008

Windows Live Spaces Tags: , , , , ,

Visualizer sind das Salz in der Suppe beim Debuggen. Wir arbeiten meist vollkommen unbewusst in unserer täglichen Arbeit mit Visual Studio damit. Doch VS bietet nicht für alle Gegebenheiten einen Visualizer an. Will man bspw. einen Text Stream nach irgendwelchen nicht druckbaren Sonderzeichen untersuchen, benötigt man die Ausgabe oft als Hex-Anzeige. Eine kleine Routine, die uns den Hex-Wert des Streams im Debug Fenster anzeigt ist zwar schnell geschrieben, doch wie wäre es mit einem Visualizer der uns die Hex-Werte direkt beim Debuggen anzeigt.

HexDump Visualizer erledigt das für uns, denn genau dafür habe ich ihn geschrieben.
hexdump

Weiterlesen...

February 24

VB-Power.net im neuen Design

Windows Live Spaces Tags: , , , , , ,

Das ich in den letzten Wochen hier nichts gebloggt habe liegt daran, dass ich meine alte VB-Power.net Webseite komplett überarbeitet habe. Die alte Seite gibt es jetzt nicht mehr, stattdessen habe ich die neue Seite mit dem Website Baker CMS entwickelt. Das Website Baker CMS ist schon ein tolles Teil, womit man auch ohne viel PHP Kenntnisse sehr schöne Websites erstellen kann.

Aber seht doch selber und schaut euch das neue VB-Power.net an.

Viel Spaß auf meiner Webseite...

16 zusätzliche Spaltentypen für das DataGridView

Windows Live Spaces Tags: , , , , ,

Das DataGridView aus dem DotNet-FrameWork ist schon ein recht flexibles Teil, jedoch ist es mit seinen Standard Columns etwas mager ausgestattet. Von daher haben wir uns es zur Aufgabe gemacht, etwas Pepp in das Control zu bringen.

Dazu haben wir eine Extender Dll für das DataGridView entwickelt, die (bis jetzt) zusätzlich zu den vorhandenen Spalten, 16 weitere Spaltentypen dem DataGridView hinzufügt. Die Dll braucht lediglich als Verweis ins Projekt aufgenommen werden und schon stehen ohne eine einzige Zeile Code, die neuen Spalten automatisch zur Verfügung und können komplett im Designer konfiguriert werden.

Folgende Spaltentypen stellt die Dll dem DataGridView zur Verfügung:

Image (Icon) Spalten

  • ImageComboBoxColumn
  • ImageLabelColumn
  • ImageLinkColumn
  • ImageTextBoxColumn

Numerische Spalten

  • CurrencyColumn
  • NumericColumn

CustomControl Spalten

  • CalendarColumn
  • DomainUpDownColumn
  • FileTextBoxColumn
  • MaskedEditColumn
  • NumericUpDownColumn
  • ProgressBarColumn
  • TableComboBoxColumn

MemoControl Spalten

  • MemoComboBoxColumn
  • MemoEditColumn
  • RTFComboBoxColumn

Weitere Informationen, ScreenShots und Downloads zum DataGridView Control Extender gibt es hier...

NetRadioPlayer - Streaming Internet Radio Player

Windows Live Spaces Tags: , , ,

Hallo Spacer...

Ich habe einen kleinen Player für Web-Radio Streams gebastelt

Ursprünglich war der Player nur mal für mich gedacht, da mir die freien Player wie bspw. WinAmp viel zu überladen sind und auch ewig "nach Hause" telefonieren... Aber der Player ist doch so nett geworden, dass ich ihn zur Verfügung stelle.

netradioplayer

Der Player spielt Web-Radio Streams ab. ShoutCast und IceCast Playlisten (m3u, pls) werden nicht unterstützt. Aber wer weiß - vielleicht kommt das ja noch. Ich habe schon einige Streams mit dazu gepakt. Eine gute Anlauf-Adresse für Streams ist Surfmusik.de http://www.surfmusik.de/

Entwickelt wurde der Player mit VB2008. Es wird also das Framework 3.5 benötigt !!!

Zum Download des Players geht es hier lang...

Viel Spaß damit...

December 06

Asynchrone FileScan API-Klasse

Windows Live Spaces Tags: , , , , ,

Die nachfolgende VB.Net Klasse ermittelt aufgrund des angegebenen SearchPattern alle Dateien eines Ordners und bei Bedarf auch deren Unter-Ordner. Dabei wird eine gefundene Übereinstimmung (Treffer) über ein Event direkt an die aufrufende Form zurückgegeben. Die Klasse wird als Thread mit dem BackgroundWorker ausgeführt, so dass die Anwendung nicht einfriert. Der BackgroundWorker bietet weiterhin den Vorteil, dass wir uns nicht um threadübergreifende Zugriffe auf die GUI kümmern müssen – wir also nicht mit Invoke arbeiten müssen, so dass auch der weniger erfahrene VB-Programmierer problemlos mit der Klasse arbeiten kann.

Durch die Verwendung der „FindFirstFile“ und „FindNextFile“ APIs erhalten wir den Vorteil, dass ein Treffer direkt zurückgegeben werden kann. Dies ist mit den DotNet Bordmitteln so nicht möglich, da uns System.IO.Directory.GetFiles erst ein String-Array zurückliefert, wenn die Suche abgeschlossen ist – was bei tiefen Verzeichnisbäumen schon mal ein bisschen dauern kann.

 

Da der Quellcode etwas umfangreicher ist, stelle ich hier das gesamte VB2008 Projekt zum Download bereit.

November 30

Der Windows Live Writer und die Darstellung von Sourcecode

Windows Live Spaces Tags: , , , ,

Das Einfügen von Sourcecode im Live Blog mit dem Windows Live Writer ist schon eine aufwendige Sache, wenn die Formatierung und Syntax Highligthing beibehalten bleiben soll Sad  Nur durch Zufall bin ich in irgendeinem Blog aus einen Hinweis gestoßen, dass es Plugins für den Live Writer gibt. Und tatsächlich bin ich auch fündig geworden (die Suchmaschinen werfen mehrere Treffer raus...). Leo Vildosola stellt in seinem Blog ein Plugin zur Verfügung, mit dem man das kann. Das Plugin unterstützt mehrere Sprachen, aber schaut es euch selber an.

Code Snippet plugin for Windows Live Writer

Viel Spaß damit...

Direkter Download einer Textdatei

Windows Live Spaces Tags: , , , ,

Mit nachfolgender VB.Net Klasse lässt sich der Inhalt einer Datei, die auf einem Webserver gespeichert ist, auslesen und als String zurückgeben, ohne dass die Datei vorher lokal zwischengespeichert werden muss.

Imports System.Net
Imports System.Text
 
Public Class clsDownload
 
   ''' <summary>
   ''' Inhalt einer Internetdatei auslesen ohne diese lokal zwischenzuspeichern
   ''' </summary>
   ''' <param name="sUrl">URL der Datei auf dem Webserver</param>
   ''' <returns>Inhalt der Datei als String</returns>
   Public Shared Function TextDownload(ByVal sUrl As String) As String
      Dim dWeb As New WebClient
 
      With dWeb
         .Encoding = Encoding.Default
         .CachePolicy = New Cache.RequestCachePolicy( _
           Cache.RequestCacheLevel.NoCacheNoStore)
      End With
 
      Try
         Return dWeb.DownloadString(sUrl)
      Catch ex As Exception
         Return "[Error]"
      End Try
   End Function
 
End Class
September 12

Zufällige Seriennummer

Windows Live Spaces Tags: , , ,

Die nachfolgende VB.Net Klasse erzeugt eine zufällige Seriennummer. Die Rückgabe erfolgt dabei über die überschriebene .ToString Methode. Im Konstruktor der Klasse kann festgelegt werden, wieviele Blöcke und mit welcher Blocklänge eine Seriennummer erzeugt werden soll.

Source als Textdatei...

Imports System.Text
 
''' <summary>
''' SerialNumber Generator Class
''' </summary>
''' <remarks>
''' Die Klasse erzeugt eine zufällige Seriennummer. Die Rückgabe erfolgt
''' über die .ToString Methode. Im Konstruktor wird festgelegt, wieviele
''' Blöcke und mit welcher Blocklänge die Seriennummer erzeugt wird.
''' </remarks>
Public Class SerialNumber
 
   ' Member Variablen
   Private m_BlockLength As Int16 = 6
   Private m_BlockCount As Int16 = 2
   Private m_Delimiter As String = "-"
 
   ''' <summary>
   ''' Initialisiert die Klasse
   ''' </summary>
   Public Sub New()
   End Sub
 
   ''' <summary>
   ''' Initialisiert die Klasse
   ''' </summary>
   ''' <param name="BlockLength">Legt die Länge eines Blocks fest.</param>
   ''' <param name="BlockCount">Legt die Anzahl Blöcke in der Seriennummer fest.</param>
   Public Sub New(ByVal BlockLength As Int16, ByVal BlockCount As Int16)
      m_BlockLength = BlockLength
      m_BlockCount = BlockCount
   End Sub
 
   ''' <summary>
   ''' Initialisiert die Klasse
   ''' </summary>
   ''' <param name="BlockLength">Legt die Länge eines Blocks fest.</param>
   ''' <param name="BlockCount">Legt die Anzahl Blöcke in der Seriennummer fest.</param>
   ''' <param name="Delimiter">Legt den Trenner zwischen den Blöcken fest.</param>
   Public Sub New(ByVal BlockLength As Int16, ByVal BlockCount As Int16, ByVal Delimiter As String)
      m_BlockLength = BlockLength
      m_BlockCount = BlockCount
      m_Delimiter = Delimiter
   End Sub
 
   Private Function Generate(ByVal BlockLength As Int16, _
      ByVal BlockCount As Int16, ByVal Delimiter As String) As String
 
      Dim si As New StringBuilder
      Dim sb As New StringBuilder
      For n = 0 To BlockCount - 1
         Try
            si.Append(Guid.NewGuid.ToString().Replace("-", "").ToUpper)
            sb.Append(si.ToString.Substring(n * BlockLength, BlockLength) & Delimiter)
         Catch ex As Exception
            Throw New Exception("Fehler beim Erstellen der Seriennummer.")
         End Try
      Next
 
      Return sb.ToString.Substring(0, sb.Length - Delimiter.Length)
   End Function
 
   ''' <summary>
   ''' Gibt die erzeugte Seriennummer zurück.
   ''' </summary>
   Public Overrides Function ToString() As String
      Return Me.Generate(m_BlockLength, m_BlockCount, m_Delimiter)
   End Function
 
End Class

 

September 10

Late-Binding Wrapper für den Windows Media Player

Windows Live Spaces Tags: , , , ,

Das nachfolgende Klassenmodul für VB.Net kapselt den Windows Media Player via Late Binding. Dadurch entsteht keine Abhängigkeit zu einer speziellen Version des WMPs. Auch wird nicht mit Interop-Dlls gedealt :-)

Die Klasse kann dafür genutzt werden, um Musik Dateien (MP3 Files) oder Live Streams wie bspw. Web-Radio Sreams abzuspielen.

Source als Textdatei...

 

''' <summary>

''' Aufzählung der Player Rückgabewerte

''' </summary>

Public Enum PlayState

   Undefined = 0

   Stopped = 1

   Paused = 2

   Playing = 3

   ScanForward = 4

   ScanReverse = 5

   Buffering = 6

   Waiting = 7

   MediaEmbed = 8

   Busy = 9

   Ready = 10

   Reconnecting = 11

   Last = 12

End Enum

 

 

''' <summary>

''' WMPNetWrapper Klassenmodul

''' ==========================

''' Das Klassenmodul erzeugt eine Instanz des Windows Media Players.

''' Die Instanz wird über "Late Binding" erzeugt, so dass keine Abhängigkeit

''' zu einer speziellen Version des WMPs besteht. Das Klassenmodul kann

''' dazu genutzt werden, um Musik Dateien oder Streams aus dem Internet

''' abzuspielen - z.B. Web-Radio Streams.

''' </summary>

Public Class WMPNetWrapper

   Private m_Player As Object

   Private isInitialized As Boolean = False

   Private m_PlayerStatus As Integer = PlayState.Undefined

   Private m_Timer As New Timer With {.Interval = 250, .Enabled = False}

 

   Public Event ErrorOccured(ByVal sender As WMPNetWrapper, ByVal e As Exception)

   Public Event CurrentStatus(ByVal sender As WMPNetWrapper, ByVal Msg As String)

   Public Event StatusChange(ByVal sender As WMPNetWrapper, ByVal e As PlayState)

 

   Public Sub New()

      Me.InitializeComponent()

   End Sub

 

   ''' <summary>

   ''' Initialisiert die Klasse und erstellt ein "Late Binding"

   ''' Objekt zur Laufzeit.

   ''' </summary>

   Private Sub InitializeComponent()

      Dim t As Type = Type.GetTypeFromProgID("WMPlayer.OCX")

      If t IsNot Nothing Then

         Try

            m_Player = CreateObject("WMPlayer.OCX")

            m_Player.settings.autoStart = True

            m_Timer.Enabled = True

            AddHandler m_Timer.Tick, AddressOf TimerTick

            isInitialized = True

         Catch ex As Exception

            isInitialized = False

            Throw New Exception(ex.Message)

         End Try

      End If

   End Sub

 

   ''' <summary>

   ''' Legt fest, ob beim Aufruf der Open Methode der Stream sofort abgespielt

   ''' werden soll. Bei False muss dann nach dem Open Aufruf noch die Play

   ''' Methode ausgeführt werden.

   ''' </summary>

   Public Property AutoStart() As Boolean

      Get

         Return m_Player.settings.autostart

      End Get

      Set(ByVal value As Boolean)

         Try

            m_Player.settings.autostart = value

         Catch ex As Exception

            m_PlayerStatus = PlayState.Undefined

            RaiseEvent ErrorOccured(Me, ex)

         End Try

      End Set

   End Property

 

   ''' <summary>

   ''' Regelt die Lautsprecher Balance, oder liest diese aus.

   ''' </summary>

   ''' <value>Ein gültiger Wert zwischen 0 - 100</value>

   Public Property Balance() As Integer

      Get

         Return m_Player.settings.balance

      End Get

      Set(ByVal value As Integer)

         Try

            m_Player.settings.balance = value

         Catch ex As Exception

            m_PlayerStatus = PlayState.Undefined

            RaiseEvent ErrorOccured(Me, ex)

         End Try

      End Set

   End Property

 

   ''' <summary>

   ''' Gibt die Spieldauer des aktuellen Streams zurück.

   ''' </summary>

   Public ReadOnly Property Duration() As Double

      Get

         Return m_Player.currentMedia.duration

      End Get

   End Property

 

   ''' <summary>

   ''' Schaltet die Lautsprecher ein oder aus.

   ''' </summary>

   ''' <remarks>Die aktuelle Wiedergabe wird dabei nicht unterbrochen.</remarks>

   Public Property Mute() As Boolean

      Get

         Return m_Player.settings.mute

      End Get

      Set(ByVal value As Boolean)

         Try

            m_Player.settings.mute = value

         Catch ex As Exception

            m_PlayerStatus = PlayState.Undefined

            RaiseEvent ErrorOccured(Me, ex)

         End Try

      End Set

   End Property

 

   ''' <summary>

   ''' Öffnet einen Mediastream zur Wiedergabe.

   ''' </summary>

   ''' <param name="MediaStream">Einen gültigen Pfad oder URL zum Mediastream.</param>

   ''' <remarks>Der Media Player unterstützt ebenfalls Web-Radio Streams.

   ''' Hierbei können nur direkte URLs angegeben werden. SHOUTcast und ICEcast

   ''' Playlists werden nicht unterstützt. Diese müssen separat geparst werden,

   ''' um die Kanäle zu Ermitteln. Die ermittelten Kanäle können dann zur Wiedergabe

   ''' geöffnet werden.</remarks>

   Public Sub Open(ByVal MediaStream As String)

      If Not isInitialized Then Exit Sub

      Try

         Me.Stop()

         m_Player.url = MediaStream

      Catch ex As Exception

         m_PlayerStatus = PlayState.Undefined

         RaiseEvent ErrorOccured(Me, ex)

      End Try

   End Sub

 

   ''' <summary>

   ''' Unterbricht die aktuelle Wiedergabe.

   ''' </summary>

   Public Sub Pause()

      Try

         If m_PlayerStatus <> PlayState.Paused Then

            m_Player.controls.pause()

         End If

      Catch ex As Exception

         m_PlayerStatus = PlayState.Undefined

         RaiseEvent ErrorOccured(Me, ex)

      End Try

   End Sub

 

   ''' <summary>

   ''' Spielt den aktuell geöffneten Stream ab.

   ''' </summary>

   Public Sub Play()

      Try

         If m_PlayerStatus <> PlayState.Playing Then

            m_Player.controls.play()

         End If

      Catch ex As Exception

         m_PlayerStatus = PlayState.Undefined

         RaiseEvent ErrorOccured(Me, ex)

      End Try

   End Sub

 

   ''' <summary>

   ''' Gibt den Player-Status als PlayState Enum zurück.

   ''' </summary>

   Public ReadOnly Property PlayerStatus() As PlayState

      Get

         Return m_PlayerStatus

      End Get

   End Property

 

   ''' <summary>

   ''' Positioniert den aktuellen Wiedergabepointer, oder liest diesen aus.

   ''' </summary>

   ''' <value>Ein gültiger Wert zwischen 0 - Duration (Spieldauer)</value>

   ''' <remarks>Siehe auch die Eigenschaft "Duration"</remarks>

   Public Property Position() As Double

      Get

         Return m_Player.controls.currentPosition

      End Get

      Set(ByVal value As Double)

         Try

            m_Player.controls.currentPosition = value

         Catch ex As Exception

            m_PlayerStatus = PlayState.Undefined

            RaiseEvent ErrorOccured(Me, ex)

         End Try

      End Set

   End Property

 

   ''' <summary>

   ''' Gibt den Player-Status als Text zurück.

   ''' </summary>

   Public ReadOnly Property Status() As String

      Get

         Return m_Player.status

      End Get

   End Property

 

   ''' <summary>

   ''' Stoppt die Wiedergabe des aktuellen Streams.

   ''' </summary>

   Public Sub [Stop]()

      Try

         If m_PlayerStatus <> PlayState.Stopped Then

            m_Player.controls.stop()

         End If

      Catch ex As Exception

         m_PlayerStatus = PlayState.Undefined

         RaiseEvent ErrorOccured(Me, ex)

      End Try

   End Sub

 

   ''' <summary>

   ''' Fährt mit der unterbrochenen Wiedergabe fort.

   ''' </summary>

   Public Sub [Resume]()

      Try

         If m_PlayerStatus = PlayState.Paused Then

            Me.Play()

         End If

      Catch ex As Exception

         m_PlayerStatus = PlayState.Undefined

         RaiseEvent ErrorOccured(Me, ex)

      End Try

   End Sub

 

   ''' <summary>

   ''' Setzt den Lautstärkepegel, oder liest diesen aus.

   ''' </summary>

   ''' <value>Ein gültiger Wert zwischen 0 - 100</value>

   Public Property Volume() As Integer

      Get

         Return m_Player.settings.volume

      End Get

      Set(ByVal value As Integer)

         Try

            m_Player.settings.volume = value

         Catch ex As Exception

            m_PlayerStatus = PlayState.Undefined

            RaiseEvent ErrorOccured(Me, ex)

         End Try

      End Set

   End Property

 

   ''' <summary>

   ''' Delegate TimerTick

   ''' </summary>

   ''' <remarks>Der Timer feuert den Status als Event in die aufrufende Form zurück

   ''' </remarks>

   Private Sub TimerTick(ByVal sender As Object, ByVal e As System.EventArgs)

      Static LastState As PlayState = -1

      Static CurrentState As PlayState = -1

 

      CurrentState = m_Player.playstate

      If LastState <> CurrentState Then

         m_PlayerStatus = CurrentState

         LastState = CurrentState

         RaiseEvent StatusChange(Me, m_PlayerStatus)

      End If

 

      RaiseEvent CurrentStatus(Me, Me.Status)

   End Sub

End Class

August 17

PictureBox mit Proxy-Server Unterstützung

Windows Live Spaces Tags: , , , , ,

In vielen Mittelständigen- und Großunternehmen wird zur Kommunikation mit dem Web ein Proxy-Server verwendet, über den die Mitarbeiter im Internet surfen. Dabei muss sich der Mitarbeiter an den Proxy-Server durch Benutzername und Passwort authentifizieren. Die Anwendung (wie bspw. der Internet Explorer) muss dabei in der Lage sein, mit einem solchen Proxy-Server kommunizieren zu können.

Wenn Sie eine WebClient Anwendung programmiert haben, in dem das Webbrowser Steuerelement verwendet wird, ist das noch kein Problem. Das Webbrowser Steuerelement erkennt automatisch, aufgrund der Systemeinstellungen, den Proxy-Server und fordert eine Authentifizierung vom Benutzer an.

Verwenden Sie in Ihrer Anwendung eine PictureBox um z.B. Grafiken, Diagramme oder gar Werbebanner aus dem Web abzurufen, so erhalten Sie die Fehlermeldung „Proxy authentification requiered“ vom Proxy-Server zurück. Die PictureBox ist schlichtweg nicht in der Lage, die Grafiken über einen Proxy-Server abzurufen, da sie diese Möglichkeit nicht vorsieht.

Die nachfolgende Komponente „ProxyPictureBox“ schafft Abhilfe. Sie erbt von PictureBox und überschreibt die Eigenschaft „ImageLocation“, wobei weiterhin auch die ursprüngliche Verwendung, also ohne Proxy-Server, möglich ist. Das Abrufen der Daten über den Proxy-Server erfolgt dabei asynchron, so dass die Auslastung Ihrer Anwendung nicht beeinflusst wird.

Hinweis: Wenn Sie die „ProxyPictureBox“ verwenden, müssen Sie erst die Eigenschaften für den Proxy-Server vornehmen, bevor Sie die Eigenschaft „ImageLocation“ setzen.


Source als Textdatei...

 

Imports System.Net

Imports System.Text

Imports System.ComponentModel

 

''' <summary>

''' PictureBox mit Proxy Server Unterstützung

''' </summary>

''' <remarks>

''' Die Komponente erbt von PictureBox und erweitert diese umd die Möglichkeit,

''' den Download eines Images aus dem Web über einen Proxy Server zu realisieren.

''' Der Download des Images erfolgt dabei asynchron.

''' </remarks>

Public Class ProxyPictureBox

   Inherits PictureBox

 

   Private m_UseProxy As Boolean = False

   Private m_UseProxyIESettings As Boolean = False

   Private m_ProxyServer As String

   Private m_ProxyPort As Integer = 8080

   Private m_ProxyUserName As String

   Private m_ProxyPassword As String

   Private m_ImageLocation As String

 

   Private isInitCompleted As Boolean = False

   Private InitTimer As New Windows.Forms.Timer

 

   Public Event ProxyError(ByVal sender As Object, ByVal ex As Exception)

   Public Event ProxyDownloadCompleted(ByVal sender As Object, ByVal e As EventArgs)

 

   Public Sub New()

      AddHandler InitTimer.Tick, AddressOf InitTimerTick

      InitTimer.Interval = 250

      InitTimer.Enabled = True

   End Sub

 

   Private Sub InitTimerTick(ByVal sender As Object, ByVal e As System.EventArgs)

      isInitCompleted = True

      InitTimer.Enabled = False

      Me.ImageLocation = m_ImageLocation

   End Sub

 

   ''' <summary>

   ''' Legt den Web-Speicherort fest, aus dem das Image geladen wird.

   ''' </summary>

   ''' <remarks>

   ''' Die überladene Eigenschaft unterstützt den Download des Images über

   ''' einen Proxy Server. Legen Sie zuerst alle Proxy Eigenschaften fest,

   ''' bevor Sie dieser Eigenschaft einen Wert zuweisen. Belassen Sie die

   ''' Eigenschaft "UseProxy" auf False, so wird das Image ohne Proxy

   ''' angezeigt. (Default)

   ''' </remarks>

   Public Overloads Property ImageLocation() As String

      Get

         Return m_ImageLocation

      End Get

      Set(ByVal value As String)

         m_ImageLocation = value

         If String.IsNullOrEmpty(m_ImageLocation) Then

            Exit Property

         Else

            If isInitCompleted Then

               If m_UseProxy Then

                  Dim dWeb As New WebClient

                  AddHandler dWeb.DownloadDataCompleted, AddressOf dWebDownloadDataCompleted

 

                  Try

                     If m_UseProxyIESettings Then

                        dWeb.Proxy = Net.WebRequest.GetSystemWebProxy

                     Else

                        dWeb.Proxy = New WebProxy(m_ProxyServer, m_ProxyPort)

                     End If

                     dWeb.Proxy.Credentials = New NetworkCredential(m_ProxyUserName, m_ProxyPassword)

                     dWeb.Encoding = Encoding.Default

                     dWeb.CachePolicy = New System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore)

                     dWeb.DownloadDataAsync(New Uri(m_ImageLocation))

                  Catch ex As Exception

                     RaiseEvent ProxyError(Me, ex)

                  Finally

                     dWeb.Dispose()

                  End Try

               Else

                  MyBase.ImageLocation = m_ImageLocation

               End If

            End If

         End If

      End Set

   End Property

 

   ''' <summary>

   ''' Delegated Sub, wird aufgerufen wenn der Download über den Proxy Server beendet wurde

   ''' </summary>

   Private Sub dWebDownloadDataCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadDataCompletedEventArgs)

      Try

         If Not e.Cancelled Then

            Dim MS As New IO.MemoryStream(e.Result)

            MyBase.Image = Image.FromStream(MS)

            RaiseEvent ProxyDownloadCompleted(Me, New EventArgs)

         Else

            RaiseEvent ProxyError(Me, New Exception("Download cancelled"))

         End If

      Catch ex As Exception

         RaiseEvent ProxyError(Me, ex)

      End Try

   End Sub

 

   ''' <summary>

   ''' Bestimmt, ob ein Proxy Server verwendet werden soll.

   ''' </summary>

   <Category("Proxy"), Bindable(True), _

   DefaultValue(GetType(System.Boolean), "False"), _

   Description("Bestimmt, ob ein Proxy Server verwendet werden soll.")> _

   Public Property UseProxy() As Boolean

      Get

         Return m_UseProxy

      End Get

      Set(ByVal value As Boolean)

         m_UseProxy = value

      End Set

   End Property

 

   ''' <summary>

   ''' Bestimmt, ob die Proxy Einstellungen des Internet Explorers verwendet werden sollen.

   ''' </summary>

   <Category("Proxy"), Bindable(True), _

   DefaultValue(GetType(System.Boolean), "False"), _

   Description("Bestimmt, ob die Proxy Einstellungen des Internet Explorers verwendet werden sollen.")> _

   Public Property UseProxyIESettings() As Boolean

      Get

         Return m_UseProxyIESettings

      End Get

      Set(ByVal value As Boolean)

         m_UseProxyIESettings = value

      End Set

   End Property

 

   ''' <summary>

   ''' Legt die Adresse für den Proxy Server fest.

   ''' </summary>

   <Category("Proxy"), Bindable(True), _

   Description("Legt die Adresse für den Proxy Server fest.")> _

   Public Property ProxyServer() As String

      Get

         Return m_ProxyServer

      End Get

      Set(ByVal value As String)

         m_ProxyServer = value

      End Set

   End Property

 

   ''' <summary>

   ''' Legt den Port des Proxy Servers fest.

   ''' </summary>

   <Category("Proxy"), Bindable(True), _

   DefaultValue(GetType(System.Int32), "8080"), _

   Description("Legt den Port des Proxy Servers fest.")> _

   Public Property ProxyPort() As Integer

      Get

         Return m_ProxyPort

      End Get

      Set(ByVal value As Integer)

         m_ProxyPort = value

      End Set

   End Property

 

   ''' <summary>

   ''' Legt den Benutzernamen des Proxy Servers fest.

   ''' </summary>

   <Category("Proxy"), Bindable(True), _

   Description("Legt den Benutzernamen des Proxy Servers fest.")> _

   Public Property ProxyUserName() As String

      Get

         Return m_ProxyUserName

      End Get

      Set(ByVal value As String)

         m_ProxyUserName = value

      End Set

   End Property

 

   ''' <summary>

   ''' Legt das Passwort des Proxy Servers fest.

   ''' </summary>

   <Category("Proxy"), Bindable(True), _

   PasswordPropertyText(True), _

   Description("Legt das Passwort des Proxy Servers fest.")> _

   Public Property ProxyPassword() As String

      Get

         Return m_ProxyPassword

      End Get

      Set(ByVal value As String)

         m_ProxyPassword = value

      End Set

   End Property

 

End Class