Legal esse componente. Instalei aqui e funcionou blz

[]s

Walter Alves Chagas Junior
Projeto e desenvolvimento de sistemas
Telemont Engenharia de telecomunicações S/A
Belo Horizonte - MG - Brasil
[EMAIL PROTECTED]
Fone: (31) 3389-8215 Fax: (31) 3389-8200


-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
nome de Luiz Escobar
Enviada em: quarta-feira, 31 de maio de 2006 21:01
Para: delphi-br@yahoogrupos.com.br
Assunto: RES: [delphi-br] Botões redondos... codigo fonte botão de
bitmap´s...



bom sei que vc quer um botão redondo, e isso parece dificil.. bom aqui tem
um exemplo de um botão
feito atravez de um bitmap, qualquer bitmap vira um botão...
ele cria o efeito de Lighter, quando passa o mouse encima, Darker, quando
clica, acertei esta parte, comia um pedaçinho da imagem quando era justa,
Disabled, (essa eu implementei, ehehhehe), quando vc disabilita o botão...
talvez ajude...

como não sabia o endereço postei o código....
se alguem gostar e implementar algo novo, posta ai....

Luiz Escobar



//==============================================================
//jvBitmapButton.pas
// versão 2.1c  modify by Luiz Escobar
//--------------------------------------------------------------------------
-------------------------------------
unit jvBitmapButton;

interface

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

type
  TjvBitmapButton = class(TGraphicControl)
  private
    FBitmap: TBitmap;
    FLighter: TBitmap;
    FDarker: Tbitmap;
    FDisabled: Tbitmap; // by Luiz Escobar
    FPushDown:boolean;
    FMouseOver:boolean;
    FLatching: boolean;
    FDown: boolean;
    FHotTrack: boolean;
    Fenable: boolean;  // by Luiz Escobar
    procedure SetBitmap(const Value: TBitmap);
    procedure MakeDarker;
    procedure MakeLighter;
    procedure MakeDisabled;  // by Luiz Escobar
    procedure SetLatching(const Value: boolean);
    procedure SetDown(const Value: boolean);
    procedure SetHotTrack(const Value: boolean);
    function  GetEnabled : Boolean; // by Luiz Escobar
    procedure SetEnabled( const Value: boolean); // by Luiz Escobar
    { Private declarations }
  protected
    { Protected declarations }
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer);override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer);override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer);override;
    procedure Click;override;
    procedure CMMouseLeave(var Message:TMessage); message CM_MouseLeave;
    procedure Loaded;override;
    procedure Resize;override;
  public
    { Public declarations }
    constructor Create(AOwner:TComponent);override;
    destructor  Destroy;override;
    procedure   Paint; override;
  published
    { Published declarations }
    property Bitmap:TBitmap read FBitmap write SetBitmap;
    property Down:boolean read FDown write SetDown;
    property Latching:boolean read FLatching write SetLatching;
    property HotTrack:boolean read FHotTrack write SetHotTrack;
    property Enable:boolean read GetEnabled write SetEnabled; // by Luiz
Escobar
    property onclick;
    property onmousedown;
    property onmouseup;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('ESC_UTIL', [TjvBitmapButton]);
end;

{ TjvBitmapButton }

function TjvBitmapButton.GetEnabled: boolean;  // by Luiz Escobar
begin
   result := enabled;
end;

procedure TjvBitmapButton.SetEnabled( const Value : boolean ); // by Luiz
Escobar
begin
   enabled := value;
   fenable := enabled;
   Paint;
end ;

procedure TjvBitmapButton.Click;
begin
  inherited;
  if FPushDown then
    if assigned(onclick) then
      onclick(self);
end;

constructor TjvBitmapButton.Create(AOwner: TComponent);
begin
  inherited;
  width:=24;
  height:=24;
  FPushDown:=false;
  FMouseOver:=false;
  FLatching:=false;
  FHotTrack:=true;
  FDown:=false;
  FBitmap:=TBitmap.create;
  Fbitmap.width:=24;
  Fbitmap.Height:=24;
  Fbitmap.canvas.brush.color:=clgray;
  FBitmap.canvas.FillRect (rect(1,1,23,23));
  FLighter:=Tbitmap.create;
  FDarker:=Tbitmap.create;
  FDisabled:=Tbitmap.create; // by Luiz Escobar
  Fenable := enabled;  // by Luiz Escobar
end;

destructor TjvBitmapButton.Destroy;
begin
  FBitmap.free;
  FLighter.free;
  FDarker.free;
  FDisabled.free; // by Luiz Escobar
  inherited;
end;

procedure TjvBitmapButton.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if FBitmap.canvas.pixels[x,y]<>Fbitmap.canvas.pixels[0,FBitmap.height-1]
then
   FPushDown:=true
   else
   FPushDown:=false;
  Paint;
  if assigned(onmousedown) then
    onmousedown(self,button,shift,x,y);
end;

procedure TjvBitmapButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  FPushDown:=false;
  if Latching then
    FDown:= not FDown
  else
    FDown:=false;
  Paint;
  if assigned(onmouseup) then
    onmouseup(self,button,shift,x,y);
end;

procedure TjvBitmapButton.Paint;
var Acolor:TColor;
begin
  inherited;
  if assigned(FBitmap) then
  begin
    AColor:=FBitmap.canvas.pixels[0,FBitmap.height-1];
    Fbitmap.transparent:=true;
    Fbitmap.transparentcolor:=Acolor;
    FLighter.transparent:=true;
    Flighter.TransparentColor :=AColor;
    FDarker.transparent:=true;
    FDarker.TransparentColor :=AColor;
    AColor:=FDisabled.canvas.pixels[0,FDisabled.height-1];
    FDisabled.transparent:=true;
    FDisabled.TransparentColor :=AColor;
    if enabled  then begin // by Luiz Escobar
       if FPushdown then  begin
          canvas.draw(1,1,FDarker)
       end else begin
         if Down then
           canvas.Draw(1,1,FDarker)
         else if (FMouseOver and FHotTrack) then
           canvas.draw(0,0,FLighter)
         else canvas.Draw (0,0,FBitmap);
       end;
    end else canvas.Draw(0,0,FDisabled); // by Luiz Escobar
  end;
end;

procedure TjvBitmapButton.SetBitmap(const Value: TBitmap);
begin
  FBitmap.assign(Value);
  FBitmap.transparent:=true;
  FBitmap.TransparentColor :=FBitmap.Canvas.pixels[0,FBitmap.Height-1];
  width:=FBitmap.Width ;
  height:=FBitmap.Height ;
  MakeLighter;
  MakeDarker;
  MakeDisabled;
end;

procedure TjvBitmapButton.MakeDisabled; // procedure by Luiz Escobar
var
  c, x, y: Integer;
  PxlColor: TColor;
  R: TRect;
  Offset, Flags: Integer;
  DrawPressed: Boolean;
  Image: TBitmap;
  Bitmap: TBitmap;
begin
  FDisabled.Width := FBitmap.Width;
  FDisabled.Height := FBitmap.Height;
  FDisabled.PixelFormat := FBitmap.PixelFormat;
  FDisabled.Assign( FBitmap );
      for x := 0 to FBitmap.Width - 1 do
        for y := 0 to FBitmap.Height - 1 do
        begin
          PxlColor := ColorToRGB(FBitmap.Canvas.Pixels[x, y]);
          c := Round((((PxlColor shr 16) + ((PxlColor shr 8) and $00FF) +
(PxlColor and $0000FF)) div 3)) div 2 + 96;
          FDisabled.Canvas.Pixels[x, y] := RGB(c, c, c);
        end;

end;

procedure TjvBitmapButton.MakeLighter;
var p1,p2:Pbytearray;
    x,y:integer;
    rt,gt,bt:byte;
    r,g,b:byte;
    AColor:TColor;
begin
  FLighter.Width :=FBitmap.Width ;
  FLighter.Height :=FBitmap.height;
  Acolor:=colortorgb(FBitmap.canvas.pixels[0,FBitmap.height-1]);
  rt:=GetRValue(Acolor);
  gt:=GetGValue(AColor);
  bt:=getBValue(AColor);
  FBitmap.PixelFormat  :=pf24bit;
  FLighter.PixelFormat :=pf24bit;
  for y:=0 to Fbitmap.height-1 do
  begin
    p1:=Fbitmap.ScanLine [y];
    p2:=FLighter.ScanLine [y];
    for x:=0 to FBitmap.width-1 do
    begin
      if (p1[x*3]=bt)and (p1[x*3+1]=gt)and (p1[x*3+2]=rt) then
      begin
        p2[x*3]:=p1[x*3];
        p2[x*3+1]:=p1[x*3+1];
        p2[x*3+2]:=p1[x*3+2];
      end
      else
      begin
        p2[x*3]:=$FF-round(0.8*abs($FF-p1[x*3]));
        p2[x*3+1]:=$FF-round(0.8*abs($FF-p1[x*3+1]));
        p2[x*3+2]:=$FF-round(0.8*abs($FF-p1[x*3+2]));
      end;
    end;
  end;
end;

procedure TjvBitmapButton.MakeDarker;
var p1,p2:Pbytearray;
    x,y:integer;
    rt,gt,bt:byte;
    r,g,b:byte;
    AColor:TColor;
begin
  FDarker.Width :=FBitmap.Width ;
  FDarker.Height :=FBitmap.height;
  Acolor:=colortorgb(FBitmap.canvas.pixels[0,FBitmap.height-1]);
  rt:=GetRValue(Acolor);
  gt:=GetGValue(AColor);
  bt:=getBValue(AColor);
  FBitmap.PixelFormat :=pf24bit;
  FDarker.PixelFormat :=pf24bit;
  for y:=0 to Fbitmap.height-1 do
  begin
    p1:=Fbitmap.ScanLine [y];
    p2:=FDarker.ScanLine [y];
    for x:=0 to FBitmap.width-1 do
    begin
      if (p1[x*3]=bt)and (p1[x*3+1]=gt)and (p1[x*3+2]=rt) then
      begin
        p2[x*3]:=p1[x*3];
        p2[x*3+1]:=p1[x*3+1];
        p2[x*3+2]:=p1[x*3+2];
      end
      else
      begin
        p2[x*3]:=round(0.7*p1[x*3]);
        p2[x*3+1]:=round(0.7*p1[x*3+1]);
        p2[x*3+2]:=round(0.7*p1[x*3+2]);
      end
    end;
  end;
end;




procedure TjvBitmapButton.CMMouseLeave(var Message: TMessage);
begin
  FMouseOver:=false;
  Paint;
end;

procedure TjvBitmapButton.Loaded;
begin
  inherited;
  if not FBitmap.Empty then
  begin
    MakeDarker;
    MakeLighter;
    MakeDisabled;
  end;
end;

procedure TjvBitmapButton.SetLatching(const Value: boolean);
begin
  FLatching := Value;
  if not FLatching then
  begin
    FDown:=false;
    paint;
  end;
end;

procedure TjvBitmapButton.SetDown(const Value: boolean);
begin
  if FLatching then
  begin
    FDown := Value;
    paint;
  end
  else
  begin
    FDown:=false;
    paint;
  end;
end;

procedure TjvBitmapButton.Resize;
begin
  inherited;
  if assigned(Fbitmap) then
  begin
    width:=FBitmap.width+1;
    height:=FBitmap.Height+1;
  end
  else
  begin
    width:=24;
    height:=24;
  end;
end;


procedure TjvBitmapButton.SetHotTrack(const Value: boolean);
begin
  FHotTrack := Value;
end;

procedure TjvBitmapButton.MouseMove(Shift: TShiftState; X, Y: Integer);
var Value:boolean;
begin
  inherited;
  Value:=
FBitmap.canvas.pixels[x,y]<>Fbitmap.canvas.pixels[0,FBitmap.height-1];
  if value<>FMouseOver then
  begin
    FMouseOver:=value;
    Paint;
  end;
  if assigned(onmousemove) then
    onmousemove(self,shift,x,y);
end;

end.



--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>



Links do Yahoo! Grupos








[As partes desta mensagem que não continham texto foram removidas]



--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]



Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE


Links do Yahoo! Grupos

Responder a