Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Create a "Grid" inside Picture Box

Posted on 2002-07-20
4
Medium Priority
?
195 Views
Last Modified: 2008-03-04
Check out this immage, http://www.temecularodrun.com/temp/grid.jpg

I know how to do the code loops to create the output results, but how do you do the "grid"?  All those neat little black lines that contain the results.

In .asp this is a simple <tr><td> loop, how do you do it in VB?

If more points are necessary let me know.
0
Comment
Question by:mgfranz
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 38

Expert Comment

by:PaulHews
ID: 7167170
Here is a complete example, but 100 pts would be nice as it took some time to code.

Add a picturebox and a button to a form.  Make the picture box a fair size.

Option Explicit
Private mGrid(1 To 10, 1 To 10)
Private Sub Command1_Click()
    Dim i As Integer
    Dim j As Integer
   
    For i = 1 To 10
        For j = 1 To 10
            mGrid(i, j) = i * j
        Next j
    Next i
   
    Call sDrawGrid
       
   
   
End Sub

Public Sub sDrawGrid()
   
    Dim sngStartX As Single, sngStartY As Single
    Dim sngEndX As Single, sngEndY As Single
    Dim i As Integer, j As Integer
    Dim x As Single, y As Single, xx As Single, yy As Single
    Dim sngW As Single, sngH As Single
    Dim strCell As String
    Dim lngColor As Long
   
    With Picture1
   
    sngStartX = 45
    sngStartY = 45
    sngEndX = .ScaleWidth - 45
    sngEndY = .ScaleHeight - 45
   
    'With keyword does not work with certain graphic methods, because of MS laziness.
   
   
    For i = 1 To 10
        If i Mod 2 = 0 Then   'alternate every second column
            lngColor = vbWhite
        Else
            lngColor = RGB(255, 255, 192)  'light yello
        End If
       
        x = i / 10 * sngEndX 'right edge of coloured block
        xx = (i - 1) / 10 * sngEndX 'left edge of coloured block
        If xx = 0 Then xx = sngStartX  'correction to formula for first line
        Picture1.Line (xx, sngStartY)-(x, sngEndY), lngColor, BF
    Next i
    For i = 1 To 10
        x = i / 10 * sngEndX 'current position of line being drawn
        Picture1.Line (x, sngStartY)-(x, sngEndY)
    Next i
   
    y = 1 / 10 * sngEndY
    'Line at table head
    Picture1.Line (sngStartX, y)-(sngEndX, y)
    'Line at left edge
    Picture1.Line (sngStartX, sngStartY)-(sngStartX, sngEndY)
    'line at top
    Picture1.Line (sngStartX, sngStartY)-(sngEndX, sngStartY)
    'line at bottom
    Picture1.Line (sngStartX, sngEndY)-(sngEndX, sngEndY)
   
    'Tricky part, center numbers in boxes
    For i = 1 To 10
        For j = 1 To 10
            strCell = Format(mGrid(i, j))
            sngW = .TextWidth(strCell)
            sngH = .TextHeight(strCell)
            x = (CSng(i) * 2 - 1) / 20 * sngEndX - sngW / 2  'first part is simplification of formula ((i + (i-1))/2)/10 find center of cell
            y = (CSng(j) * 2 - 1) / 20 * sngEndY - sngH / 2
            .CurrentX = x
            .CurrentY = y
            Picture1.Print strCell
        Next j
    Next i
   
   

    End With

End Sub
0
 
LVL 18

Author Comment

by:mgfranz
ID: 7167853
OK, Cool.  Now what if I want to have each number in a box?  So that the results are in a full grid?

And your'e right, 100 point is more suiting...
0
 
LVL 38

Accepted Solution

by:
PaulHews earned 400 total points
ID: 7168107
>Now what if I want to have each number in a box?  So that the results are in a full grid?<

I assume you mean draw grid lines for each cell?  Make the following changes to the DrawGrid subroutine

Public Sub sDrawGrid()
   
   Dim sngStartX As Single, sngStartY As Single
   Dim sngEndX As Single, sngEndY As Single
   Dim i As Integer, j As Integer
   Dim x As Single, y As Single, xx As Single, yy As Single
   Dim sngW As Single, sngH As Single
   Dim strCell As String
   Dim lngColor As Long
   
   With Picture1
   
   sngStartX = 45
   sngStartY = 45
   sngEndX = .ScaleWidth - 45
   sngEndY = .ScaleHeight - 45
   
   'With keyword does not work with certain graphic methods, because of MS laziness.
   
   
   For i = 1 To 10
       If i Mod 2 = 0 Then   'alternate every second column
           lngColor = vbWhite
       Else
           lngColor = RGB(255, 255, 192)  'light yello
       End If
       
       x = i / 10 * sngEndX 'right edge of coloured block
       xx = (i - 1) / 10 * sngEndX 'left edge of coloured block
       If xx = 0 Then xx = sngStartX  'correction to formula for first line
       Picture1.Line (xx, sngStartY)-(x, sngEndY), lngColor, BF
   Next i
   
   For i = 1 To 10
       x = i / 10 * sngEndX 'current position of line being drawn
       Picture1.Line (x, sngStartY)-(x, sngEndY)
   Next i
   For i = 1 To 10
       y = i / 10 * sngEndY 'current position of line being drawn
       Picture1.Line (sngStartX, y)-(sngEndX, y)
   Next i
   'Commented out lines no longer needed since each line being drawn above
'   y = 1 / 10 * sngEndY
'   'Line at table head
'   Picture1.Line (sngStartX, y)-(sngEndX, y)
   'Line at left edge
   Picture1.Line (sngStartX, sngStartY)-(sngStartX, sngEndY)
   'line at top
   Picture1.Line (sngStartX, sngStartY)-(sngEndX, sngStartY)
'   'line at bottom
'   Picture1.Line (sngStartX, sngEndY)-(sngEndX, sngEndY)
   
   'Tricky part, center numbers in boxes
   For i = 1 To 10
       For j = 1 To 10
           strCell = Format(mGrid(i, j))
           sngW = .TextWidth(strCell)
           sngH = .TextHeight(strCell)
           x = (CSng(i) * 2 - 1) / 20 * sngEndX - sngW / 2  'first part is simplification of formula ((i + (i-1))/2)/10 find center of cell
           y = (CSng(j) * 2 - 1) / 20 * sngEndY - sngH / 2
           .CurrentX = x
           .CurrentY = y
           Picture1.Print strCell
       Next j
   Next i
   
   

   End With

End Sub

0
 
LVL 18

Author Comment

by:mgfranz
ID: 7168130
Beautiful... thank you sir!
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Suggested Courses

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question