Canvas-Zeichenfläche schnell löschen



  • Hallo Allerseits

    Ich habe folgenden Quellcode mit dem Auf eine Form ein Zeichenraster (sieht aus wie liniertes Papier) gemalt wird.

    void __fastcall TFEditor: PaintRaster()
    {
       iRaster = iZoom/2;     //vom Zoom abhängiges Raster
    
       TColor C=Canvas->Pen->Color;
    
       Canvas->Pen->Color=clActiveBorder;
       for (int i=1; i<ClientWidth; i+=iRaster)
       {
           Canvas->MoveTo(i,1);
           Canvas->LineTo(i,ClientHeight);
       };
    
       for (int i=1;i<ClientHeight;i+=(iRaster))
       {
           Canvas->MoveTo(1,i);    //Raster um Betrag der Toolbar versetzen
           Canvas->LineTo(ClientWidth,i);
       };
    
       Canvas->Pen->Color=C;
    }
    

    So, mein Problem ist, wenn ich jetzt den Zoomfaktor ändere, soll die Linienfläche neu gemalt werden, dazu soll zuvor die Zeichenfläche (Canvas) gelöscht werden. Wie kann ich das schnellstmöglich machen? Canvas->Clear() gibts leider nicht.



  • hi,

    zeichne doch ein grosses rechteck mit der Hintergrundfarbe deines Rasters drüber!

    Damit ist die vorhergehende zeichnung weg und du kannst loslegen! mach ich wenn ich mit ner PaintBox arbeite genauso. Funktioniert gut!!



  • Ok, ich mach das jetzt so:

    FEditor->Canvas->FillRect(ClientRect);
    


  • Hi

    Verwendet ihr zum Zoomen eine besondere Komponente oder gibt es da einen Trick? Wenn ich ein TImage zoome und speicher, wird das Bild größer oder kleiner. Und wenn ich die Graphic nicht anpass, bekomm ich einen Rand oder schneid was vom Bild ab.


Anmelden zum Antworten