Register for your free account! | Forgot your password?

You last visited: Today at 01:24

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Tutorial MSChart

Discussion on Tutorial MSChart within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2010
Posts: 594
Received Thanks: 98
Tutorial MSChart

Das MSChart ist die VB6 eigene Darstellungskomponente für Diagramme. Es gibt auch diverse externe Komponenten wie zb sevgraph, die oft optisch schöner und auch flexibler in ihren Möglichkeiten sind. Da diese Komponenten aber meist kostenpflichtig sind, möchte ich in diesem Tutorial das MSChart erklären.

Um ein Diagramm mit MSChart zeichnen zu können muss als erstes die MSChart Komponente in unser Projekt eingebunden werden. Das geht wie folgt:

Im Menüpunkt Projekt->Komponenten das Häckchen bei "Microsoft Chart Control 6.0 (OLEDB)" setzen. Nun erscheint in der Werkzeug Leiste ein kleines Diagramm Symbol. Damit können wir nun ein Diagramm in unser Formular zeichnen.
Nachdem wir das Diagramm an der richtigen Stelle positioniert haben, können wir die ersten Eigenschaften einstellen. Die Einstellungen können aber auch zur Laufzeit über unseren Code vor genommen werden. In meinem Beispiel habe ich das Meiste zur Laufzeit geändert. Hier gibt es eine Übersicht zu den Einstellmöglichkeiten des MSCharts aus dem MSDN.

MSChart-Steuerelement: Eigenschaften, Methoden und Ereignisse



Diagramm mit Daten füllen

Die ersten Einstellungen sowie das Füllen mit Daten wird am einfachsten über einen With Block vorgenommen:

erstes Beispiel: 1 Balken, Daten befinden sich im einem array

Code:
 
With MSChart1 'MSChart1 ist der Name unseres Diagrammes
 
    .Repaint = true ' Gibt an ob das Diagramm bei Änderungen neu gezeichnet wird
    .chartType = 1 ' Diagrammtyp (1 ist ein  einfaches Balkendiagramm)
    .RowCount = 12 ' Zahl der Werte (Bei mir 12, pro Monat einen Balken)
    .ColumnCount = 1 ' Zahl der Linien
    .Column = 1 ' Legt die aktuell verwendete Linie fest
 
    For Position = 1 To .RowCount 'Position ist eine Laufvariable vom Typ Integer
    
        .Row = Position 'Festlegen welchen Wert wir festlegen wollen
    .Data = wertearray1(position) 'Hier wird der Tatsächliche Wert gesetzt
        .RowLabel = Position ' Beschriftung
    Next Position
End with

zweites Beispiel: 2 Balken, Daten befinden sich in zwei arrays


Code:
 
With MSChart1 'MSChart1 ist der Name unseres Diagrammes
 
    .Repaint = true ' Gibt an ob das Diagramm bei Änderungen neu gezeichnet wird
    .chartType = 1 ' Diagrammtyp (1 ist ein  einfaches Balkendiagramm)
    .RowCount = 12 ' Zahl der Werte (Bei mir 12, pro Monat einen Balken)
    .ColumnCount = 2 ' Zahl der Linien
   
 
    For Position = 1 To .RowCount 'Position ist eine Laufvariable vom Typ Integer
        .Column = 1 ' Legt die aktuell verwendete Linie fest
        .Row = Position 'Festlegen welchen Wert wir festlegen wollen
    .Data = wertearray1(position) 'Hier wird der Tatsächliche Wert gesetzt
        .RowLabel = Position ' Beschriftung
 
    .Column = 2 ' Legt die aktuell verwendete Linie fest
        .Row = Position 'Festlegen welchen Wert wir festlegen wollen
    .Data = wertearray2(position) 'Hier wird der Tatsächliche Wert gesetzt
        .RowLabel = Position ' Beschriftung
 
    Next Position
End with
drittes Beispiel: 1 Balken Daten befinden sich in einer Access Datenbank


Code:
 
With MSChart1 'MSChart1 ist der Name unseres Diagrammes
 
    .Repaint = true ' Gibt an ob das Diagramm bei Änderungen neu gezeichnet wird
    .chartType = 1 ' Diagrammtyp (1 ist ein  einfaches Balkendiagramm)
    .RowCount = 12 ' Zahl der Werte (Bei mir 12, pro Monat einen Balken)
    .ColumnCount = 1 ' Zahl der Linien
    .Column = 1 ' Legt die aktuell verwendete Linie fest
 
    If cngraph.State = adStateOpen Then 'Verbindung Schließen falls sie noch offen ist
      cngraph.Close
    End If
        
    cngraph.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 'Verbindung zur Datenbank herstellen
            "Jet OLEDB:Database Password='passwort';Mode=Share Deny None;" & _
            "Persist Security Info=False;Data Source =" & App.Path & "\" & "vertraege.mdb;"
    cngraph.CursorLocation = adUseClient
        
    If rsgraph.State = adStateOpen Then 'RecordSet schließen falls es noch geöffnet ist
      rsgraph.Close
      Set rsgraph = Nothing
    End If
     
    rsgraph.Open "SELECT  Count(idnr) AS AnzahlvonIDNr FROM tbl_vertraege, cngraph, adOpenDynamic, adLockOptimistic
    
    For Position = 1 To .RowCount 'Position ist eine Laufvariable vom Typ Integer
        if not rs.eof then
         .Data = rsgraph("AnzahlvonIDNr") 'Hier wird der Tatsächliche Wert gesetzt
         .RowLabel = Position ' Beschriftung
         rsgraph.movenext
    end if
    Next Position
    
End with
P.S. Man kann ein MSChart auch mit der .Datasource = rs füllen. das habe ich jedoch nie so wirklich ausprobiert.

Beschriftung

Jetzt haben wir unser Diagramm mit Werten gefüllt. Weitere Eigenschaften des Diagramms müssen aber ggf noch angepasst werden. Hier z.B. die Beschriftung der X-Achse. Sie ist momentan einfach nur mit einer Zahl beschriftet. Wir könnten z.B. eine Funktion einbauen die aus den Zahlen die Monatskurzformen bildet.

Code:
Public Function zahltomonatshort(ByVal I As Integer) As String
Select Case I
Case 1:
zahltomonatshort = "Jan"
Case 2:
zahltomonatshort = "Feb"
Case 3:
zahltomonatshort = "März"
Case 4:
zahltomonatshort = "April"
Case 5:
zahltomonatshort = "Mai"
Case 6:
zahltomonatshort = "Juni"
Case 7:
zahltomonatshort = "Juli"
Case 8:
zahltomonatshort = "Aug"
Case 9:
zahltomonatshort = "Sep"
Case 10:
zahltomonatshort = "Okt"
Case 11:
zahltomonatshort = "Nov"
Case 12:
zahltomonatshort = "Dez"
End Select
End Function
Anschließend ersetzen wir

Code:
.RowLabel = Position ' Beschriftung
durch


Code:
.RowLabel = zahltomonatshort(Position) ' Beschriftung
Skalierung der Y-Achse

In meinem Projekt wollte ich zunächst, dass die Y-Achse nicht direkt über dem höchsten Balken endet. Dazu baut man in die Schleife in der das Diagramm gefüllt wird zunächst eine Maxwert Ermittlung ein:


Code:
If maxwert < rsgraph("AnzahlvonIDNr") Then 'Bzw. Anstatt des Recordsets das Array in den anderen Beispielen
    maxwert = rsgraph("AnzahlvonIDNr")
End If
Dann klicken wir rechts auf unser Diagramm->Eigenschaften. Dort wählen wir den Reiter "Achse", wählen die Y-Achse und deaktivieren die "Automatische" Skalierung". Nachdem wir die Schleife durchlaufen haben fügen wir folgende Zeile ein:


Code:
.Plot.Axis(VtChAxisIdY).ValueScale.Maximum = maxwert + 10
Dies hat den Nachteil dass die Y-Achse nun mit krummen Werten beschriftet ist. Dieses Problem konnte ich bisher noch nicht befriedigend lösen, aber ein wenig umgehen.
Ich bringe den maxwert einfach auf eine gerade Zahl und setze die Schritte zwischen den einzelnen Beschriftungen auf 2.

Dazu ersetzen wir die Zeile die bisher das Maximum festgelegt hat, also:

Code:
.Plot.Axis(VtChAxisIdY).ValueScale.Maximum = maxwert + 10
durch

Code:
If EvenNumber(maxwert + 10) = True Then 'gerade
        .Plot.Axis(VtChAxisIdY).ValueScale.Maximum = maxwert + 10
        .Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = (maxwert + 10) / 2
    Else 'ungerade
        .Plot.Axis(VtChAxisIdY).ValueScale.Maximum = maxwert + 9
        .Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = (maxwert + 9) / 2
End If
zusätzlich müssen wir noch die Funktion EvenNumber implementieren:


Code:
Public Function EvenNumber(ByVal n As Long) As Boolean
  EvenNumber = (n And 1&) = 0&
End Function
Wenn wir von vorne Herein wissen unsere Werte bewegen sich nur in einem bestimmten Rahmen müssen wir das ganze nicht zur Laufzeit festlegen und können einfach in den Eigenschaften des Diagramms die Skalierung einstellen. Dazu klicken wir rechte
Maustaste auf das Diagramm->Eigenschaften, dort den Reiter Achse. Dann die Y Achse wählen und den Maximalwert sowie die Skalierung festlegen.

Jetzt werde ich auf einige bisher im Forum gestellte Fragen zum Thema MSChart eingehen und sie versuchen zu beantworten soweit es mir möglich ist. Die meisten Fragen sind natürlich schon von anderen Leuten beantwortet worden.

F: [...]Wenn ich mit der Maus auf eine Stelle im Graphen klicke, dass mir der Wert dann in einer MsgBox ausgegeben wird?
A: Hier können wir das Ereignis PointSelected verwenden. Es eignet sich aber nur bei bestimmten Diagramm Typen und ich finde es teilweise sehr unkomfortabel weil man ganz genau den Punkt mit der Maus treffen muss.

[/code]
Private Sub MSChart1_PointSelected(Series As Integer, DataPoint As Integer, MouseFlags As Integer, Cancel As Integer)
With MSChart1
.Row = DataPoint
End With
MsgBox MSChart1.Data
End Sub
[/code]

F: [...]möchte ich gerne einen Balken je nach Wert unterschiedliche Farben zuweisen. Hat einer eine Ahnung wie man das im Quellcode macht?
A: Zunächst einmal gibt es die Möglichkeit die Farbe der Balken in den Eigenschaften der MSChart zu ändern.Dazu klicken wir rechts auf unser Diagramm->Eigenschaften. Dort wählen wir den Reiter Datenreihenfarbe. In der Frage wurde jedoch nach einer Änderung der Farbe je nach Wert gefragt. D.h. wir müssen die Farbe zur Laufzeit im Quellcode ändern.
Dazu nehmen wir folgende Zeile:


Code:
if maxwert > 0 and maxwert < 50 then
 MSChart1.Plot.SeriesCollection(1).DataPoints(-1).Brush.FillColor.Set 0, 0, 255 'SeriesCollection(1) gibt an welche Linie 
 
end if  
if maxwert > 50 and maxwert < 100 then
 MSChart1.Plot.SeriesCollection(1).DataPoints(-1).Brush.FillColor.Set 255, 255, 255 'SeriesCollection(1) gibt an welche Linie 
end if
'usw.

Anstatt .set 255, 255, 255 am ende kann man auch .red .blue oder .green verwenden oder aber .set und dann die RGB werte auf die gewünschte farbe setzen. (Den gewünschten RGB Wert kann man mit vielen Grafik Programmen ermitteln)

F: Ich würde gerne die Gitterlinien in meiner MSChart-Darstellung ausblenden (y-Achse) da bei Darstellung vieler Datenpunkte die Kurve nur noch schlecht sichtbar ist. Kann mir da jemand einen Tipp geben?
A: rechte Maustaste aufs Diagramm->Eigenschaften. Dort der Reiter Achsenraster.

F: Ich würde gerne bei einem MsChart Objekt die Hintergrundfarbe ändern, finde aber keine passende Option dafür! Wisst Ihr, ob das überhaupt möglich ist?
A: rechte Maustaste aufs Diagramm->Eigenschaften. Dort der Reiter Backdrop. Als Muster irgendein Muster wählen und dann die Farbe wählen.

F: Wie kann ich ein MSChart ausdrucken?
A: MSChart-Diagramm ausdrucken


phuu^^ das hat jetzt aber gedauert^^
.:ComputerKränk:. is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[Video Tutorial] - Very Easy Tutorial How to make your Own Wallhack in C++
09/01/2012 - Soldier Front Hacks, Bots, Cheats & Exploits - 16 Replies
Hello Everyone!Hellow Philippines - Mabuhay Pinoy Cheaters! Confidentials000 of GZP and Me Babyface21 ay iisa lang! Today i Will Teach you on How to Make Your Own Wallhack in C++ Very Simple By Video Tutorials Step by Step Part 1 - 3 Dont Ask me to Release my Private Wallhack coz i Need it to still Undetected
[Tutorial] XHTML Anfänger Tutorial
11/04/2009 - Tutorials - 7 Replies
Hi @, hier findet ihr ein relativ umfrangreiches Tutorial zu XHTML. DIE EINLEITUNG: Um mit einer Website zu beginnen, sollte man als Erstes die Grundlagen des World Wide Webs verstehen. Als allererstes sollte man sich darüber klar werden, dass eine Homepage nicht auf dem Computer gespeichert wird, sondern auf einem Server, der mit jedem PC der Welt in Kontakt treten kann. Er ist der Anbieter. Jeder Anbieter braucht Jemanden oder etwas, der das abruft, so etwas nennt man Client und...
[Tutorial] Vac Hack Tutorial + Video
10/03/2008 - Dekaron Exploits, Hacks, Bots, Tools & Macros - 72 Replies
VIDEO I MADE JUST FOR NOOBS -->http://youtube.com/watch?v=4frYI7r3OLQ<- - HOW TO CREATE A VAC HACK FOR 2MOONS bigworm Must have 3 things: Monster editor, Winhex , and duh 2moons
Tutorial iXFS *Updater* Tutorial
06/16/2008 - General Gaming Discussion - 5 Replies
THIS IS A PROGRAM CREATED BY MOOSE GIVE HIM CREDIT! This is what you need to update .xfs files like for Avatar Hack ( Avatar.xfs ) and (Graphics.xfs) for 360 angle/0delay/unlimited walk/swear hack. Download attachment. Extract the iXFS.exe to your Desktop DOWNLOAD A HACK LIKE Avatar Hack OR 360 Angle/Unlimited Walk/0 Delay/Swear Hack AND SAVE THEM TO YOUR DESKTOP!!!!!!!



All times are GMT +1. The time now is 01:25.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.