Вот возможное решение...
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 ); |
if bMarquee = True then begin DrawMarquee(ptOrigin, ptMove, pmNotXor ); DrawMarquee(ptOrigin, Point( X, Y ), pmNotXor ); ptMove := Point( X, Y ); Canvas.Pen.Mode := pmCopy; end; |
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]