Form com quinas arredondadas

03/07/2008

2

Pessoal,
Alguem ai saberia como possa fazer para deixar meu form com as quinas arredondadas. O detalhe é que eu nao estou querendo usar nenhum tipo de skin .. estou querendo fazer no braço mesmo.

Se alguem puder dar uma ajuda.

Vlw´sss


Responder

Posts

03/07/2008

Tonidavi2004

// procedure feita por Rubem Nascimento Rocha.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure MakeRounded(Control: TWinControl);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle := bsNone;
  MakeRounded(Form1);
end;

procedure TForm1.MakeRounded(Control: TWinControl);
var
  R: TRect;
  Rgn: HRGN;
begin
  with Control do
  begin
    R   := ClientRect;
    rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20);
    Perform(EM_GETRECT, 0, lParam(@r));
    InflateRect(r, - 5, - 5);
    Perform(EM_SETRECTNP, 0, lParam(@r));
    SetWindowRgn(Handle, rgn, True);
    Invalidate;
  end;
end;

end.



Responder

04/07/2008

Mmoreira

tonidavi2004,
Valew pela força cara pois era exatamente isso que eu estava precisando, resolvido o problema.

Abraços!


Responder

05/07/2008

Marco Salles

so para enriquecer o tópico , se assim eu possa faze-lo , vale salientar
na edição 93 da Revista Clube Delphi , foi apresentado um modo de arrendondar os cantos dos panels da Aplicação . Que pode ser [u:9b66bd4f91][b:9b66bd4f91]facilmente adaptada para a classe TForm[/b:9b66bd4f91][/u:9b66bd4f91]

procedure TForm1.MakeRoundedEdicao93(Control: TWinControl);
const
 bgColor = $00800ff80;
 linecolor = clblack;
var
 img:TImage;
 reg:hrgn;
begin
     setlength(img,length(img)+1);
     img:=TImage.Create(self);
     img.Width:=control.Width;
     img.Height:=control.Height;
     img.Parent:=control;
     img.Canvas.Brush.Color:=bgcolor;
     img.Canvas.Pen.Color:=bgcolor;
     img.Canvas.Rectangle(0,0,img[i].Width,img[i].Height);
     img.Canvas.Pen.Color:=linecolor;
     img.Canvas.RoundRect(0,0,img[i].Width-1,img[i].Height-1,50,50);
     reg:=CreateRoundRectRgn(0,0,control.Width,control.Height,50,50);
     setWindowrgn(control.Handle,reg,true);
     deleteObject(reg);
end;


e no oncreate escreva :

procedure TForm1.FormCreate(Sender: TObject);
begin
 BorderStyle := bsNone;
 MakeRoundedEdicao93(form1);
end;



Responder

05/07/2008

Marco Salles

so para enriquecer o tópico , se assim eu possa faze-lo , vale salientar
na edição 93 da Revista Clube Delphi , foi apresentado um modo de arrendondar os cantos dos panels da Aplicação . Que pode ser [u:20f63d0474][b:20f63d0474]facilmente adaptada para a classe TForm[/b:20f63d0474][/u:20f63d0474]

procedure TForm1.MakeRoundedEdicao93(Control: TWinControl);
const
 bgColor = $00800ff80;
 linecolor = clblack;
var
 img:TImage;
 reg:hrgn;
begin
     setlength(img,length(img)+1);
     img:=TImage.Create(self);
     img.Width:=control.Width;
     img.Height:=control.Height;
     img.Parent:=control;
     img.Canvas.Brush.Color:=bgcolor;
     img.Canvas.Pen.Color:=bgcolor;
     img.Canvas.Rectangle(0,0,img[i].Width,img[i].Height);
     img.Canvas.Pen.Color:=linecolor;
     img.Canvas.RoundRect(0,0,img[i].Width-1,img[i].Height-1,50,50);
     reg:=CreateRoundRectRgn(0,0,control.Width,control.Height,50,50);
     setWindowrgn(control.Handle,reg,true);
     deleteObject(reg);
end;


e no oncreate escreva :

procedure TForm1.FormCreate(Sender: TObject);
begin
 BorderStyle := bsNone;
 MakeRoundedEdicao93(form1);
end;



Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira