"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); } |