Canvas - areas quentes no form (interessante)

Top  Previous  Next

type

  TForm1 = class(TForm)

    MostraRegioesButton: TButton;

    EscondeRegioesButton: TButton;

    procedure FormCreate(Sender: TObject);

    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

    procedure MostraRegioesButtonClick(Sender: TObject);

    procedure EscondeRegioesButtonClick(Sender: TObject);

    procedure FormPaint(Sender: TObject);

  private

    RgnAnt, RoundRgn, RectRgn, PathRgn : HRGN;

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

  RgnAnt := 0;

  // cria região elíptica

  RoundRgn := CreateEllipticRgn(10,10,50,50);

  // cria região retangular

  RectRgn := CreateRectRgn(80,10,140,70);

end;

 

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

  Y: Integer);

var

  RgnAtu : HRGN;

begin

  RgnAtu := 0;

  // verifica se o mouse está em uma região

       if PtInRegion(RoundRgn, X, Y) then RgnAtu := RoundRgn

  else if PtInRegion(RectRgn , X, Y) then RgnAtu := RectRgn

  else if PtInRegion(PathRgn , X, Y) then RgnAtu := PathRgn;

  // mudou de região ? muda a hint

  if RgnAnt <> RgnAtu then

  begin

    Application.CancelHint;

         if RgnAtu = RoundRgn then Hint := 'Região 1'

    else if RgnAtu = RectRgn  then Hint := 'Região 2'

    else if RgnAtu = PathRgn  then Hint := 'Região 3'

    else Hint := '';

    RgnAnt := RgnAtu;

  end;

end;

 

procedure TForm1.MostraRegioesButtonClick(Sender: TObject);

begin

  // mostra as regiões escondidas

  SetPolyFillMode(Canvas.Handle,WINDING);

  FillRgn(Canvas.Handle,RoundRgn,GetStockObject(BLACK_BRUSH));

  FillRgn(Canvas.Handle,RectRgn,GetStockObject(BLACK_BRUSH));

  FillRgn(Canvas.Handle,PathRgn,GetStockObject(BLACK_BRUSH));

end;

 

procedure TForm1.EscondeRegioesButtonClick(Sender: TObject);

begin

  // esconde as regiões

  SetPolyFillMode(Canvas.Handle,WINDING);

  FillRgn(Canvas.Handle,RoundRgn,Brush.Handle);

  FillRgn(Canvas.Handle,RectRgn,Brush.Handle);

  FillRgn(Canvas.Handle,PathRgn,Brush.Handle);

end;

 

procedure TForm1.FormPaint(Sender: TObject);

begin

  // cria a região a partir do path

  SetBkMode(Canvas.Handle, TRANSPARENT);

  BeginPath(Canvas.Handle);

  Canvas.TextOut(50,120,'Flavio Junior');

  EndPath(Canvas.Handle);

  PathRgn := PathToRegion(Canvas.Handle);

end;

 

end.