Multidimens. array gebruiken voor meerdere shapes

Status
Niet open voor verdere reacties.

buick

Terugkerende gebruiker
Lid geworden
6 sep 2001
Berichten
2.895
Besturingssysteem
Windows 10/11
Ik wil in VB6 een 10x10 grid maken met shapes (dus bv 100 kleine circels of
vierkanten)

Ik wil deze echter ook als een 2 dimensionale array kunnen uitlezen van bv
shape (1,1) tm shape (10,10)
(de 0,0 gebruik ik btw niet )

Als ik echter bij copy/paste antwoord dat er een control array gecreëerd
moet worden dan wordt dir maar 1 dimensionaal.

Handmatig opgeven bij de properties van de shape van bv 3,2 oid, geeft een
error.

Weet iemand of het mogelijk is om voor shapes of andere controls een
multidim. array te maken ?

Alvast bedankt

Nico
 
niet direct volgens mij in ieder geval.

Ben beetje uit visual basic en meer bezig met java nu. Vanuit die taal ook vooral denk ik dat het misschien wel mogelijk zou moeten zijn om het indirect via objecten te doen ??

Maar ga er even nachtje over slapen.
 
stond al met een bed in bed, maar:

(heb even voor het gemak text boxen genomen)

Private Sub Form_Load()

Dim O(1, 1) As Object

Set O(0, 0) = Text1
Set O(0, 1) = Text2
Set O(1, 0) = Text3
Set O(1, 1) = Text4

O(0, 0).Left = 0
O(0, 0).Top = 0

O(0, 1).Left = 0
O(0, 1).Top = O(0, 0).Height + 30

O(1, 0).Left = 0
O(1, 0).Top = O(0, 1).Top + O(0, 1).Height + 30

O(1, 1).Left = 0
O(1, 1).Top = O(1, 0).Top + O(1, 0).Height + 30

End Sub


maak dus 4 tekstboxen aan, geen control array (gewoon text1 tot/met text4) Of in jouw geval shape controls

en je kan er mee spelen, verplaatsen, uitlezen.
 
Op zich een leuke truc :)
Maar het probleem is dat ik bij grotere aantallen een array nodig heb. (bv 10,10 zijn al 100 shapes, dus een hoop werk :D)

Heb nu een tijdelijke tussenoplossing gevonden.
Heb nu als test een form gemaakt met 20 rijen van 40 shapes en heb de volgende truc bedacht (voor de geïntresseerden):

Code:
Option Explicit
Dim led(40, 20) As Byte 'contains on/off data
Dim loc(40, 20) As Integer 'points to real index value
Dim t As Integer, h, v As Byte
Const LedOn = &HC000&
Const LedOff = &H4000&


Code:
Private Sub Form_Load()

t = 0
For v = 1 To 20
   For h = 1 To 40
        loc(h, v) = t
    t = t + 1
    Next h
Next v

End Sub


Code:
Sub Plot(xpos as byte, ypos as byte)

Shape1(loc(xpos, ypos)).FillColor = LedOn

end sub

Wat ik dus gedaan heb is een eigen 2 dimensionele array gemaakt , loc(40,20) en die naar de juiste index van mijn shapes laten wijzen , nl.
shape1(0) tm shape1(4740)

Werkt wel maar is uiteraard geen ideale oplossing. Zou handig zijn als je, vooral in shapes ed, een multidimensionele array kon maken.

Nico :)
 
ok, maar die tussenolossing is ook geen antwoord op je vraag. Denk je met me mee ?

form met 1 commandbutton, druk je daarop dan worden de 4 textboxen rood en verschijnt de text: "hallo"

PHP:
Dim O(1, 1) As Object
Option Explicit


Private Sub Command1_Click()
    Dim i, j As Integer
    
    
    
    For i = 0 To 1
        For j = 0 To 1
            O(i, j).Text = "Hallo"
            O(i, j).BackColor = &HFF&
        Next j '
    Next i

    
End Sub

Private Sub Form_Load()
Dim i, j As Integer


Dim temp As String


For i = 0 To 1
    For j = 0 To 1
    
        temp = "Text" & i & j
        Set O(i, j) = Me.Controls.Add("VB.TextBox", temp)
   
   
        With O(i, j)
            .Top = 100 + 2000 * i
            .Left = 100 + 2000 * j
            .Width = 2000
            .Height = 20
            .Visible = True
        End With
   
    Next j
Next i

End Sub

Private Sub Form_Terminate()
Dim i, j As Integer

For i = 0 To 1
    For j = 0 To 1
        Set O(i, j) = Nothing
    Next j
Next i

End Sub
 
Werkt inderdaad ook. Ik ga nu een testprog maken met 3200 shapes en kijken wat het snelste werkt.
Wil het nl gebruiken voor een display emulator.

Nico :)
 
Niet echt een eigen OS. Meer een soort simpele gameconsole.
Heb inmiddels een scherm van 80X40 pixels en werkt wel leuk. Nu nog wat standaard routines schrijven om lijnen te plotten en eventueel een karaktersetje en dan wat simpele spelletjes.

Nico :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan