How to implement a 'Lasso' (Views: 31)
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; |