Polygon zeichen wie Fortschrittsbalken



  • Hallo,

    ich möchte in einer Paintbox ein Dreieckzeichnen. Dieses Dreieck soll sich in der PB verhalten wie ein Fortschrittsbalken.
    einen Wert gebe ich über ein Editorfeld ein und per Button klick, wird dann mit hilfe des Wertes dieses Polygon gezeichent. Dieser Wert bestimmt, die höhe innerhalb der PaintBox.
    Ich habe in der Hilf von Borland etwas zum zeichnen von Polygone gefunden. Werde aber nicht daraus schlau, hier mal der komplette code des Buttons:

    PaintBox1->Repaint();
           int b = StrToInt(Edit1->Text);
           int w = PaintBox1->Width; // weite paintbox
           int h = PaintBox1->Height; // höhe paintbox
           int x = (b*h)/100; // vom balken höhe
    
           TPoint points[4];
           points[0] = Point(w,0);
           points[1] = Point(w,0);
           points[2] = Point(w,h);
           points[3] = Point(w,x);
    
           // canvas->Polygon(points,3); // w + h gehören zum punkt!!!
            TCanvas *canvas = PaintBox1->Canvas;
            canvas->Brush->Color = clWhite;
            canvas->Brush->Color = clWhite;
            canvas->Pen->Color   = clBlue;
    
            canvas->Polygon(points,3);
    

    Was ich jetzt überhaupt ncith weiss ist wei das ist mit diesen Points, welcher Punkt bestimmt den Anfang, usw. Und wie sind innerhalb der Points die Werte aufgeteilt (welcher für höhe und welcher für breite).

    Ich weiss das meine erklärung ein wenig defus ist wenn ihr was nicht versteht dann versuche ich es gerne nochmal mein Problem zu schildern
    Und wundert euch nicht soviel über den aufbau des codes, hab schon wie oft alles umgestellt. Aber ich bekomme ich es einfach nicht gebacken dass das dreieck mit der spitze unten in der mitte der Paintbox aufliegt, und die höhe innerhalb der Paintbox vom eingegeben wert abhängig zu machen.

    Hoffe ihr könnt mir helfen. Danke schon mal



  • Hallo

    Der erste Punkt muß auch noch mal als letzter angefügt werden, damit die letzte Kante gezeichnet wird. Beispiel für ein einfaches Dreieck :

    int Left = 10;
    int Right = 100;
    int Top = 20;
    int Bottom = 50;
    TPoint points[4];
    points[0] = Point(Left,Bottom);
    points[1] = Point(Left,Top);
    points[2] = Point(Right,Bottom);
    points[3] = Point(Left,Bottom);
    canvas->Polygon(points,3);
    

    Was ich jetzt überhaupt ncith weiss ist wei das ist mit diesen Points, welcher Punkt bestimmt den Anfang, usw. Und wie sind innerhalb der Points die Werte aufgeteilt (welcher für höhe und welcher für breite).

    Der erste Wert (X) ist die Breite, beginned links
    Der zweite Wert (Y) ist die Höhe, beginned obend

    /Edit: okay, hab ich mit Polyline verwechselt. Das macht keinen automatischen Abschluß

    bis bald
    akari



  • Hm, ich brauch für ein Dreieck nur 3 Punkte. 😉
    (Polyline braucht vier...)

    Ich hab Deine Routine mal so geändert, dass sie ein auf dem Kopf stehendes Dreieck in der PaintBox zeichnet.

    int w = PaintBox1->Width; // weite paintbox
    int h = PaintBox1->Height; // höhe paintbox
    
    TPoint points[3];
    points[0] = Point(0,0);
    points[1] = Point(w,0);
    points[2] = Point(w/2,h);
    
    TCanvas *canvas = PaintBox1->Canvas;
    canvas->Brush->Color = clWhite;
    canvas->Brush->Color = clWhite;
    canvas->Pen->Color   = clBlue;
    
    canvas->Polygon(points,2);
    

    EDIT: Das Koordinatensystem beginnt links oben in der Ecke mit 0/0. Das ist vielleicht die Information, die Dir fehlt...



  • danke an euch

    es geht und man braucht tatsächlich nur 3 punkte...


Anmelden zum Antworten