edit:
Oczywiście chciałbym, żeby obszar zaznaczenia był widoczny w postaci przerywanego prostokąta zarówno w trakcie zaznaczania, jak i przy wykonywaniu na nim operacji, ale nie "wżerał" się w tło jak narysowany normalnie prostokąt.


void __fastcall TFotoEdytor::MainImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
MainImage->Canvas->Pen->Mode->pmNotXor;
XPocz = X;
YPocz = Y;
Xr = X;
Yr = Y;
Zaznacz = true;
}
//---------------------------------------------------------------------------
void __fastcall TFotoEdytor::MainImageMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (Zaznacz)
{
MainImage->Canvas->Pen->Mode = pmNotXor;
MainImage->Canvas->Pen->Style = psDash;
MainImage->Canvas->Pen->Color = clBlack;
MainImage->Canvas->Rectangle(XPocz, YPocz, Xr, Yr);
MainImage->Canvas->Rectangle(XPocz, YPocz, Xr, Yr);
Xr = X;
Yr = Y;
}
}
//---------------------------------------------------------------------------
MainImage->Canvas->Rectangle(XPocz, YPocz, Xr, Yr);
private:
bool FDrawing;
bool FFirstRect;
TPoint F1, F2;
void DrawRect(void);__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);
}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();
}
//---------------------------------------------------------------------------

Powrót do Aplikacje multimedialne, graficzne
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości