[VB6] Multiscreen Image Scroll Programma

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

  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
Hoi,

Ben een progje aant maken om over 8 schermen beelden te laten scrollen. Nu ben ik bij de limiet
van 245 745 Twips / 16 343 Pixels form breedte gekomen. Mijn programma is gemaakt om
28x 1 280 pixels te laten scrollen = 35 840 Pixels
Probleem dus, wss komt het door mijn lame code

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Schuiven_Timer()

If Picture1.Left = Screen.Width * (AantalAfbeeldingenV - 1) Then

Picture1.Left = -Screen.Width + StapGrootteV
Else
Picture1.Left = Picture1.Left + StapGrootteV
End If

If Picture2.Left = Screen.Width * (AantalAfbeeldingenV - 1) Then
Picture2.Left = -Screen.Width + StapGrootteV
Else
Picture2.Left = Picture2.Left + StapGrootteV
End If

If Picture3.Left = Screen.Width * (AantalAfbeeldingenV - 1) Then
Picture3.Left = -Screen.Width + StapGrootteV
Else
Picture3.Left = Picture3.Left + StapGrootteV
End If

enzovoort


Dus nu al bv Picture1.Left aan 245745 komt dan gaat het niet meer
het komt er op neer dat ik nu 13 afbeeldingen kan laten scrollen maar
vanaf 14 werkt men progje niet meer. Hebben jullie mss een leuke "workaround"
om te afbeeldingen te laten "wachten" en op de juiste moment weer in scherm 1 ingeschoven te komen?

  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
workaround reeds gevonden :)

nu zoek ik iets om het flickeren tegen te gaan en het schuiven smoother te laten lopen

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je het geflikker tegen wil gaan zul je double buffering (en DirectX wellicht) moeten gebruiken in plaats van pictureboxes schuiven :X
Verder zie ik je Picture1, Picture2 enz. gebruiken. Gebruik dan op z'n minst een control array en een for-lusje ;)
Trust me, dit is niet de way to go :P

Edit:

Nou, heb me effe uitgeleefd voor je:

Maak een nieuw project. Pleur 1 picturebox op je form en noem die pcBox. Zet het index property op 0. Knal ook een timer control op je form en noem die MyTimer. Zet de interval op 100.
Copy / paste de volgende code in je form:
Visual Basic 6:
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
31
32
33
34
35
36
37
38
39
Option Explicit

Private Const cBoxCount As Integer = 8
Private Const cStep = 10   'Scroll-speed is 1/10 van de picturebox breedte

Private Sub Form_Load()
    Me.Width = pcBox(0).Width * (cBoxCount - 1) 'Initieële form-breedte zetten
    InitBoxes cBoxCount                         'Pictureboxes maken
    myTimer.Enabled = True                      '"Scroll-loop" starten
End Sub

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
            .Move (T - 1) * pcBox(0).Width, 0                   'Positie instellen
            .Visible = True                                     'Zichtbaar maken...
        End With
    Next
End Sub

Private Sub myTimer_Timer()
    ScrollBoxes
End Sub

Private Sub ScrollBoxes()
    Dim T As Integer
    Dim lNewLeft As Long
    
    For T = 0 To cBoxCount                                      'Alle pictureboxes
        lNewLeft = pcBox(T).Left + (pcBox(0).Width / cStep)     'Bereken nieuwe X pos
        If lNewLeft > Me.Width Then lNewLeft = -pcBox(T).Width  'Van "form af gevallen"?
        pcBox(T).Left = lNewLeft                                'Nieuwe .left zetten
    Next
End Sub

Voila. Runnen die hap :P

In deze code zie je het gebruik van control-arrays zoals ik bedoelde. Dit werkt met 8, 3, 11 en 45 pictureboxes zodat je niet al je "Picturebox1", "Picturebox2" etc. hoeft te hard-coden. Kwestie van de const aanpassen en je code hobbelt gewoon verder. En uiteraard hoeft die const geen const te zijn dan ;)

Als je nu het "autoredraw" property van je form op true zet dan heb je een (uber-simpele, amper werkende :P ) vorm van double buffering.

Maar again, trust me: Dit (pictureboxes, timers en dat soort flauwekul) is niet de way to go met wat jij wil bereiken...

Overigens ben ik wel benieuwd wat voor workaround je hebt gevonden.

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


  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
ik zal men source effe uploaden voor je
of mailen ofzo ? ik heb de dirextx sdk al gedownload.
waar vind ik meer over die double buffer ?
de beeldkaarten die ik gebruik zijn
2x Matrox G450 MMS met RAMdac van 360 mhz

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
fluppie007 schreef op vrijdag 06 oktober 2006 @ 14:48:
ik zal men source effe uploaden voor je
Waarom? Wat moet ik er mee? Je zult toch echt zélf moeten devven hoor ;)
fluppie007 schreef op vrijdag 06 oktober 2006 @ 14:48:
of mailen ofzo ? ik heb de dirextx sdk al gedownload.
Nou, dan begin je dus met lezen van de manuals en verdiep je je in DirectX en dan ga je aan de slag.
fluppie007 schreef op vrijdag 06 oktober 2006 @ 14:48:
waar vind ik meer over die double buffer ?
Precies waar je alle andere dingen ook vindt: Google, GoT Search, Help files, MSDN etc.
fluppie007 schreef op vrijdag 06 oktober 2006 @ 14:48:
de beeldkaarten die ik gebruik zijn
2x Matrox G450 MMS met RAMdac van 360 mhz
In priciepe maakt dat voor de software geen ene moer uit.

Anyhow, ik denk dat je m'n "hulp" een beetje verkeerd begrepen hebt. Je zult toch écht zelf aan de slag moeten gaan met programmeren, je kunt (en moet) niet van ons verwachten dat wij het "wel effe" voor je gaan oplossen. Lees ook even hier en hier.

[ Voor 6% gewijzigd door RobIII op 06-10-2006 15:01 ]

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


  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
hey,

Dat weet ik best ook wel :) maar ik dacht gewoon mss dat die source meer duidelijkheid zou
scheppen dat je kon zien waar de knelpunten zaten en wat die zogenaamde workaround was
met die textboxen die de telling doen enzo :)

  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
hey heb nog de code wat liggen uitbouwen !
vind het een goede basis !!!
dit heb ik nu

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Option Explicit 'Make sure VB will return an error if we don't declare ALL our variables

'Private Const cBoxCount As Integer = 9
'Private Const iBoxCount As Integer = 49
Dim cBoxCount As Integer
Dim iBoxCount As Integer

'Private Const cStep As Integer = 2500 'Scroll-speed is 1/10 van de picturebox breedte
Dim cStep As Integer

Private fso As New FileSystemObject
Private strm As TextStream
Private strName As String


Private Sub Form_Load()
Dim Filename
Dim Filename2
    Filename = "C:\Anyway\instellingen.ini"
    Filename2 = "C:\Anyway\playlist.ini"

Set strm = fso.OpenTextFile(Filename, ForReading)
    With strm
        cBoxCount = .ReadLine
        iBoxCount = .ReadLine
        cStep = .ReadLine
        .Close
    End With
'lijst inladen met url's naar afbeeldingen

Dim FF As Long, tmpInput As String
  lstQueue.Clear  'Lijst leegmaken
    FF = FreeFile   'playlist inladen
    Open Filename2 For Input As FF  'Openen playlist
        Do Until EOF(FF)    'herhalen tot einde bestand
            Line Input #FF, tmpInput    'volgende lijn
            lstQueue.AddItem tmpInput   'toevoegen aan de lijst
        Loop
    Close FF    'stop

'lijst inladen gedaan

Form1.Width = Screen.Width
Form1.Height = Screen.Height
Form1.Left = 0
Form1.Top = 0

pcBox(0).Width = Screen.Width
pcBox(0).Height = Screen.Height
pcBox(0).Top = 0
pcBox(0).Left = 0
    
    Me.Width = pcBox(0).Width * (cBoxCount - 1) 'Initieële form-breedte zetten
    InitBoxes cBoxCount                         'Pictureboxes maken
    myTimer.Enabled = True                      '"Scroll-loop" starten


End Sub


Private Sub InitBoxes(iBoxCount As Integer)
    'Maakt iBoxCount Pictureboxes aan (kopiën van pcBox)
    Dim T 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
        Afbeelding = lstQueue.ListIndex + 1
        AfbeeldingPlaats = lstQueue.List(Afbeelding)
        Text1.Text = AfbeeldingPlaats
        
        With pcBox(T)
            'Afbeelding = lstQueue.ListIndex + 1
            'AfbeeldingPlaats = lstQueue.List(Afbeelding)
            'Text1.Text = AfbeeldingPlaats
            
            '.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)
        
        End With
    Next
End Sub

Private Sub myTimer_Timer()
    ScrollBoxes
End Sub

Private Sub ScrollBoxes()
    Dim T As Integer
    Dim lNewLeft As Long
    
    For T = 0 To cBoxCount                                      'Alle pictureboxes
        lNewLeft = pcBox(T).Left + (pcBox(0).Width / cStep)     'Bereken nieuwe X pos
        If lNewLeft > Me.Width Then lNewLeft = -pcBox(T).Width  'Van "form af gevallen"?
        pcBox(T).Left = lNewLeft                                'Nieuwe .left zetten
    Next
End Sub

Private Sub pcBox_Click(Index As Integer)
myTimer.Enabled = False
Unload Me
End Sub



nu is het probleem om in elke kopie 1 afbeelding uit de lijst te laden, hoe laat ik dit "loopen" ?
allez ja nu laad hij alleen de 1e van de lijst erin... :/

  • fluppie007
  • Registratie: April 2005
  • Laatst online: 04-02 13:22
nu heb ik deze sub geprobeert maar die doet het ook ni :'(

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
            
            '.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

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ja, zo werken we hier (gelukkig) niet ;)
"Hij doet 't ni :'( " kunnen we hier niets mee en we gaan niet in de lappen code die je produceert zitten spitten of we misschien een fout kunnen spotten.

Je zult op z'n minst met een foutmelding moeten komen, zelf wat inzet tonen en at least een beetje zelf debuggen. Al dat mis ik in je topic voortdurend, terwijl je het notabene nog voorgekauwd krijgt?

Met deze instelling kunnen we hier niet werken. Kijk eens in PRG rond naar andere topics hoe die lopen. Lees dit eens door, en dan met name de quickstart. En probeer het dan gerust opnieuw als je er niet uit komt; maar hou je dan ook aan die quickstart en het algemene (PRG) beleid. Het is niet de bedoeling dat we je hier aan je handje houden.

[ Voor 6% gewijzigd door RobIII op 08-10-2006 18:21 ]

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

Pagina: 1

Dit topic is gesloten.