To jest tak zwana metoda "Rubber-banding" polegająca na rysowaniu prostokąta, który zmienia kształt wraz z ruchem myszki.
Całość powinna wyglądać np. tak:
//W pliku nagłówkowym
- Kod: Zaznacz cały
private:
bool FDrawing;
bool FFirstRect;
TPoint F1, F2;
void DrawRect(void);
// W pliku źródłowym
- Kod: Zaznacz cały
__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 TForm1::DrawRect(void)
{
Canvas->Brush->Style = bsClear;
Canvas->Pen->Style = psDash;
Canvas->Rectangle(F1.x, F1.y, F2.x, F2.y);
}
W podanym przykładzie prostokąt jest rysowany na formularzu dopóki wciśnięty jest klawisz myszy. W zdarzeniu OnMOuseUp prostokąt jest wymazywany, dlatego musisz zmodyfikować kod znajdujący się w tym zdarzeniu do własnych potrzeb, tak by prostokąt pozostał, czyli powinno wystarczyć zmienić kod miejscem:
- Kod: Zaznacz cały
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
F2.x = X;
F2.y = Y;
FDrawing = false;
Canvas->Pen->Mode = pmCopy; //przywraca styl pióra
DrawRect();
}
//---------------------------------------------------------------------------
Pamiętaj jednak, że cokolwiek narysujesz na płótnie Canvas, np. tak zwane zaznaczenie to tak naprawdę jest to grafika, która modyfikuje grafikę znajdującą się na płótnie, czyli mówiąc prościej rysując zaznaczenie - rysujesz prostokąt.