From ACAD Newsletter Dated October 27th 1999.
(http://www.vbdesign.net)
(And believe it or not, it was "me" that asked Randall the
question!!!)
Q. How's about project that would display a
set of AutoCad slides, similar to the image dialogue that AutoCAD uses. The
difference being, that the application would allow the user to select a library
directory (where the slides and blocks are kept) and would create the image
dialogue "on the fly". This way, the image dialogue would not have to
be hardcoded as it is in the AutoCAD menu. Thinking about it, maybe we should
use WMF files instead of slides
A. Of course we could use the slide ocx to
display a complete library of slides, but it is a shareware tool. So Kenny went
with using Window Metafiles for the images. The problem is, VBA does not allow
for a dynamic array of controls (in VB 5 and up this can be done), so we could
create the image controls one at a time (see my dynamic control code from this
month), but this becomes very complex if you have more than say, 10 images in a
directory. You need to expand the form to fit all of the images, or provide a
button to switch to the next set of images...too much trouble when we can just
use StdPictures. What is an stdPicture? A picture held in memory! We can even
make these a dynamic array! Well, that solves half of our problem, but how do we
get enough image controls onto the form to display all of the pictures in any
given directory? the answer is, we don't! Time to use a Tab Strip! This is the
first part of this project, the second half will depend on what Kenny (and the
YOU) want to do with it, should we set it so that the user can click an image
and have the block inserted? Perhaps allow multiple selections so that many
blocks can be inserted as many times as needed? INPUT please!!!
One last note, Take a look at what Ralph
worked up prior to building the project!!
For the form:
1 tab strip named tabImages
9 image controls (all with default names) placed in the client area of the tab
strip
1 command button (default name)
1 text box (default name)
'Begin code Block
Option Explicit
Option Base 1
Private stdImages() As StdPicture
Private colFiles As Collection
Private Sub CommandButton1_Click()
If TextBox1.Text > "" Then
If Dir(TextBox1.Text) > "" Then
tabImages.Enabled = True
LoadImages TextBox1.Text
CommandButton1.Enabled = False
Else
MsgBox "The path provided was not valid", vbOKCancel, "Llama
Central"
End If
Else
MsgBox "You must provide a valid path", vbOKCancel, "Llama
Central"
End If
End Sub
Private Sub tabImages_Change()
Dim ctlcontrol As Control
For Each ctlcontrol In UserForm1.Controls
If TypeOf ctlcontrol Is Image Then
ctlcontrol.Picture = Nothing
End If
Next
SetImages
End Sub
Private Sub TextBox1_Change()
CommandButton1.Enabled = True
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub LoadImages(strPath As String)
Dim strFile As String
Dim intCnt As Integer
Static intTab As Integer
Set colFiles = New Collection
If Right(strPath, 1) <> "\" Then strPath = strPath &
"\"
strFile = Dir(strPath & "\*.wmf")
Do While strFile > ""
colFiles.Add strFile
strFile = Dir
Loop
intCnt = colFiles.Count
ReDim stdImages(intCnt)
For intCnt = LBound(stdImages) To UBound(stdImages)
Set stdImages(intCnt) = LoadPicture(strPath & colFiles(intCnt))
If intCnt > 8 Then
If intCnt Mod 9 = 1 Then
tabImages.Tabs.Add "Tab" & intTab, intCnt & " - "
& intCnt + 9
intTab = intTab + 1
End If
End If
Next
SetImages
End Sub
Private Sub SetImages()
Dim intIcnt As Integer
Dim intTabNum As Integer
intTabNum = tabImages.SelectedItem.Index * 9
intIcnt = 1 + intTabNum
Image1.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image2.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image3.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image4.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image5.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image6.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image7.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image8.Picture = stdImages(intIcnt)
If intIcnt = UBound(stdImages) Then Exit Sub
intIcnt = intIcnt + 1
Image9.Picture = stdImages(intIcnt)
intIcnt = intIcnt + 1
End Sub
Private Sub UserForm_Initialize()
tabImages.Tabs.Item(0).Caption = "1 - 9"
tabImages.Tabs.Remove (1)
tabImages.Enabled = False
CommandButton1.Caption = "Load Images"
End Sub
'End Code Block
|