VB6 Waarom werkt dit niet?

Status
Niet open voor verdere reacties.

icelandic

Gebruiker
Lid geworden
22 sep 2014
Berichten
122
Inderdaad: waarom werkt dit niet:

PHP:
 Private Sub Command_Click()
Dim x As Integer

    For x = 1 To 20
        If Plaatje.Visible = True Then
            Plaatje.Visible = False
        Else
            Plaatje.Visible = True
        End If
    Next
    
End Sub

Waarbij "Plaatje" een Pixturebox is met de naam "Plaatje" met een willekeurige afbeelding.

Als ik daarentegen de for-next-loop even "weg-commend" dan gaat het plaatje door op de cmndknop te drukken wél aan en uit !

Weet iemand wat hier gaande is?:shocked:

Eric
 
waarom een loop? Als je het stukje code 20 keer draait, kom je weer op hetzelfde punt als waar je begon.
 
Je moet een plaatje laden.
Code:
Private Sub Form_Load()
    Set Plaatje.Picture = LoadPicture("C:\Users\Public\Pictures\Sample Pictures\tulips.jpg")
End Sub

@sjonr
Dit is waarschijnlijk een versimpelde testversie voor een groter vraagstuk.

p.s. sorry dat ik niet reageerde op je vorige vraag, maar ik denk dat voor beide vragen dezelfde oplossing geldt
 
Laatst bewerkt:
@Alphamax:

Leek redelijk, maar was het niet! :rolleyes:


@SjonR:

Het is een voorbeeldprogrammaatje, Ik wil weten waarom Plaatje.visible in een loop niet werkt maar als je de loop weghaalt en telkens op een knop drukt wél werkt!
 
Bericht#3 aangepast, reden: voortschrijdend inzicht.
 
Ik denk dat het zo dan maar moet.

Nu eerst even lunchen (de vrouw roept!) dan proberen...

Ik hoop dat het voldoende snel zal gaan,
en....
nu weet ik nóg niet waarom .visible in een loop niet wil!

Eric
 
Als je in de debug mode, stap voor stap door de code loopt, dan werkt het wel.
Zodra de code runtime loopt dan werkt het niet.

Zie bijlages
  1. download de bestanden
  2. verwijder de .txt extensie
  3. laad form1.frm en helpmij icelandic.vbp in VB6
of
  1. download de bestanden
  2. unzip het .zip bestand
  3. laad form1.frm en helpmij icelandic.vbp in VB6

Het project is niet precies wat jij zoekt maar zal wel een aantal aanknopingspunten bieden.
 

Bijlagen

  • Form1.frm.txt
    2,2 KB · Weergaven: 27
  • helpmij icelandic.vbp.txt
    583 bytes · Weergaven: 32
  • helpmij icelandic.zip
    1,4 KB · Weergaven: 22
Laatst bewerkt:
@ Alphamax:

Inderdaad vreemd dat het in de debug mode stap voor stap wél loopt en in runtime niet.
Is er iemand die hier een verklaring voor weet?


Alhoewel...., ik weet dat VB6 "event"-georiënteerd is. Het zou kunnen zijn dat er ná de eerste .visible True of False setting een "event" moet plaatsvinden om daarna pas de volgende setting te kúnnen doen.... Maar ja, VB2017 is object georiënteerd en daar gaat het ook niet.... Dus ik weet het niet:shocked:

Bedankt voor de codes. Je hebt me op een spoor gezet. ik heb ze gedownload en geïnstalleerd en dit loopt, weliswaar véél te traag.
Ik ga dit bekijken hoe dit effect veel sneller kan...

Eric
 
Inderdaad vreemd dat het in de debug mode stap voor stap wél loopt en in runtime niet.
Is er iemand die hier een verklaring voor weet?
Jawel.
Die loop in #1 gaat zo snel dat je het niet ziet gebeuren.
Zet er een pauze van b.v. een halve seconde in om het effect wel te zien.

Code:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) [COLOR="#008000"]'<- boven in je module[/COLOR]

Private Sub Command1_Click()
    Dim x As Integer
 
    For x = 1 To 20
        Plaatje.Visible = Not Plaatje.Visible
        DoEvents
        Sleep 500
    Next
End Sub
 
Laatst bewerkt:
Dank je wel Ed!
Het gaat al beter nu.

Dankzij HELPMIJ kom ik stapje voor stapje verder...:thumb:

Ik lees op verschillende engelstalige sites dat programmeurs heel voorzichtig moeten zijn met het commando SLEEP.
Over het algemeen wordt de toepassing ervan afgeraden! Oververhitting van processoren, vollopen van geheugens, crashes enzo…

Kun je daar iets over zeggen?
 
Die Sleep is er nu juist voor om te zorgen dat de processor niet voor 100% wordt belast tijdens een loop.
De redenen die je noemt kan ik me helemaal niets bij voorstellen.
 
Laatst bewerkt:
Inderdaad: waarom werkt dit niet:

Als ik daarentegen de for-next-loop even "weg-commend" dan gaat het plaatje door op de cmndknop te drukken wél aan en uit !

Weet iemand wat hier gaande is?:shocked:

Gezien ik geen duidelijke uitleg in dit topic zie staan, zal ik hier even een toelichting geven waarom dit gedrag optreedt:

Je update de UI binnen een event (button1_click()). Maar het daadwerkelijk updaten van de UI vindt pas plaats nadat het volledige event is afgehandeld.

Alhoewel...., ik weet dat VB6 "event"-georiënteerd is. Het zou kunnen zijn dat er ná de eerste .visible True of False setting een "event" moet plaatsvinden om daarna pas de volgende setting te kúnnen doen.... Maar ja, VB2017 is object georiënteerd en daar gaat het ook niet.... Dus ik weet het niet:shocked:

De oplossing hiervoor heeft Edmoor wel al gegeven: je dient dan zelf het updaten van de UI te forceren. Dit kan bijvoorbeeld met DoEvents.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan