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. |