Exemplarische Vorgehensweise: Durchführen eines Updates für eine Visual Basic 6.0-Anwendung auf die aktuelle Visual Basic-Version

Aktualisiert: November 2007

In dieser exemplarischen Vorgehensweise wird die Aktualisierung einer beispielhaften Visual Basic-Grafikanwendung auf Visual Basic 2008 durchgeführt. Neben dem Aktualisierungsvorgang selbst werden in dieser exemplarischen Vorgehensweise auch die Unterschiede zwischen den Grafikarchitekturen von Visual Basic 6.0 und Visual Basic 2008 veranschaulicht. Dieses Thema behandelt außerdem einführend, wie Sie mit Fragen der Architektur in der Anwendung umgehen.

Bei der Beispielanwendung handelt es sich um ein einfaches Formular, das zwei Schaltflächen, ein Bildfeld, einen Zeitgeber sowie ein ausgeblendetes Image-Steuerelement enthält. Diese Anwendung ist zwar nicht typisch für die meisten der von Ihnen zu aktualisierenden Anwendungen. Sie bietet jedoch eine Reihe von ernsthaften Herausforderungen, mit denen Sie beim Aktualisieren eigener Anwendungen konfrontiert werden können.

Hinweis:

Für diese exemplarische Vorgehensweise muss Visual Basic 6.0 auf dem Entwicklungscomputer installiert sein.

So erstellen Sie die Visual Basic 6.0-Anwendung

  1. Öffnen Sie Visual Basic 6.0. Klicken Sie im Menü Datei auf Neues Projekt.

  2. Im Dialogfeld Neues Projekt wählen Sie Standard-EXE aus, und klicken Sie dann auf OK.

  3. Fügen Sie dem Formular ein PictureBox-Steuerelement hinzu, und passen Sie die Größe so an, dass am unteren Rand noch Platz ist, das Formular ansonsten aber gefüllt ist.

  4. Legen Sie die AutoRedraw-Eigenschaft auf True, die DrawStyle-Eigenschaft auf 0-Solid und die FillStyle-Eigenschaft auf 0-Solid fest.

  5. Fügen Sie unter dem PictureBox-Steuerelement zwei CommandButton-Steuerelemente hinzu.

  6. Wählen Sie den ersten CommandButton aus, und legen Sie die Name-Eigenschaft auf ClearPictureBox und die Caption-Eigenschaft auf Clear fest.

  7. Wählen Sie den zweiten CommandButton aus, und legen Sie die Name-Eigenschaft auf ShowImage und die Caption-Eigenschaft auf Show Image fest.

  8. Fügen Sie dem Formular ein Image-Steuerelement hinzu, und legen Sie die Name-Eigenschaft auf sourceImage und die Visible-Eigenschaft auf False fest.

  9. Legen Sie die Picture-Eigenschaft des Image-Steuerelements auf ein beliebiges Bitmapbild fest. Sie können eines der Bilder im Ordner Eigene Bilder verwenden.

  10. Fügen Sie dem Formular ein Timer-Steuerelement hinzu. Legen Sie die Enabled-Eigenschaft auf False und die Interval-Eigenschaft auf 25 fest.

  11. Doppelklicken Sie auf das Formular, um den Code-Editor zu öffnen, und geben Sie folgenden Code ein.

    Option Explicit
    Private LeftPos As Double
    
    Private Sub ClearPictureBox_Click()
        Picture1.Cls
    End Sub
    
    Private Sub ShowImage_Click()
        LeftPos = 1
        Me.Timer1.Enabled = True
    End Sub
    
    Private Sub Timer1_Timer()
    
        If LeftPos <= 0 Then
            Me.Timer1.Enabled = False
            Picture1.Print "Visual Basic ROCKS!"
        Else
            LeftPos = LeftPos - 0.01
            Picture1.Cls
            Picture1.PaintPicture sourceImage, LeftPos * _
    Picture1.Width, 0
        End If
    End Sub
    
  12. Drücken Sie F5, um die Anwendung auszuführen. Klicken Sie auf die Schaltflächen, und beobachten Sie das Verhalten. Gehen Sie den Code Schritt für Schritt durch, um so die Funktionsweise nachzuvollziehen.

  13. Klicken Sie im Menü Datei auf Projekt speichern unter.

  14. Im Dialogfeld Datei speichern unter können Sie das Formular als PicForm.frm und das Projekt als Drawing.vbp speichern.

So führen Sie den Aktualisierungs-Assistenten aus

  1. Öffnen Sie Visual Basic 2008. Klicken Sie im Menü Datei auf Projekt öffnen.

  2. Suchen Sie im Dialogfeld Projekt öffnen die Datei Drawing.vbp, und öffnen Sie sie.

    Daraufhin wird der Visual Basic-Aktualisierungs-Assistent gestartet. Die erste Seite des Assistenten enthält eine Beschreibung der von ihm ausgeführten Aktionen.

  3. Klicken Sie auf Next, um zur nächsten Seite des Assistenten zu wechseln. Auf dieser Seite werden Optionen für die Aktualisierung angezeigt. In diesem Fall sind jedoch keine zutreffenden Optionen verfügbar.

  4. Klicken Sie auf Next, um zur dritten Seite des Assistenten zu wechseln. Klicken Sie auf Next, um den Standardspeicherort für das neue Projekt zu übernehmen, oder geben Sie einen anderen Speicherort ein. Als Standardspeicherort wird unmittelbar unter dem Ordner des Visual Basic 6.0-Projekts ein neuer Ordner vorgegeben.

    Wenn Sie zum Erstellen eines neuen Ordners aufgefordert werden, klicken Sie auf Ja.

  5. Klicken Sie auf der vierten Seite des Assistenten auf Next, um den Aktualisierungsvorgang zu starten.

    Nach Abschluss des Updatevorgangs wird der Assistent geschlossen, und das neue Projekt wird im Projektmappen-Explorer angezeigt.

So zeigen Sie die Aktualisierungsergebnisse an

  1. Im Projektmappen-Explorer wählen Sie _UpgradeReport.htm aus, und doppelklicken Sie darauf, um den Updatebericht zu öffnen.

    Beachten Sie, dass im Bericht keine auftretenden globalen Probleme aufgeführt werden. Für PicForm.vb werden sechs Fehler, aber keine Warnungen angezeigt.

    Hinweis:

    Wenn Warnungen vorhanden sind, werden diese auch im Fenster Aufgabenliste als UPGRADE_WARNING-Elemente angezeigt. Warnungen werden für Code ausgegeben, der zu geringfügigen Abweichungen im Laufzeitverhalten der Anwendung führen kann. Wenn Sie im Fenster Aufgabenliste auf einen UPGRADE_WARNING-Eintrag doppelklicken, gelangen Sie direkt zu dem Codeabschnitt, der ggf. geändert werden muss.

  2. Erweitern Sie den Abschnitt PicForm.vb, indem Sie in der Spalte Neuer Dateiname auf das Pluszeichen klicken. Dadurch wird eine ausführliche Liste von Aktualisierungsproblemen für das Formular angezeigt.

    Beachten Sie, dass diese Probleme an drei verschiedenen Stellen auftreten können, nämlich bei der ClearPictureBox_Click-Prozedur, der Timer1_Timer-Prozedur und beim Formularlayout. Sie können auf die Verknüpfung Beschreibung klicken, um ein Hilfethema mit einer Erklärung zu den einzelnen Problemen anzeigen zu lassen. Für die Layoutprobleme müssen in diesem Fall keine Aktionen ausgeführt werden. Wenn Sie in der Hilfe nachsehen, erfahren Sie, dass es sich dabei um zwei Eigenschaften des PictureBox-Steuerelements in Visual Basic 6.0 handelt, die über keine entsprechenden Eigenschaften in Visual Basic 2008 verfügen.

So beheben Sie den Fehler in "ClearPictureBox_Click"

  1. Wählen Sie im Projektmappen-Explorer die Option PicForm.vb aus. Klicken Sie im Menü Ansicht auf Code.

  2. Wählen Sie im Code-Editor die ClearPictureBox_Click-Prozedur aus.

    Tipp:

    Für die Prozedur ist ein UPGRADE_ISSUE-Kommentar verfügbar. Wenn Sie einen Bildlauf bis zum Ende des Kommentars ausführen, können Sie auf die Verknüpfung mit dem zugehörigen Hilfethema klicken. Für alle Probleme (mit Ausnahme von Layoutproblemen) werden während des Updates Codekommentare hinzugefügt. Dazu zählen auch UPGRADE_NOTE-Kommentare, die beschreiben, was beim Update geschieht. Diese werden jedoch nicht im Updatebericht angezeigt.

  3. Fügen Sie der ClearPictureBox_Click-Prozedur folgenden Code hinzu:

    Dim g As Graphics = Picture1.CreateGraphics()
    g.Clear(Picture1.BackColor)
    g.Dispose()
    

    Der einzige Fehler in der ursprünglichen Prozedur ist der Aufruf der Picture1.Cls()-Methode. In Visual Basic 2008 kann nicht mithilfe von Methoden direkt auf die Zeichnungsoberfläche von systeminternen Steuerelementen zugegriffen werden, wie dies in Visual Basic 6.0 möglich ist. Alle Grafikvorgänge werden mit einem speziellen Objekt vom Typ Graphics behandelt. Sie können auf die Zeichenoberfläche eines Steuerelements zugreifen, indem Sie die CreateGraphics()-Methode aufrufen, um eine Instanz eines Graphics-Objekts abzurufen.

  4. Löschen Sie die ursprüngliche Zeile, Picture1.Cls(), oder kommentieren Sie sie aus.

So beheben Sie die Fehler in "Timer1_Timer"

  1. Wählen Sie im Code-Editor die Timer1_Tick-Prozedur aus.

    Hinweis:

    Für das Timer-Ereignis des Timer-Steuerelements von Visual Basic 6.0 erfolgt eine Aktualisierung auf das Tick-Ereignis der Timer-Komponente von Visual Basic 2008. Im Aktualisierungsbericht wird der alte Ereignisname angezeigt. Der Code-Editor verwendet den neuen Ereignisnamen.

  2. Fügen Sie am Anfang der Funktion folgenden Code hinzu:

    Dim g As Graphics = Picture1.CreateGraphics()
    

    Wie bei der vorhergehenden Prozedur beginnt die Auflistung der Fehler auch hier mit dem Fehlen eines Graphics-Objekts.

  3. Suchen Sie das erste UPGRADE_ISSUE, die Picture1.Print-Methode. Fügen Sie folgenden Code hinzu:

    g.DrawString("VB .NET ROCKS!", Me.Font, New SolidBrush( _
      Color.Yellow), 0, 0)
    

    Die DrawString-Methode des Graphics-Objekts ersetzt die Print-Methode von Visual Basic 6.0. Wo die Print-Methode ein einzelnes Text-Argument angenommen hat, nimmt nun DrawString Argumente an, die Font, ein Brush-Objekt, das wiederum ein Color-Objekt angibt sowie die Startkoordinaten zum Zeichnen des Texts angeben.

  4. Löschen Sie die ursprüngliche Zeile, Picture1.Print("Visual Basic ROCKS!"), oder kommentieren Sie sie aus.

  5. Suchen Sie das nächste UPGRADE_ISSUE mit der Bezeichnung Picture1.Cls(). Ersetzen Sie den Code durch Folgendes:

    g.Clear(Picture1.BackColor)
    
  6. Suchen Sie das letzte UPGRADE_ISSUE mit der Bezeichnung Picture1.PaintPicture. Fügen Sie folgenden Code hinzu:

    g.DrawImage(sourceImage.Image, CSng(LeftPos * Picture1.Size.Width), _
      0)
    

    In diesem Fall wird die PaintPicture-Methode durch die DrawImage-Methode der Graphics-Klasse ersetzt.

  7. Löschen Sie die ursprüngliche Zeile, Picture1.PaintPicture(sourceImage, LeftPos * VB6.PixelsToTwipsX(Picture1.Width), 0), oder kommentieren Sie sie aus.

  8. Fügen Sie am Ende der Prozedur den folgenden Code hinzu:

    g.Dispose()
    

    Die Dispose-Methode ist erforderlich, um die dem Graphics-Objekt zugeordneten Speicherressourcen freizugeben.

So testen Sie die Anwendung

  1. Klicken Sie im Menü Debuggen auf Starten.

    Hinweis:

    Wenn Sie zum Speichern der Projektmappendatei aufgefordert werden, klicken Sie auf Speichern, um die Datei zu speichern, und führen Sie dann die Anwendung aus.

  2. Klicken Sie auf die Schaltfläche ShowImage.

    Sie werden feststellen, dass das Bild beim Zeichnen flimmert. Dies ist darauf zurückzuführen, dass der gesamte Bereich gelöscht wird, bevor das jeweilige aktualisierte Bild auf dem Bildschirm gezeichnet wird.

Vornehmen weiterer Änderungen an der Anwendung

Dieses Problem kann behoben werden, indem nur in den erforderlichen Bildschirmbereich anstelle des gesamten, vom Graphics-Objekt dargestellten Bereichs gezeichnet wird. Sie müssen sicherstellen, dass beim Zeichnen des Bilds auf dem Bildschirm alle Pixel durch die Hintergrundfarbe verdeckt werden, die vom letzten Aufruf von DrawImage() übrig geblieben sind. Da das Bild von rechts nach links verschoben wird, müssen Sie lediglich die zusätzlichen Pixel rechts vom Bild verdecken.

So beheben Sie das Flimmern auf dem Bildschirm

  1. Ersetzen Sie in der Timer1_Tick-Prozedur die g.Clear(Picture1.BackColor)-Methode durch folgenden Code:

    Dim imageWidth As Integer = sourceImage.Image.Width
    Dim imageHeight As Integer = sourceImage.Image.Height
    Dim left As Double = imageWidth + (Picture1.Size.Width * LeftPos)
    
    g.FillRectangle(New SolidBrush(Me.BackColor), _
      New Rectangle(left, 0, 6, imageHeight))
    

    Anstelle der Clear-Methode verwenden Sie die FillRectangle-Methode, und verdecken Sie dabei mit der Hintergrundfarbe sämtliche verbleibenden Pixel rechts neben dem aktuell gezeichneten Bild. Hierzu müssen Sie zunächst die äußerste linke Koordinate des Rechtecks berechnen. Dies geschieht durch die ersten drei Zeilen des Codes.

  2. Klicken Sie im Menü Debuggen auf Starten.

  3. Klicken Sie auf die Schaltfläche ShowImage.

    Sie werden feststellen, dass das bewegte Bild nicht mehr flimmert.

Es gibt noch ein weiteres Problem, das behoben werden muss. Möglicherweise haben Sie bereits bemerkt, dass die im PictureBox-Steuerelement angezeigte Meldung über eine kleinere Schrift als die ursprüngliche Version verfügt. Dies liegt daran, dass für die Font-Eigenschaft des PictureBox-Steuerelements in der Visual Basic 6.0-Anwendung zur Entwurfszeit der Wert Arial Bold 16 festgelegt wurde. Für das PictureBox-Steuerelement von Visual Basic 2008 ist keine Font-Eigenschaft vorhanden. Stattdessen wird die Standardschriftart des Formulars (Me.Font) verwendet. Sie können dies beheben, indem Sie ein neues Font-Objekt deklarieren.

So beseitigen Sie den Fehler

  1. Fügen Sie der Timer1_Tick-Prozedur die folgende Deklaration hinzu:

    Dim f As System.Drawing.Font = New System.Drawing.Font("Arial", _
      16, FontStyle.Bold)
    
  2. Ändern Sie im Aufruf an g.DrawString den Schriftartparameter von Me.Font in f.

  3. Klicken Sie im Menü Debuggen auf Starten.

  4. Klicken Sie auf die Schaltfläche ShowImage.

    Der Text wird nun in der richtigen Schrift angezeigt.

Nun stimmt die Anwendung wieder mit der ursprünglichen Visual Basic 6.0-Anwendung überein, und Sie können Code hinzufügen, um die Anwendung zu erweitern. Wenn Sie allerdings die Vorteile von Visual Basic 2008 nicht nutzen möchten, ist eine Aktualisierung der Anwendung nicht notwendig.

Deshalb fügen Sie im nächsten Schritt Funktionen hinzu, um das Formular beim Schließen langsam auszublenden.

Hinweis:

Der Ausblendungseffekt ist bei der Anzeige mit 256 Farben nicht sichtbar. Sie müssen die Farbtiefe auf High Color oder True Color festlegen, um die Ergebnisse anzeigen zu können. Die Opacity-Eigenschaft kann nur unter Windows XP ausgeführt werden.

So erweitern Sie die Anwendung

  1. Wählen Sie im Code-Editor die Dropdownliste Klassenname und anschließend den Eintrag (Form1-Ereignisse) aus.

  2. Wählen Sie im Dropdownfeld Methodenname das FormClosing-Ereignis aus.

  3. Fügen Sie der Form1_FormClosing-Prozedur den folgenden Code hinzu:

    Dim i As Single
    For i = 1 To 0 Step -0.1
      Me.Opacity = i
      Application.DoEvents()
      System.Threading.Thread.Sleep(100)
    Next
    
  4. Klicken Sie im Menü Debuggen auf Starten.

  5. Schließen Sie das Formular, und beachten Sie, wie es langsam ausgeblendet wird.

    Sie können steuern, wie schnell es ausgeblendet wird, indem Sie den Schritt vergrößern (bzw. indem Sie die Sleep-Verzögerung verringern).

Siehe auch

Konzepte

Grafiken für Visual Basic 6.0-Benutzer

Referenz

Übersicht über Windows Forms

Weitere Ressourcen

Aktualisieren von Visual Basic 6.0