Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

492 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

28 april 2024, 19:04:00

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: MSChart for VB6  (gelezen 22690 keer)

0 leden en 1 gast bekijken dit topic.

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #30 Gepost op: 25 april 2012, 18:32:46 »
Hoi Peter,
De code met 10 rijen in het grafiekarray gaf een goede grafiek. Dit uitbreiden tot 159 rijen geeft een blokkering op MSChart.RowCount = NumRegels(1) - 3500 + 1 = 159. Als ik daar een break op zet en .RowCount uitlees staat daar al een waarde in. Dit is waarschijnlijk de waarde van de default waarde van de random instelling. Waarom vliegt het programma er op deze regel uit en blokkeert als ik de regel uitvoer. Volledigheidshalve hecht ik de tekst van de code hierbij aan.
 
 
 
Jan

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #31 Gepost op: 25 april 2012, 19:25:32 »
Hoi Jan,

Citaat
Waarom vliegt het programma er op deze regel uit en blokkeert als ik de regel uitvoer.
Geen foutmelding?
Het programma vliegt eruit? Ik neem aan dat je het draait in de VB6 IDE. Wordt VB6 ook afgeschoten?

Plaats een screenshot van de foutmelding, of de melding dat het programma niet meer goed werkt.

Ik ga later nog je code analyseren, het is nu even druk...


Peter

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #32 Gepost op: 25 april 2012, 22:25:26 »
Hoi Jan,

Ik heb je code bekeken.
De enigste reden die ik kan bedenken wat er mis kan gaan met de regel:
MSChart1.RowCount = NumRegels(1) - 3500 + 1         ' blokkeert hier. NumRegels(1) -3500 + 1 = 159
is dat .RowCount kleiner dan 0 wordt. Ik krijg dan Run-time error '1101': Bad function argument

Ik zie de berekening 3500 + 1 liever in een variabele, of anders gewoon 3501:
a) Dat leest prettiger.
b) Je code hoeft dat niet steeds te berekenen in de For...Next lus, dus is wat sneller.
c) Je bent veel sneller met wijzigen als je dit op 1 plaats doet, bijv. zoiets:
' Stel de gegevens in.
offset = 3500 + 1
For i = offset To NumRegels(1)
    If i = offset Then
        Koersen(i - offset, 0) = RTrim$(Left(Datum(i, 1), 4))
    End If
    If i > offset Then          ' Om ongelijkheid op dag 1 te voorkomen
        If Left(Datum(i, 1), 4) <> Left(Datum(i - 1, 1), 4) Then
        ' labeltekst:  pas jaartal aan
            Koersen(i - offset, 0) = RTrim$(Left(Datum(i, 1), 4))
        End If
        If Left(Right(Datum(i, 1), 4), 2) <> Left(Right(Datum(i - 1, 1), 4), 2) Then
        ' labeltekst: pas maandnummer aan
            MaandNummer = RTrim$(Left(Right(Datum(i, 1), 4), 2))
            Call MaandNummersOmzetten(MaandNummer, MaandTekst)
            Koersen(i - offset, 0) = MaandTekst
        End If
        If (Left(Datum(i, 1), 4) = Left(Datum(i - 1, 1), 4) And Left(Right(Datum(i, 1), 4), 2) = Left(Right(Datum(i - 1, 1), 4), 2)) Then
            Koersen(i - offset, 0) = " "
        End If
        Koersen(i - offset, 1) = OpenK(i, 1)
    End If
Next i

[info]De For...Next lus kan trouwens veel beter (=sneller en logischer) ![/info]

Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #33 Gepost op: 26 april 2012, 01:46:48 »
Hoi Peter,
NumRegels is het totaal aantal rijen in het koersbestand en verandert dus dagelijks. Bovendien wordt hij nooit negatief. In dit geval loopt de telling van 1 tot en met 159, want NumRegels(1) is 3659. Deze NumRegels(1) - 3500 + 1 vervangen door een constante kan dus niet. Elk fonds heeft zijn eigen periode. De meeste beginnen op 1-1-1998 en eindigen op heden, maar er zijn er ook met minder historie. Ik dacht eerst dat het resultaat van NumRegels(1) - 3500 + 1 een te groot bedrag werd voor RowCount, maar dat lijkt me niet. De bedoeling is dat ik een grafiek krijg van de meest recente historie, vandaar dit systeem. Ik krijg geen foutmelding, alleen als ik er met F8 doorloop blijft hij op RowCount een hele tijd hangen en reageert dan niet meer. VB6 blijft gewoon aan, maar is geblokkeerd. Rara wat kan dat zijn?
 
 
 
Jan

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #34 Gepost op: 26 april 2012, 20:49:20 »
Hoi Jan,

Citaat
NumRegels is het totaal aantal rijen in het koersbestand en verandert dus dagelijks. Bovendien wordt hij nooit negatief. In dit geval loopt de telling van 1 tot en met 159, want NumRegels(1) is 3659.
Euh. dit klopt niet helemaal, althans zoals ik het lees.
a) Als NumRegels(1) kleiner is dan 3498, dan wordt de uitkomst van NumRegels(1) - 3500 + 1 kleiner dan 0 en dat is ongeldig voor .RowCount.
b) Als NumRegels(1) 3659 is, dan wordt .RowCount dus 3659-3500+1 = 160 !

Citaat
Deze NumRegels(1) - 3500 + 1 vervangen door een constante kan dus niet.
Ik bedoel alleen 3500 + 1 vervangen, niet NumRegels(1) - 3500 + 1

Citaat
VB6 blijft gewoon aan, maar is geblokkeerd. Rara wat kan dat zijn?
En wat doe je dan precies om verder te gaan?
Ik blijf het een vreemde zaak vinden.

Zorg dat deze eigenschappen leeg zijn:
MSChart1.DataMember
MSChart1.DataSource


Probeer eens het volgende:
Plaats de code MSChart1.Repaint = False voor de regel: MSChart1.ColumnCount = 2
Plaats de code MSChart1.Repaint = True na de regel: .ChartData = Koersen
Bovenstaande zorgt ervoor dat de grafiek tijdens het opbouwen niet bij elke wijziging ververst wordt.


Peter
« Laatst bewerkt op: 26 april 2012, 21:08:15 door Peter »

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #35 Gepost op: 2 mei 2012, 18:45:00 »
Dag Peter,
Ik zal je suggestie uitvoeren. Ik heb je reactie nu pas voor het eerst gelezen. Ik heb wat ik testen wilde, nl. MSChart, nu getest met een nieuw project van maar 1 form. Het programma kan dus niet gehinderd worden door andere dingen in het programma. Maar ook met dit simpele programma treedt de vertraging op. Het blijven hangen op .RowCount wordt  kennelijk door de lange vertraging veroorzaakt. Kan MSChart de boosdoener zijn?  Misschien moet ik een zoeken naar een andere chart-component.
 
 
Jan

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #36 Gepost op: 2 mei 2012, 19:27:50 »
Hoi Jan,

Citaat
Ik heb wat ik testen wilde, nl. MSChart, nu getest met een nieuw project van maar 1 form. Het programma kan dus niet gehinderd worden door andere dingen in het programma. Maar ook met dit simpele programma treedt de vertraging op.
Tja, vreemd hoor.
Probeer eens het volgende:
Maak een .exe van dit simpele VB project.
Draai de Setup Wizard, zodat je het kan installeren op een andere computer .
Installeer het op een andere computer waar de VB6 IDE niet op staat.
Hoe werkt het programma daar ook traag?

Post eventueel dit testprogje als bijlage zodat we ook wat proefjes kunnen doen.


Peter
 

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #37 Gepost op: 8 mei 2012, 18:22:18 »
Hoi Peter,
Ik kan de .exe niet maken omdat ik op MSChart1.DataSource de fout "Method or data member not found" krijg, hoewel de betreffende eigenschap wel bestaat, hetgeen blijkt als je MSChart1. intypt.  Desondanks geef ik het gekortwiekte programma als bijlage. Omdat het .vbp bestand niet geaccepteerd wordt als bijlage geef ik alleen het form en het gegevensbestand (zonder de map DATA). Test alleen Command5 (na via File het bestand Open van de openginskoers geopend te hebben) en niet de overige commands. Deze laatste zijn nog niet gebruikt en toch gekopieerd vanuit Command5, omdat ik niet verwachtte zoveel problemen te krijgen. Ook bevat routine OpenFileKoersen de voor dit gekortwiekte project overtollige code.
 
 
 
Jan
 
 
Jan

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #38 Gepost op: 8 mei 2012, 21:42:13 »
Hoi Jan,

MSChart1.DataSource = ""
Dit kan niet. De eigenschap .DataSource is van het type datasource en niet van het type string
Je kan dus geen lege string instellen.
Zorg dat het eigenschap DataSource in het properties-venster van de VB IDE leeg is.

Ik heb je bijlages omgezet naar een VB project. Dat ging niet vanzelf.
De control MSCHART werd niet geaccepteerd, hoewel de component-header voor MSCHART exact hetzelfde was.
Ik heb daarom het MSCHART component in je formulier verwijdert en vervangen door degene die op mijn systeem staat.
Daarmee lukt het wel een grafiek te produceren:


Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #39 Gepost op: 9 mei 2012, 11:57:53 »
Hoi Peter,
Als ik de regel met MSChart1.DataMember = "" op tekst zet, krijg ik de grafiek ook, maar de streepjes op de x-as zijn doorgetrokken als vertikale lijnen (zie screenshot). De chartcomponenten die ik heb zijn MSChart.ocx met datum 16-1-1997 en MSChart20.ocx met datum 24-3-2009.
Je maakte eerder een opmerking over VB5. Is het aan te raden deze te deïnstalleren? Ik had VB5 erop gelaten, omdat ik vreesde voor componentproblemen bij distributie als ik VB5 eraf haalde. Dat gaat namelijk nogal eens fout.
 
 
Jan

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #40 Gepost op: 9 mei 2012, 15:21:07 »
Hoi Peter,
Dit is mijn grafiek (zie screenshot). Het in mijn vorige reactie vermelde probleem met de X-as is dus verdwenen, maar ik zou nog wel willen weten wat dat veroorzaakte. 
Hoe bereik ik dat er een vertikaal streepje gezet wordt wanneer er een X-as label geplaatst is?
Waarom wordt bovenin de grafiek C2 vermeld? Ik heb volgens mij maar één legend gedefinieerd.
 
Jan
 

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #41 Gepost op: 9 mei 2012, 19:29:37 »
Hoi Jan,

De vertikale strepen had ik instelbaar gemaakt met de checkbox "Vertikale gridlijnen":

Private Sub chkVertikaleGridlijnen_Click()
'vertikale gridlijnen aan/uit zetten
With MSChart1.Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen
   .Style = .Style Xor 1
End With
End Sub

Citaat
De chartcomponenten die ik heb zijn MSChart.ocx met datum 16-1-1997 en MSChart20.ocx met datum 24-3-2009.
Waarom gebruik je 2 verschillende MSChart componenten, 1 is toch voldoende ?

Citaat
Je maakte eerder een opmerking over VB5. Is het aan te raden deze te de-installeren?
Tja, theoretisch zou je VB5 kunnen de-installeren. Eigengemaakte componenten zullen behouden blijven.
Praktisch gezien ga ik geen 100% garantie geven. Ik had eigenlijk verwacht dat de VB6 installer aan een melding had gegeven dat er een oudere versie ge-installeert is.

Citaat
Waarom wordt bovenin de grafiek C2 vermeld? Ik heb volgens mij maar één legend gedefinieerd.
In je code staat MSChart1.ChartData = Koersen
De array Koersen is ingesteld met Dim Koersen(X,Y). Y = 0 to 2.
Y geeft hier het aantal lijnen aan, minus 1. Element 0 zijn namelijk de tijdstippen (X-as). Element 1 en 2 zijn datapunten (Y-as) en dus heeft je grafiek 2 lijnen.
"C2" is de standaard naam voor de 2e lijn.

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #42 Gepost op: 9 mei 2012, 21:27:12 »
Hoi Peter,
Citaat
Waarom gebruik je 2 verschillende MSChart componenten, 1 is toch voldoende?
De ene MSChart heet MSChart Control en de andere heet MSChart Control 6.0 (SP6) (OLEDB). Als ik ze beide aanvink kan ik het vinkje bij de eerste niet weghalen, maar bij de tweede wel. Omdat bij de tweede (Visual Basic) 6.0 vermeld is met Servicepack 6
dacht ik in tweede instantie het beste die te gebruiken, maar ik kan hem dus weglaten en alleen de eerste gebruiken.
 
 
Jan

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #43 Gepost op: 9 mei 2012, 22:03:30 »
Hoi Jan,

Citaat
De ene MSChart heet MSChart Control en de andere heet MSChart Control 6.0 (SP6) (OLEDB).
Klopt, is hier ook.

Citaat
Als ik ze beide aanvink kan ik het vinkje bij de eerste niet weghalen, maar bij de tweede wel.
Dat kan, een component dat op een formulier staat, is in 'gebruik' en kan je dus niet uitvinken (=verwijderen). Alleen ongebruikte componenten kan je verwijderen.

Citaat
Omdat bij de tweede (Visual Basic) 6.0 vermeld is met Servicepack 6
dacht ik in tweede instantie het beste die te gebruiken, maar ik kan hem dus weglaten en alleen de eerste gebruiken.
Goeie gedachte, maar blijkbaar heb je dus de eerste (mschart.ocx) in gebruik en niet de tweede (mschart20.ocx).
Het vreemde is echter dat de broncode die je stuurde, de mschart20.ocx gebruikt? Nogal verwarrend.

Hoe nu verder:
Open je VB testproject.
Verwijder alle grafiek-componenten op de formulieren.
Open de componentenlijst en haal de vinkjes weg bij MSChart Control en MSChart Control 6.0 (SP6) (OLEDB).
Klik op Toepassen.
(als het goed is zijn de grafiek-ikoontjes nu verdwenen in de componentenlijst (links naast je programma-code.)
Open de componentenlijst opnieuw en plaats alleen een vinkje  MSChart Control 6.0 (SP6) (OLEDB).
 Klik op Toepassen.
(er staat nu 1 grafiek-ikoontje in de componentenlijst.)
Plaats het grafiek-component in een formulier en pas de grootte aan.
Sluit je VB project en open het opnieuw.

Test je programma. Hoe gaat het nu?


Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: MSChart for VB6
« Reactie #44 Gepost op: 10 mei 2012, 20:51:51 »
Hoi Peter,
Nu gaat het prima. Ik vermoed dat de eerdere problemen te maken hadden met de problemen onder Beveiliging. Het programma bleef dan steken en omdat het vaak heel lang duurde voor het programma verder ging, klikte ik waarschijnlijk te snel voor de tweede keer en blokkeerde de zaak daarmee.
Met de grafiek moet ik nu dankzij je hulp nu wel verder kunnen. Het enige waar ik niet uit ben is het manipuleren met de ticks. Ik wil een tick boven elk label en tevens eens per 5 dagen. Hoe bereik ik dat?
Overigens hartelijk bedankt voor je assistentie, het heeft je ongetwijfeld veel tijd gekost.
 
 
Jan