2004. május 13., csütörtök
How to implement a 'Lasso'
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;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése