Delphi,在FireMonkey中绘制鼠标选择矩形

时间:2014-08-30 15:41:01

标签: delphi mouse firemonkey

我需要使用Delphi FMX做一件简单的事情,可以通过VCl轻松完成:控制画布上的一个矩形,右下角点跟随鼠标(选择矩形)。我写了这样的代码:

interface 
type
  TfrmSettings = class(TForm)
//...
    sbDetectors: TScrollBox;
    XStart, YStart: Single;
    bMouseDrawing: Boolean;
    FMouseBrush: TBrush;
//...
  public
    { Public declarations }
  end;

var
  frmSettings: TfrmSettings;

implementation

{$R *.fmx}
procedure TfrmSettings.FormCreate(Sender: TObject);
begin
  FMouseBrush := TBrush.Create(TBrushKind.Solid, $FFD1DDA1); // $FF505050 { .$FFD1DDA1 } );
end;

procedure TfrmSettings.FormDestroy(Sender: TObject);
begin
  FMouseBrush.Free;
end;

procedure TfrmSettings.sbDetectorsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  X, Y: Single);
begin
  XStart := X;
  YStart := Y;
  bMouseDrawing := True;
  sbDetectors.Canvas.Fill.Assign(FMouseBrush);
end;

procedure TfrmSettings.sbDetectorsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
  if bMouseDrawing then
  begin
    sbDetectors.Canvas.BeginScene;
    sbDetectors.Canvas.DrawRect(rectF(X, Y, XStart, YStart), 0, 0, [], 1);
    sbDetectors.Canvas.EndScene;
  end;
end;

procedure TfrmSettings.sbDetectorsMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
  X, Y: Single);
begin
  bMouseDrawing := False;
end;

此代码无法正常运行

  1. 我没有找到清除以前绘制的矩形的方法(比如可以在VCL中完成:Pen.Mode:= pmNotXor)。
  2. 我找不到一种简单的方法将X,Y坐标转换为控件的(sbDetectors)Canvas坐标(如VCL:ClientToScreen中)。     sbDetectors不在表单本身上,而是在其他表的堆栈上     控件。
  3. 怎么做?

0 个答案:

没有答案