![]() |
![]() |
![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
To access the contents, click the chapter and section titles.
Visual Basic 6 Programming Blue Book: The Most Complete, Hands-On Resource for Writing Programs with Microsoft Visual Basic 6!
The forms code is presented in Listing 12.7. The comments should be sufficient for you to understand how it works. Basically, the four images are loaded into an array of Picture objects. Then, a Timer control is set to fire once every 0.25 second. With each cycle, the next image is loaded into the Picture Box, looping back to the first image as needed. The result is a crude animation of a spinning wheel. With more images (and a more skillful artist) the effect would be a lot more pleasing.
Listing 12.7 Code in PICTUREDEMO.FRM. Option Explicit Number of pictures. Const NUMPIX = 4 Array of Picture objects. Dim pics(NUMPIX - 1) As Picture Global variable to hold the current pic number. Dim CurrentPic As Integer Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 Start Timer1.Enabled = True Case 1 Stop Timer1.Enabled = False Case 2: Quit End End Select End Sub Private Sub Form_Load() Load the array of Picture objects Set pics(0) = LoadPicture(spin1.bmp) Set pics(1) = LoadPicture(spin2.bmp) Set pics(2) = LoadPicture(spin3.bmp) Set pics(3) = LoadPicture(spin4.bmp) Set up the timer for 250 mSec. Timer1.Interval = 250 Timer1.Enabled = False Set the Picture Box to Autosize. Picture1.AutoSize = True Display the first image. CurrentPic = 0 Picture1.Picture = pics(CurrentPic) End Sub Private Sub Form_Resize() Center the Picture Box left to right. Picture1.Top = 200 Picture1.Left = (Form1.ScaleWidth - Picture1.Width) / 2 End Sub Private Sub Timer1_Timer() Increment the picture number, looping back to 0 as needed. CurrentPic = CurrentPic + 1 If CurrentPic = NUMPIX Then CurrentPic = 0 Picture1.Picture = pics(CurrentPic) End Sub The PictureClip ControlThe PictureClip control is another method for storing images, somewhat like the Picture object. It is specialized to permit storage of composite images, permitting you to retrieve and display only a portion of the image. It is typically used for small images, such as icons, cursors, or animation frames. You can combine, say, 20 icons into one master image, store the image in a PictureClip control, then retrieve individual icons as needed. This is faster and less resource-intensive than keeping the icon files in 20 different Picture objects. Usually, the individual images that go into the composite image are the same size, and the composite image is a grid of equally spaced smaller images. For example, you could combine 12 icons, each 32-by-32 pixels, into a master image 128 pixels wide (4 icons) and 96 pixels high (3 icons). Then, set the PictureClip controls Rows and Cols properties to specify that the image has three rows and four columns. You can then retrieve individual images using the indexed GraphicCell method. In this example, the master image contains 12 subimages, numbered from 0 at the top left to 11 at the bottom right. This statement would load into a Picture Box the icon in the second row, second column: PictureBox1.Picture = PictureClip.GraphicCell(5) You can also retrieve arbitrary areas of the master image using these properties of the PictureClip control:
Once these four properties have been set, use the Clip property to retrieve the specified region of the image in the PictureClip control: Picture1.Picture = PictureClip1.Clip To demonstrate, I have modified the demonstration program I used for the Picture object to use a PictureClip control instead. First, I combined the four individual animation frames into a single image, representing a two-by-two grid of the four images. This is shown in Figure 12.10. The code is shown in Listing 12.8. I called this project PICTURECLIP. You can see that relatively few modifications have to be made to the code in the PICTUREDEMO project. The only difference in the form is the addition of one PictureClip control, with all of its properties left at the default values. The program looks exactly the same when running.
Listing 12.8 Code in PICTURECLIP.FRM. Option Explicit Const NUMPIX = 4 Dim CurrentPic As Integer Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 Start Timer1.Enabled = True Case 1 Stop Timer1.Enabled = False Case 2: Quit End End Select End Sub Private Sub Form_Load() Load the PictureClip control PictureClip1.Picture = LoadPicture(pic_clip.bmp) Set for 2 rows and 2 columns PictureClip1.Rows = 2 PictureClip1.Cols = 2 Set the Picture Box to Autosize. Picture1.AutoSize = True Set up the Timer Timer1.Interval = 250 Timer1.Enabled = False Display the first image. CurrentPic = 0 Picture1.Picture = PictureClip1.GraphicCell(CurrentPic) End Sub Private Sub Form_Resize() Center the Picture Box left to right. Picture1.Top = 200 Picture1.Left = (Form1.ScaleWidth - Picture1.Width) / 2 End Sub Private Sub Timer1_Timer() Increment the picture number, looping back to 0 as needed. CurrentPic = CurrentPic + 1 If CurrentPic = NUMPIX Then CurrentPic = 0 Picture1.Picture = PictureClip1.GraphicCell(CurrentPic) End Sub Putting Pictures On FormsYou can display bitmap and metafile pictures directly on a form without using a control. A picture on a form is always located behind the controls on the form, so you can use the picture as a background. You can display a picture on a form in two ways:
These techniques work in the same way as they do for a Picture Box control.
|
![]() |
Products | Contact Us | About Us | Privacy | Ad Info | Home
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement. |