VB -23: PaintPicture

Flackerfrei soll's sein...

Sicher gefällt auch Euch das Geflacker nicht besonders, vor allem bei größeren Grafiken kann das schon störend sein. Wir suchen also nach einem Ausweg, wie wir das kleine und transparente GIF-Bild flackerfrei kriegen.

Wir greifen dazu nochmal auf Möglichkeit 1 zurück, das Bild direkt auf die Form zu malen. Da wir aber unsere Tafel schön in der Mitte haben wollen, müssen wir einen kleinen Umweg machen. Wir laden das Bild zunächst in ein PictureBox-Control, dessen Visible-Eigenschaft wir auf false setzen, denn es soll nur ein Hilfs-Control sein zum Lagern des Bildes, und kopieren es erst zur Laufzeit auf die Form.

Also alle Kugeln, Textbox und Label nochmal raus aus dem Tafel-Picture (denn wenn sie in der PictureBox als Container sind, wären auch sie automatisch unsichtbar!) und direkt auf die Form plazieren. Das Picture-Control können wir ruhig etwas zu Seite schieben, damit es uns nicht so stört:

Jetzt müssen wir nur noch im Activate-Ereignis unserer Form das Bild aus umserem Picture-Control auf die Form kopieren. Wir nutzen dazu die PaintPicture-Methode:

     object.PaintPicture picture, x1, y1
 

Hinweis: Die Methode hat optional noch weitere Argumente, wir benötigen sie hier jedoch nicht.

Um genau die Mitte des inneren Teils unserer Form zu treffen, subtrahieren wir die Breite unserer Grafik von der inneren Breite unserer Form (ScaleWidth) und dividieren sie durch 2, das Gleiche mit der Höhe:

     Private Sub Form_Activate()
         Me.PaintPicture picTafel.Image, (Me.ScaleWidth - picTafel.Width) \ 2, (Me.ScaleHeight - picTafel.Height) \ 2
         Verzoegerung 2
         MsgBox "Bitte suche eine Übung aus!", vbExclamation
         lblBegruessung.Visible = False        'Begrüßung verschwinden lassen
     End Sub
     

Das ist eigentlich schon alles. Wenn wir jetzt unser Programm starten, dann haben wir eine kleine GIF-Grafik (ähnliches gilt auch für JPG-Format) und es flackert nichts mehr im Hintergrund, wenn die Kugeln gemalt werden.

Beispielprojekt laden

Einen Punkt werden wir uns in der nächsten Lektion nochmal ganz genau ansehen, den ich hier nicht erläutert habe: Ich hab die Image-Eigenschaft des Picture-Controls benutzt, warum... und warum nicht das resourcensparende ImageControl, schließlich brauchen wir ja keinen Container mehr...?

zurück Index weiter


© Copyright 1998-2000 J.Behling EMail schreiben ABC-Ware's Homepage
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.