Советы по Delphi


Инструмент `Лассо`


Вот возможное решение...

  1. В обработчике события OnMouseDown для формы, где вы хотите использовать инструмент "Лассо":

    bMarquee :=  True;     { установите логическое значение так, чтобы различать при каком событии мыши должна быть сделана операция } ptOrigin := Point( X, Y );   { получаем отправную точку для рисования инструмента } ptMove  := Point( X, Y );    { инициализируем конечную точку }


здесь устанавливаем атрибуты кисти и карандаша (pen и brush), или вызываем общую процедуру, которая может быть использована модуле где-то еще.
Pen.Color := clBlack; Pen.Width := 1; Pen.Style := psDash; Brush.Style := bsClear;
затем рисуем прямоугольник инструмента
DrawMarquee(ptOrigin, ptMove, pmNotXor );

  • В обработчике события формы OnMouseMove...
  •     if bMarquee = True then begin DrawMarquee(ptOrigin, ptMove, pmNotXor ); DrawMarquee(ptOrigin, Point( X, Y ), pmNotXor ); ptMove := Point( X, Y ); Canvas.Pen.Mode := pmCopy; end;

  • В обработчике события формы OnMouseUp...
  •     if bMarquee = True then begin bMarquee := False; DrawMarquee(ptOrigin, Point( X, Y ), pmNotXor ); ptMove := Point( X, Y );
    { осуществляем проверку на любые пересечения между прямоугольником инструмента и элементами управления }
    - вызываем процедуру, которая выделит (передаст фокус) необходимым элементам управления
    end;

    Процедура DrawMarquee...

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

    [001940]



    Содержание раздела