Canvas zeichen und das Eigenschaft merken.



  • Hallo,

    ich habe 100 Canvas Rechecken mit Rot und Grün gezeichnet. was ich will, Das Recke Nr.101 auf die Stelle des 100te Rechtecks zeichen und alle anderen Rechecken 1 Nummer nach unten schieben und das erste Reckeck löchen(Ich will nur 100 Rechecken auf Bildschirm haben). Dafür muss ich Nummer & Farbe des Reckecks merken mussen.

    Frage: was für möglichkeit gibt es?

    Gruß,
    S.Mathi 😮



  • Ich weiss nicht was Rechecken sind, aber wenn der Computer sich was merken soll, muss man es in den Speicher schreiben. Bei 100 Rechecken, bieten sich Arrays mit 100 Elementen an.

    Bye, TGGC (Dem beste BdT)



  • Ich weiss nicht was Rechecken sind

    Rechtecke vielleicht? 🤡
    Ich kann mir das ganze nicht so wirklich vorstellen. Wie sind die Teile denn angeordnet? Im Quadrat 10*10? Oder ganz frei? Und warum brauchst du die Farbe des Rechtecks, um es nach unten verschieben zu können?



  • Blackshadow schrieb:

    Ich weiss nicht was Rechecken sind

    Rechtecke vielleicht? 🤡
    Ich kann mir das ganze nicht so wirklich vorstellen. Wie sind die Teile denn angeordnet? Im Quadrat 10*10? Oder ganz frei? Und warum brauchst du die Farbe des Rechtecks, um es nach unten verschieben zu können?

    Hallo,

    natürlich habe ich Rechteck gemeint. 🕶

    was ich damit anzeigen will, die Messwerte von die letzen 100 Messungen. Ist das Ergebnis außerhalb Sollwert, Dann Das Reckteck ist Rot. Angenommen 100te Messung ist außerhalb. Dann 100te Rechteck Rot. wenn 101te Messung OK ist. die 100te Messung ist nicht mehr 100te Stelle, sondern auf 99te. ok?

    Canvas->Rectangle(x,0,x+5,40);

    Die Rechtecke werden nebeneinander angebracht, wie ein Balken.



  • INT Messwert[100];
    

    Das ist das Array für die Messwerte.
    Bei jeder Änderung:

    for (INT i=0; i<99; i++)
      Messwert[i] = Messwert[i+1];
    Messwert[99] = // Hier muss der neue Messwert angegeben werden;
    

    Damit werden die Messwerte im Array einen Platz verschoben, und der neue wird an den Schluss gesetzt.
    Anschließend:

    INT Breite = 5; // Die Balken werden 5 Pixel breit
    INT Sollwert = 10; // Wenn Werte größer als 10 sind, werden sie rot
    
    // Das Bild wird geleert: (Beispiel Image)
    Image1->Picture = NULL;
    
    for (INT i=0; i<100; i++)
    {
      if (Messwert[i] > Sollwert)
      {
        /*Komponente mit Canvas*/->Canvas->Brush->Color = clRed;
        /*Komponente mit Canvas*/->Canvas->Pen->Color = clRed;
      }
      else // Messwert kleiner oder gleich Sollwert
      {
        /*Komponente mit Canvas*/->Canvas->Brush->Color = clLime;
        /*Komponente mit Canvas*/->Canvas->Pen->Color = clLime;
      }
      /*Komponente mit Canvas*/->Canvas->Rectangle(i*Breite, 0, i*Breite + Breite, Messwert[i]);
    }
    

    So, das wars. Ich hab das ganze noch mal als Beispielprogramm gemacht, bei dem die Messwerte zufallsgeneriert werden. Hier ist der Code: (Auf dem Formular sind ein Image "Image1" und ein Timer "Timer1" mit dem Intervall 500.

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    INT Messwert[100];
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    Image1->Picture = NULL;
    for (INT i=0; i<99; i++)
      Messwert[i] = Messwert[i+1];
    Messwert[99] = random(50);
    
    INT Breite = 5; // Die Balken werden 5 Pixel breit
    INT Sollwert = 10; // Wenn Werte größer als 10 sind, werden sie rot
    for (INT i=0; i<100; i++)
    {
      if (Messwert[i] > Sollwert)
      {
        Image1->Canvas->Brush->Color = clRed;
        Image1->Canvas->Pen->Color = clRed;
      }
      else // Messwert kleiner oder gleich Sollwert
      {
        Image1->Canvas->Brush->Color = clLime;
        Image1->Canvas->Pen->Color = clLime;
      }
      Image1->Canvas->Rectangle(i*Breite, 0, i*Breite + Breite, Messwert[i]);
    }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    randomize();
    }
    //---------------------------------------------------------------------------
    


  • doppelpost, bitte löschen.



  • Blackshadow schrieb:

    doppelpost, bitte löschen.

    Vielen Danke erst Mal.Das ist genau, was ich gesucht habe.

    Was meinten Sie damit,"doppelpost, bitte löschen ?"

    Gruß
    S.Mathi



  • Was meinten Sie damit,"doppelpost, bitte löschen ?"

    Ich hab beim Antworten auf "Absenden" geklickt und es ist nichts passiert. Da hab ich noch mal draufgeklickt, mit dem Erfolg, dass alles zwei mal kam. Ich hab versucht, das zweite zu löschen, ging aber nicht, man kann es nur editieren. Daher bitte ich darum, dass irgendwer es löscht, der das kann. Is jetzt aber auch egal. Freut mich, dass ich helfen konnte.


Anmelden zum Antworten