GDI+ PageScale

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Devilx1.

    GDI+ PageScale

    Hallöchen,
    ich hab eine Frage zu dem PageScale.
    Wenn ich in PageScale in Form_Paint benutze funktioniert es. Benutze ich es aber in einer PictureBox_Paint funktioniert es nicht.
    Warum?
    Ich möchte ein Balkendiagramm zeichnen. dazu habe ich gedacht, um nicht die größte Höhe eines Balkens zuvor aus den Daten berechnen zu müssen, benutze ich PageScale. Problem dabei wird aber sein, das das Diagramm dann auch in der Breite geändert wird. Kann man auch nur die Y-Achse mit PageScale ändern?
    Danke
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    hallo tig0r,

    warum lange mit einer funktion rumquälen wenn sowas schnell selbstgeschrieben ist.

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'prozentwerte zum anzeigen als diagramm
    3. Private werte() As Integer = {20, 50, 33, 20, 95, 65}
    4. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    5. 'lasst uns die breite des anzeigebereichs so einteilen, dass lücken und balken gleichgroß sind
    6. Dim anzahl As Integer = werte.Length * 2 + 1
    7. Dim breite As Integer = Me.ClientSize.Width / anzahl
    8. 'aktuelle x position - gestartet wird nach einer breite
    9. Dim akt_x As Integer = breite
    10. 'alle balken zeichnen
    11. For i As Integer = 0 To werte.Length - 1
    12. 'höhe des balken festlegen
    13. Dim hoehe As Integer = Me.Height / 100 * werte(i)
    14. 'balken zeichnen
    15. e.Graphics.FillRectangle(Brushes.Blue, New Rectangle(akt_x, Me.Height - hoehe, breite, hoehe))
    16. 'zwei breiten zur aktuellen breite hinzufügen
    17. akt_x += breite * 2
    18. Next
    19. End Sub
    20. End Class

    übrigens - dein pagescale verändert immer x und y achse

    gruss

    mikeb69
    Danke dir.
    Sowas ähnliches hatte ich auch shcon zusammengestellt, hätte aber sein können das man dass mit der PageScale hätte machen können.
    Dankö
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Hab noch eine Frage bezüglich der Skalierung der Y-Achse.
    Wie bekomme ich die am besten hin? Der Größte Wert ist z.B. 213, bei mit umgerechnet 95%, damit oben noch ein wenig Platz ist.
    Die Skalierung soll nun z.B. alle 20 sein. Hab gestern den ganzen Tag und die halbe Nacht versucht das hinzubekommen, bin aber zu keinem Ergebnis gekommen.
    Das Problem ist das, wenn sich die Werte ändern, muss sich auch die Skalierung ändern. Beim größten Wert von z.B. 6000 soll die Skalierung vielleicht alle 500 sein.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Habs jetzt so gemacht das ich den größten Wert raussuche un die Skala danach ändere.

    VB.NET-Quellcode

    1. 'Wert - Skalierung
    2. 0-9 - 1
    3. 10-19 - 2
    4. 20-47 - 5
    5. 48-95 - 10
    6. 96-190 - 20
    7. 191-476 - 50
    8. 477-952 - 100
    9. 953-1904 - 200
    10. 1905-4761 - 500
    11. 4762-9523 - 1000
    12. 9524-19047 - 2000

    das Problem ist das ich das mit einer Select Abfrage mache. Ich bekomme einfach keine Vernünftige Formel hin, mit der ich die Skalierung berechnen kann. Kennt zu dem Problem jemand eine vernünftige Formel?
    Die Daten habe ich aus Excel übernommen, in dem Abstand ist es dort auch so.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    ich würde es vielleicht einfach mit einer Dividierung versuchen

    als beispie

    VB.NET-Quellcode

    1. if value >= 100 then
    2. balken1.size = new size(balken1.size.width, balken1.size.height /2)
    3. balken2.size = new size(balken2.size.width, balken2.size.height /2)
    4. 'und so weiter ...
    5. end if