Показать сообщение отдельно
  #6  
Старый 26.09.2012, 05:11
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

можно через DrawFocusRect
Код:
var
  prevlasso, lasso: TRect;
  lassoStarted: boolean = false;

procedure Tmain.drawLasso(r: TRect);   // рисует/стирает рамку выделения
var rr: TRect;
begin
  rr.Left := min(r.Left, r.Right);
  rr.Top := min(r.Top, r.Bottom);
  rr.Right := max(r.Left, r.Right);
  rr.Bottom := max(r.Top, r.Bottom);
  main.Canvas.DrawFocusRect(rr);
end;

procedure Tmain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not (ssleft in shift) then exit;

  lassoStarted := true;

  lasso.TopLeft := point(x, y);
  lasso.BottomRight := point(x, y);
  prevlasso := lasso;

  drawLasso(lasso);
end;

procedure Tmain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if not lassoStarted then exit;

  prevlasso := lasso;
  lasso.BottomRight := point(x, y);

  drawLasso(prevlasso);
  drawLasso(lasso);
end;

procedure Tmain.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not lassoStarted then exit;

  lassoStarted := false;

  prevlasso := lasso;
  drawLasso(prevlasso);

  if ssShift in Shift then
    ToggleSelectionOnThem
  else
    SelectThem;
end;
__________________
>woweook<
Ответить с цитированием