Grafika
1.08.1999
  • "Rubber-banding".

       "Rubber-banding" oznacza metodę rysowania linii, bądź prostokąta, który zmienia kształt wraz z ruchem myszki. Metoda ta polega na naprzemiennym rysowaniu i zmazywaniu linii w czasie ruchu myszki. Poniższy przykład pokazuje użycie metody "rubber-banding" dla prostokąta.

//W pliku nagłówkowym

private:
    bool FDrawing;
    bool FFirstRect;
    TPoint F1, F2;
public:
void __fastcall TForm1::DrawRect();

// W pliku źródłowym

__fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
{
    FDrawing = false;
}
//-----------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender,
         TMouseButton Button, TShiftState Shift, int X, int Y)
{
    F1.x = X;
    F1.y = Y;
    FFirstRect = true;
    FDrawing = true;
}

//-----------------------------------------------

void __fastcall TForm1::FormMouseMove(TObject *Sender,
                              TShiftState Shift, int X, int Y)
{
    if (FDrawing == true)
    {
       Canvas->Pen->Mode = pmNotXor;
	                 //to klucz do wymazywania
      if (FFirstRect == false) DrawRect();
	                 //wymazuje poprzedni prostokąt
       F2.x = X;
       F2.y = Y;
       FFirstRect = false;
       DrawRect(); //rysuje nowy prostokąt
    }
}

//--------------------------------------------

void __fastcall TForm1::FormMouseUp(TObject *Sender,
       TMouseButton Button, TShiftState Shift, int X, int Y)
{
    F2.x = X;
    F2.y = Y;
    FDrawing = false;
    DrawRect();
    Canvas->Pen->Mode = pmCopy; //przywraca styl pióra
}

//------------------------------------------------
// rysuje prostokąt

void __fastcall TForm1::DrawRect()
{
 Canvas->Rectangle(F1.x, F1.y, F2.x, F2.y);
}