Kreise per TrackBar zeichnen



  • Hi,

    wie kann ich einen Kreis per TrackBar mit dem entsprechenen Radius (TrackBar - Wert ) zeichnen?

    Also bei dem Kreis wird immer der größte TrackBar wert gezeichnet, falls der TrackBar sich von klein nach groß ändert
    Die inneren Kreise sollen dabei transparent werden, also immer nur der äüßerste sichtbar sein.

    beim Schieben von großem nach kleinem Wert des TrackBars soll der Kreis von außen nach Innen wandern, je nach TrackBar wert.

    Muss ich hier im Code nach dem Zeichnen noch was ändern?
    es werden immer alle Kreise gezeichnet.

    Canvas->Brush->Style = bsClear;
    Canvas->Brush->Color = clBtnFace;
    Canvas->Pen->Color =  RGB(180,180,180);
    Canvas->Pen->Width = 1;
    Canvas->Ellipse (x-radius,y-radius,x+radius,y+radius);
    //Canvas->Pen->Color =  clBtnFace;
    Canvas->Pen->Mode  = pmCopy;
    

    Hat jemand eine Idee?



  • ach ja,

    also der TrackBar - Wert wird natürlich dem Radius übergeben..
    🙂



  • Vor dem Zeichnen des neuen Kreises mußt du erst den alten löschen. Entweder du überzeichnest ihn mit einen identischen Kreis in Hintergrundfarbe oder du verwendest Pen->Mode = pmNot.



  • oder du wendest den "Gummiband" Effect an mit
    Canvas->Pen->Mode = pmNotXor;



  • funktioniert zum Teil

    beim zurückschieben werden die Kreise gelöscht.

    wie mache ich es dass immer nur der äußerste Rand bzw. dann der innerste Rand stehenbleibt?



  • kann man das Überschreiben auch mit der
    Canvas->Pen->Mode = pmNotXor;
    bewirken,

    was meinst du mit Gummiband - Effekt.
    das is ja fast das was ich haben will, jedoch werden beim Vergrößern des Radius leider die inneren mitgezeichnet.



  • In der BCB Hilfe ist ein Beispiel mit dem Gummiband



  • hab die hilfe schon durchgesehen, aber ein beispiel is mir leider net aufgefallen

    da werden nur die enum - einträge erklärt..



  • hi zusammen,

    also das mit dem neuzeichnen klappt leider nicht..

    hier mein code:

    kreis.cpp
    
    void Kreis::clr (TCanvas *tc_)
    {
    	tc_->Brush->Style = bsClear;
    	tc_->Pen->Color = clBtnFace;
             tc_->Pen->Mode = pmNotXor;
    	tc_->Pen->Width = 1;
             tc_->Ellipse (x-radius,y-radius,x+radius,y+radius);
    }
    
    void Kreis::zeichne (TCanvas *tc)
    {
    	tc->Brush->Style = bsClear;
    	tc->Pen->Color =  RGB(180,180,180);
             tc->Pen->Width = 1;
     	//tc->Pen->Mode = pmCopy;
             tc->Pen->Mode = pmXor;
             tc->Ellipse (x-radius,y-radius,x+radius,y+radius);
    }
    
    //########################################################
    
    und hier der code für den trackbar:
    
    void __fastcall TForm1::TrackBar1Change(TObject *Sender)
    {
    track_pos = TrackBar1->Position;
    Form1->Label1->Caption = IntToStr(track_pos);
    track_aktiv = 1;
    
        k1 = new Kreis  (track_pos);
        k1->zeichne(Canvas);
        k1 = new Kreis  (pos_alt);
        k1->clr(Canvas);
        pos_alt = track_akt;
    }
    

    könnte jemand evtl. nochmal drüber schaun?
    ob was gravierendes auffällt??

    Wäre sehr nett!!

    Danke,
    Mike


Anmelden zum Antworten