Dynamisches Verschieben von Steuerelementen

Einer der einfachsten Effekte, die mit Visual Basic erzielt werden können, ist das Verschieben von Steuerelementen zur Laufzeit. Hierzu können Sie entweder die Eigenschaften, die die Position eines Steuerelements definieren, direkt ändern oder die Move-Methode verwenden.

Verwenden der Eigenschaften Left und Top

Die Left-Eigenschaft gibt die Entfernung zwischen linker oberer Ecke des Steuerelements und dem linken Rand des Formulars an. Die Top-Eigenschaft gibt die Entfernung zwischen der linken oberen Ecke des Steuerelements und dem oberen Rand des Formulars an. Abbildung 46 zeigt die Eigenschaften Left und Top eines Steuerelements.

Abbildung 46:   Die Eigenschaften Left und Top

 

Steuerelemente können verschoben werden, indem die Einstellungen der Eigenschaften Left und Top mit Anweisungen wie den folgenden geändert werden:

txtField1.Left = txtField1.Left + 200

txtField1.Top = txtField1.Top - 300

Verwenden der Eigenschaften ScaleHeight, ScaleWidth, Height und Width

Beim Positionieren von Steuerelementen innerhalb von Formularen und Bildfeldern ist zwischen inneren und äußeren Abmessungen zu unterscheiden:

Die Eigenschaften Height und Width geben die äußeren Abmessungen eines Objekts (z.B. einschließlich seiner Randlinien, Titelleiste, etc) an.

Die Eigenschaften ScaleHeight und ScaleWidth geben die inneren Abmessungen eines Objekts, also die zur Verfügung stehende Fläche an

Verschieben eines Linien-Steuerelements

Wie bereits erwähnt wurde, haben Linien-Steuerelemente keine Left- oder Top-Eigenschaften. Statt dessen wird die Position von Linien-Steuerelementen in einem Formular mit speziellen Eigenschaften definiert. Die folgende Tabelle enthält eine Aufstellung dieser Eigenschaften und eine Beschreibung, wie damit die Position eines Linien-Steuerelements festgelegt wird.

Eigenschaft

Beschreibung

X1

Die x-Koordinate des Linienanfangs. Die Koordinate wird in der aktuellen Skalierungseinheit angegeben. Der Linienanfang ist der Punkt, an dem die Ausgabe der Linie beginnt.

Y1

Die y-Koordinate des Linienanfangs.

X2

Die x-Koordinate des Linienendes. Das Linienende ist der Punkt, an dem die Ausgabe der Linie endet.

Y2

Die y-Koordinate des Linienendes.

Mit den folgenden Anweisungen wird im Beispiel "Hupflinie" der Bildschirmschoner-Anwendung die Position eines Linien-Steuerelements in "DemoForm" zufällig geändert:

linLineCtl.X1 = Int(DemoForm.Width * Rnd)    ' Zufällige x-Position für 1. Linienende setzen.

linLineCtl.Y1 = Int(DemoForm.Height * Rnd)   ' Zufällige y-Position für 1. Linienende setzen.

linLineCtl.X2 = Int(DemoForm.Width * Rnd)    ' Zufällige x-Position für 2. Linienende setzen.

linLineCtl.Y2 = Int(DemoForm.Height * Rnd)   ' Zufällige y-Position für 2. Linienende setzen.

Cls                                          ' Streupixel von der verschobenen Linie entfernen.

Delay                                        ' Kurze Pause vor nächster Bewegung.

Verwenden der Move-Methode

Wenn die Eigenschaften Left und Top oder X und Y geändert werden, hat dies einen ruckartigen Effekt zur Folge, da sich das Steuerelement zuerst horizontal und dann vertikal bewegt. Mit der Move-Methode kann eine glattere diagonale Bewegung erzielt werden.

Die Syntax der Move-Methode lautet:

[Objekt.]Move links [, oben[, Breite[, Höhe] ] ]

Das Objekt ist das zu bewegende Formular oder Steuerelement. Wenn Objekt nicht angegeben wird, wird das aktuelle Formular bewegt. Die Argumente links und oben sind die neuen Werte der Eigenschaften Left und Top des Objekts, die Argumente Breite und Höhe sind die neuen Werte der Eigenschaften Width und Height. Nur das Argument links ist erforderlich. Wenn Sie jedoch andere Argumente angeben möchten, müssen Sie alle Argumente angeben, die in der Liste vor dem gewünschten Argument erscheinen.

Absolute Bewegung

Eine absolute Bewegung findet statt, wenn Sie ein Objekt an bestimmte Koordinaten im zugehörigen Container verschieben. Die folgende Anweisung verschiebt ein Steuerelement namens "txtField1" mit einer absoluten Bewegung auf die Koordinaten (100, 200):

txtField1.Move 100, 200

Relative Bewegung

Eine relative Bewegung findet statt, wenn Sie ein Objekt verschieben, indem Sie die gewünschte Entfernung relativ zur aktuellen Position angeben. Die folgende Anweisung verschiebt txtField1 mit einer relativen Bewegung an eine Position, die sich 100 Twips rechts und unterhalb der aktuellen Position befindet:

txtField1.Move txtField1.Left + 100, txtField1.Top + 100

Dieser Abschnitt verdeutlicht das Verschieben von Steuerelementen anhand der Beispielanwendung "Bildschirm­schoner" (Pfad: ...\Vb\Samples\Pguide\Blanker.vbp). Die Springfeld-Demo verschiebt ein Bildfeld diagonal über das Formular, so dass das Bildfeld an den Rändern des Formulars "abzuprallen" scheint. Diese Demo verwendet ein Bildfeld anstelle eines Anzeige-Steuer­elements, da Anzeige-Steuerelemente aufgrund der Aktualisierung der Anzeige während der Bewegung flimmern.

Abbildung 47   Bildfeld (picBall) in der Bildschirmschoner-Anwendung

Abbildung 47 zeigt das Hauptformular der Bildschirmschoner-Anwendung (DemoForm) und das in diesem Beispiel verwendete Bildfeld.

Der Name des Bildfeldes ist "picBall". Dieses Steuerelement wird über das Formular bewegt, nachdem Sie aus dem Menü Optionen den Befehl Spring­feld wählen und dann auf die Schaltfläche Starten klicken. Die Ereignisprozedur für diese Befehlsschaltfläche ruft an­schließend die CtlMoveDemo-Prozedur auf.

Die CtlMoveDemo-Prozedur wählt eine zufällige Anfangs­richtung aus, wobei die folgenden vier Möglichkeiten zur Auswahl stehen:

·      Links oben

·      Rechts oben

·      Links unten

·      Rechts unten

Das Bildfeld "picBall" bewegt sich in der gewählten Richtung, bis das Steuerelement einen der vier Ränder des Formulars erreicht. Anschließend wird die Richtung geändert, so dass sich das Bildfeld vom Rand fortbewegt. Die neue Richtung wird durch die Variable Motion festgelegt. Wenn sich das Bildfeld beispielsweise nach links oben bewegt, ändert dieser Teil der Prozedur den Wert von Motion und veranlaßt den Code, das Element "picBall" in eine andere Richtung zu lenken.

Die folgenden Anweisungen stammen aus der CtlMoveDemo-Prozedur in der Bildschirmschoner-Anwendung:

Select Case Motion

Case 1

   ' Wenn Bewegung nach links oben erfolgt, Steuerelement 20 Twips verschieben.

   picBall.Move picBall.Left - 20, picBall.Top - 20

   ' Wenn Steuerelement linken Rand berührt, Bewegung nach rechts oben ändern.

   If picBall.Left <= 0 Then

      Motion = 2

   ' Wenn Steuerelement oberen Rand berührt, Bewegung nach links unten ändern.

   ElseIf picBall.Top <= 0 Then

      Motion = 4

   End If

Beachten Sie, daß die Codezeile, die "picBall" verschiebt, 20 Twips von den aktuellen Werten der Eigenschaften Left und Top subtrahiert, um die neue Position des Steuer­elements zu bestimmen. Dies gewährleistet, dass sich das Steuerelement immer relativ zur aktuellen Position weiterbewegt.

Die Geschwindigkeit und "Glätte" der Bewegung des Steuerelements hängen von der Anzahl der Twips (oder anderer Einheiten) ab, die in der Move-Methode angegeben werden. Wenn die Anzahl der Twips vergrößert wird, erhöht sich die Geschwindig­keit, aber die Bewegung wird ruckartiger. Wenn die Anzahl der Twips verkleinert wird, wird die Bewegung des Steuerelements lang­samer, aber gleichzeitig glatter.

Dynamische Größenänderung von Steuerelementen

In einer Visual Basic-Anwendung können Sie die Größe und Kontur eines Bildfeldes, eines Anzeige-Steuerelements oder eines Formulars zur Laufzeit ändern sowie dessen Position ändern.

Die Größe wird durch die folgenden Eigenschaften festgelegt.

Eigenschaft

Betrifft

Beschreibung

Align

Bildfelder und Daten-Steuerelemente

Wenn diese Eigenschaft gesetzt wird, um ein Bildfeld am oberen (1) oder unteren (2) Rand eines Formulars auszurichten, entspricht die Breite des Bildfeldes immer der Breite des Formularinneren. Wenn diese Eigenschaft gesetzt wird, um ein Bildfeld am linken (3) oder rechten (4) Rand eines Formulars auszu­richten, entspricht die Höhe des Bildfeldes immer der Höhe des Formularinneren.

Height

Alle Formulare und Steuerelemente mit Ausnahme von Menüs und Linien

Die Höhe des Objekts im Skalierungsmodus des Formulars (standardmäßig Twips).

Width

Alle Formulare und Steuerelemente mit Ausnahme von Menüs und Linien

Die Breite des Objekts im Skalierungs­modus des Formulars (standardmäßig Twips).

AutoSize

Bezeichnungs- und Bildfelder

Wenn True, wird die Größe des Bildfeldes von Visual Basic immer an die Größe des Inhalts angepasst.

Stretch

Anzeige-Steuer­elemente

Wenn True, wird die Bitmap oder Metafile-Datei gestreckt, um sie an die Größe des Anzeige-Steuerelements anzupassen. Wenn False, wird die Größe des Anzeige-Steuerelements an die Größe der darin enthaltenen Bitmap oder Metafile-Datei angepasst.

In diesem Beispiel wird eine Befehlsschaltfläche mit Namen "cmdGrow" bei jedem Anklicken durch den Benutzer vergrößert:

Private Sub cmdGrow_Click ()

   cmdGrow.Height = cmdGrow.Height + 300

   cmdGrow.Width = cmdGrow.Width + 300

End Sub

Erstellen einfacher Animationen

Wenn Sie Bilder zur Laufzeit ändern, können Sie einfache Animationen erstellen. Dies geschieht am einfachsten, indem Sie zwischen zwei Bildern hin- und herschalten. Sie können auch eine Reihe von Bildern verwenden, um eine aus mehreren Bildern bestehende Animation zu erstellen. Wenn Sie das Bild dynamisch verschieben, können Sie ausgefallenere Animationseffekte erzielen.

Hin- und Herschalten zwischen zwei Bildern

Einige der Symbole können paarweise verwendet werden. Im Unterverzeichnis ...\Vb\Graphics\Icons befinden sich beispielsweise zwei zueinander passende Briefumschläge, einer der Umschläge ist geöffnet, der andere ist geschlossen, wie in Abbildung 48 gezeigt. Wenn Sie zwischen diesen beiden Symbolen hin- und herschalten, können Sie eine Animation erstellen, die dem Benutzer den Status einer Nachricht anzeigt.

Abbildung 48:   Mail-Symbole

Die folgende Anweisung ändert die Picture-Eigenschaft eines Anzeige-Steuerelements mit dem Namen "imgMailStatus", so dass das Bild sich von einem geschlossenen Briefumschlag in einen geöffneten Umschlag ändert.

imgMailStatus.Picture = imgMailOpen.Picture

Durchlaufen mehrerer Bilder

Sie können längere Animationen erstellen, indem Sie mehrere Bilder durchlaufen oder nacheinander anzeigen. Dieses Verfahren entspricht im Grunde dem Hin- und Herschalten zwischen zwei Bildern; hier muss die Anwendung aber auswählen, welche Bitmap als aktuelles Bild dient. Steuerelementefelder stellen eine Möglichkeit dar, die individuellen Bilder in einer Animation zu steuern.

Die Bildschirmschoner-Beispielanwendung enthält eine Animation, die einen ab- und zunehmenden Mond zeigt. Die Mondphasen-Demo verwendet ein aus neun Anzeige-Steuerelementen bestehendes Steuerelementefeld, um die Animation zu erstellen. Sie können sich ansehen, wie die Abbildungen in einem Steuerelementefeld zur Laufzeit miteinander verbunden werden, indem Sie aus dem Menü Optionen den Befehl Mondphasen und dann die Schaltfläche Starten wählen, die die ImageDemo-Prozedur aufruft.