Mirror

How to implement a 'Lasso' (Views: 100)


Problem/Question/Abstract:

How to implement a 'Lasso'

Answer:

Here's a possible approach:

1. In the OnMouseDown event for the form that you are 'lasso-ing' controls on:


bMarquee := True;
{set a boolean so that you can differentiate between decisions that might have to be made during other mouse events}
ptOrigin := Point(X, Y); { get the starting point of the marquee }
ptMove := Point(X, Y); { initialize the stopping point }



Set the pen and brush attributes here or by calling a common procedure that can be reused elsewhere in the Unit.


Pen.Color := clBlack;
Pen.Width := 1;
Pen.Style := psDash;
Brush.Style := bsClear;


Then draw the marquee rectangle


DrawMarquee(ptOrigin, ptMove, pmNotXor);


2. In the OnMouseMove event for the form...


if bMarquee = True then
begin
  DrawMarquee(ptOrigin, ptMove, pmNotXor);
  DrawMarquee(ptOrigin, Point(X, Y), pmNotXor);
  ptMove := Point(X, Y);
  Canvas.Pen.Mode := pmCopy;
end;


3. In the OnMouseUp event for the form...


if bMarquee = True then
begin
  bMarquee := False;
  DrawMarquee(ptOrigin, Point(X, Y), pmNotXor);
  ptMove := Point(X, Y);
  {check for any intersections between the marquee frame and controls}
  { call the procedure that will highlight ( focus ) the desired controls}
end;


The DrawMarquee procedure...


procedure myForm.DrawMarquee(mStart, mStop: TPoint; AMode: TPenMode);
begin
  Canvas.Pen.Mode := AMode;
  Canvas.Rectangle(mStart.X, mStart.Y, mStop.X, mStop.Y);
end;

<< Back to main page