[VB6] control arrays probleem / foute methode ?

Pagina: 1
Acties:
  • 99 views sinds 30-01-2008

  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
Hoi allemaal ik ben met een schuifprogrammatje bezig.
Nu ben ik op het punt om over te schakelen op control arrays, RobIII heeft me
al aardig op weg gezet, nu heb ik verder die code op maat gemaakt en ik heb bijna
bereikt wat ik wil. Wat heb ik nu is een form die initialiseerd, arrays aanmaakt en alleen
de eerste afbeelding inlaad van mijn listbox die alle afbeeldingen die in hun specifieke array
moeten komen. Dus het gedeelte met .Picture = LoadPicture(AfbeeldingPlaats) is waar het programma niet doet wat ik verwachtte dat het ging doen, ik krijg ook geen error als ik run of
compile. Wat doe ik nu mis of wat interpreteer ik mis ?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub InitBoxes(iBoxCount As Integer)
    'Maakt iBoxCount Pictureboxes aan (kopiën van pcBox)
    Dim T As Integer
    Dim i As Integer
    Dim Afbeelding
    Dim AfbeeldingPlaats
    
    For T = 0 To iBoxCount
        If T > 0 Then Load pcBox(T) 'De nulde hoeft niet geladen te worden
    'For i = 1 To iBoxCount
        Afbeelding = lstQueue.ListIndex + 1
        AfbeeldingPlaats = lstQueue.List(Afbeelding)
        Text1.Text = AfbeeldingPlaats
        pcBox(T).Picture = LoadPicture(AfbeeldingPlaats)
    'Next
        
        With pcBox(T)
            Afbeelding = lstQueue.ListIndex + 1
            AfbeeldingPlaats = lstQueue.List(Afbeelding)
            'Text1.Text = AfbeeldingPlaats    'effe testen of die het juiste path neemt
            
            '.BackColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)   'Random kleurtje
            .BackColor = &H80000007
            .Move (T - 1) * pcBox(0).Width, 0                   'Positie instellen
            .Visible = True                                     'Zichtbaar maken...
            .Picture = LoadPicture(AfbeeldingPlaats)            'afbeelding inladen
        
        End With
    Next
End Sub



een voorbeeld van de inhoud van lstQueue ( paths zitten in een ini ) is onderstaande lijst, dat inlaad gedeelte werkt allemaal. Het probleem zit hem dus in de juiste manier van inladen naar de pcBox.

C:\Anyway\img\logo.jpg 'moet naar pcbox(0) ( of wordt 0 niet gebruikt ? )
C:\Anyway\img\pic_001.jpg 'moet naar pcbox(1)
C:\Anyway\img\pic_002.jpg 'moet naar pcbox(2)
C:\Anyway\img\pic_003.jpg 'moet naar pcbox(3)
C:\Anyway\img\pic_004.jpg 'moet naar pcbox(4)
C:\Anyway\img\pic_005.jpg
C:\Anyway\img\pic_006.jpg
C:\Anyway\img\pic_007.jpg
C:\Anyway\img\logo.jpg
C:\Anyway\img\pic_008.jpg
C:\Anyway\img\pic_009.jpg
C:\Anyway\img\pic_010.jpg
C:\Anyway\img\pic_011.jpg
C:\Anyway\img\pic_012.jpg
C:\Anyway\img\pic_013.jpg
C:\Anyway\img\pic_014.jpg


Wie vertelt mij even wat ik fout doe met die control arrays, heb net een VB6.0 boek vastgehad
maar daar stonden maar 3 pagina's in over control arrays waar ik niet echt wijzer uit werd...

http://gathering.tweakers.net/forum/list_messages/1166377
ik weet niet of ik mag linken naar het voorgaande topic maar mss is dit handig
voor mensen die hier niet meteen wijs uit worden...

[ Voor 3% gewijzigd door fluppie007 op 10-10-2006 00:27 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je al eens begint met meuk te strippen die overbodig is is je code al een heel stuk duidelijker...
Verder zie ik dat je "Afbeelding" en "Afbeeldingplaats" (beide niet erg beschrijvende namen) geen datatype toekent bij de declaratie (een string lijkt mij gepast) en heb je een variabele i die ... niets doet. Verder zie ik je zo al op 2 plaatsen LoadPicture gebruiken... :?

Als ik dan je code strip en opruim ben ik zo goed als letterlijk bij het voorbeeld dat ik je voorschotelde, en dat werkt bij mij prima:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub InitBoxes(iBoxCount As Integer)
    'Maakt iBoxCount Pictureboxes aan (kopiën van pcBox)
    Dim T As Integer
    Dim AfbeeldingPlaats As String
    
    For T = 0 To iBoxCount
        If T > 0 Then Load pcBox(T) 'De nulde hoeft niet geladen te worden
        
        With pcBox(T)
            AfbeeldingPlaats = lstQueue.List(T)
            
            .Move (T - 1) * pcBox(0).Width, 0                   'Positie instellen
            .Visible = True                                     'Zichtbaar maken...
            .Picture = LoadPicture(AfbeeldingPlaats)            'afbeelding inladen
        End With
    Next
End Sub


Voor deze code heb ik een form gebruikt met 1 picturebox (naam: pcBox, index: 0) en 1 listbox (lstQueue) met daarin een paar items (C:\pic1.jpg, C:\pic2.jpg etc...)

Overigens is de variabele "Afbeeldingplaats" in bovenstaande code ook nog niet eens "echt" nodig, je gebruikt 'm immers nu effectief maar op 1 plaats. Je kunt dan dus regels 4 en 10 laten vervallen en regel 14 vervangen door:
Visual Basic 6:
1
            .Picture = LoadPicture(lstQueue.List(T))            'afbeelding inladen


Ook het zetten van een backcolor lijkt me redelijk nutteloos als je iets verderop een picture inlaadt..
Uiteindelijk zijn we dus létterlijk terug naar mijn vorige voorbeeld ge-edit en is enkel het zetten van een random background vervangen door het laden van een plaatje m.b.v. LoadPicture.

Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub InitBoxes(iBoxCount As Integer)
    'Maakt iBoxCount Pictureboxes aan (kopiën van pcBox)
    Dim T As Integer
    
    For T = 0 To iBoxCount
        If T > 0 Then Load pcBox(T) 'De nulde hoeft niet ge-Load te worden ;-)
        With pcBox(T)
'            .BackColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)   'Random kleurtje
            .Picture = LoadPicture(lstQueue.List(T))            'Afbeelding inladen
            .Move (T - 1) * pcBox(0).Width, 0                   'Positie instellen
            .Visible = True                                     'Zichtbaar maken...
        End With
    Next
End Sub

Regel 8 is dus vervallen en vervangen door regel 9.

Ik weet niet waarom het bij jou "niet" werkt, maar je doet érgens iets fout. En dat kun je makkelijk oplossen door te debuggen en er (desnoods) stap voor stap door heen te steppen met je debugger.

Verder: Als je geen errors krijgt, en je code lijkt niet te doen wat het hoort te doen, dan moet je eens kijken of je niet ergens in je project een "On Error Resume Next" ofzo hebt staan (leuke "feature" van VB6 die al menig debug-uurtje heeft gekost).

Als laatste tip wil ik je nog meegeven even te kijken naar het .AutoRedraw property. Wat dat doet mag je zelf uitvogelen (F1 meppen), maar het zou een oplossing kunnen zijn mocht het nog steeds niet werken.
fluppie007 schreef op dinsdag 10 oktober 2006 @ 00:26:
Wie vertelt mij even wat ik fout doe met die control arrays, heb net een VB6.0 boek vastgehad
maar daar stonden maar 3 pagina's in over control arrays waar ik niet echt wijzer uit werd...
Zoals je al vaker verteld is: we doen hier niet aan "even". We zijn geen afhaalbalie voor kant-en-klare code (welke ik je overigens wél tot 2 keer toe heb aangereikt op een zilveren presenteerblaadje) en we zijn er al helemaal niet om voor jou te gaan zitten debuggen.
Als je dan toch code post, neem dan op z'n minst de moeite om het op te schonen, fatsoenlijk in te springen en als je een topic opent laat dan zien wat je geprobeerd hebt en wat er niet aan werkt(e).

Phrases als "waar ik niet echt wijzer uit werd" is (helaas) jouw probleem. Als je dan nog op z'n minst had gezegd wat je er niet aan snapte konden we je nog iets uitleggen of toelichten, maar "effe roepen" dat je wat gelezen hebt en het niet snapt maakt je topic echt niet opeens wel "goed".
fluppie007 schreef op dinsdag 10 oktober 2006 @ 00:26:
C:\Anyway\img\logo.jpg 'moet naar pcbox(0) ( of wordt 0 niet gebruikt ? )
"Of word 0 niet gebruikt"?? Dat had je in no-time kunnen zien als je ook actually had bestudeerd wat de code doet (For T = 0 to...) en als je daar al niet uit komt had je het nog met een debugger kunnen bekijken door op een strategisch punt een breakpoint (F9 rammen) te zetten of een watch aan te maken. Programmeren is ook debuggen en begrijpen wat (je) code doet. Als je die basiskennis ontbeert dan ben je hier in PRG (helaas) aan het verkeerde adres.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.