Recent

Author Topic: Selection rectangle in Mac OS X  (Read 2054 times)

pedromdsantos

  • Newbie
  • Posts: 1
Selection rectangle in Mac OS X
« on: November 02, 2012, 10:27:23 pm »
I need to create a selection rectangle on a paintbox or a form. The code works on Windows but not on Mac OS X. Can someone check the code and tell me how to fix it.
I am not a programmer but sometimes I need to use Lazarus to do some routines just using the basics of pascal.

I am using Lazarus 1.0.2, FPC 2.6.0, Carbon, Intel x86, Mountain Lion 10.8.2

TIA
Pedro

---

  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  PontoInicial, PontoFinal: TPoint;
  Arrastar: Boolean;

implementation

{$R *.lfm}

{ TForm1 }

function RectSelec(PontoInicial, PontoFinal : TPoint) : TRect;
begin
  if PontoInicial.X < PontoFinal.X then
  begin
    RectSelec.Left := PontoInicial.X;
    RectSelec.Right := PontoFinal.X;
  end
  else begin
         RectSelec.Left := PontoFinal.X;
         RectSelec.Right := PontoInicial.X;
       end;
  if PontoInicial.Y < PontoFinal.Y then
  begin
    RectSelec.Top    := PontoInicial.Y;
    RectSelec.Bottom := PontoFinal.Y;
  end
  else begin
         RectSelec.Top := PontoFinal.Y;
         RectSelec.Bottom := PontoInicial.Y;
      end;
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  PontoInicial.X := X;
  PontoInicial.Y := Y;
  PontoFinal.X := X;
  PontoFinal.Y := Y;
  PaintBox1.Canvas.DrawFocusRect(RectSelec(PontoInicial, PontoFinal));
  Arrastar := True;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Arrastar = True then
  begin
    PaintBox1.Canvas.DrawFocusRect(RectSelec(PontoInicial, PontoFinal));
    PontoFinal.X := X;
    PontoFinal.Y := Y;
    PaintBox1.Canvas.DrawFocusRect(RectSelec(PontoInicial, PontoFinal));
  end;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Arrastar = True then
  begin
    PaintBox1.Canvas.DrawFocusRect(RectSelec(PontoInicial, PontoFinal));
    PontoFinal.X := X;
    PontoFinal.Y := Y;
  end;
  Arrastar := False;
end;
« Last Edit: November 12, 2012, 03:55:49 pm by pedromdsantos »