Gölge componenti

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Gölge componenti

Mesaj gönderen White Rose »

birara ben de kafayı takmıştım bu gölge işine ve aşağıdaki componenti
keşfettim, usta delphiciler daha da geliştirebilir. kolay gelsin

Resim

Kod: Tümünü seç

unit Golge;

interface

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

type
  TYogunluk = (Yuksek, Dusuk);
  TGolgePos = (Yuksol, Yuksag, Asgsol, Asgsag);

  type
  TGolge  = class(TGraphicControl)

  private
    FGolgeIntensity : integer;
    FGolgeYogunluk  : TYogunluk;
    FGolgePozisyon  : TGolgePos;
    FGolgeGenislik  : integer;
    procedure SetGolgeIntensity(Value : integer);
    procedure SetGolgeYogunluk(Value  : TYogunluk);
    procedure SetGolgePozisyon(Value  : TGolgePos);
    procedure SetGolgeGenislik(Value : integer);
    procedure DrawGolge(Handle : HDC; left,top,right,bottom,width,intensity : integer;
                       GolgePos:TGolgePos; Yogunluk : TYogunluk);
    procedure DrawFilter(Handle : HDC; left,top,right,bottom,intensity : integer; Yogunluk : TYogunluk);

    function PixelChanged(Color:TColor; value:integer) : TColor;

  protected
    procedure paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
  published
    property Align;
    property GolgeIntensity : integer   read FGolgeIntensity write SetGolgeIntensity;
    property GolgeYogunluk  : TYogunluk read FGolgeYogunluk  write SetGolgeYogunluk;
    property GolgePozisyon  : TGolgePos read FGolgePozisyon  write SetGolgePozisyon;
    property GolgeGenislik  : integer   read FGolgeGenislik  write SetGolgeGenislik;
    property visible;
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Sample', [TGolge]);
end;

constructor TGolge.create(aowner : tcomponent);
begin
  inherited Create(AOwner);
  Height := 105;
  Width  := 105;
  FGolgeIntensity := 75;
  FGolgeYogunluk  := Yuksek;
  FGolgePozisyon  := Asgsag;
  FGolgeGenislik  := 10;
end;

destructor TGolge.Destroy;
begin
  inherited Destroy;
end;

procedure TGolge.paint;
var
  CanvasMem : TBitmap;
  BW,BI : integer;
begin
  CanvasMem := TBitmap.Create;
  CanvasMem.Width  := Width;
  CanvasMem.height := height;
  CanvasMem.Canvas.CopyRect(ClientRect,Canvas,ClientRect);
  DrawGolge(CanvasMem.Canvas.handle, 0, 0, width, height, FGolgeGenislik, -FGolgeIntensity, FGolgePozisyon, FGolgeYogunluk);
  inherited canvas.CopyRect(ClientRect,CanvasMem.Canvas,ClientRect);
  CanvasMem.free;
end;

procedure TGolge.SetGolgeIntensity(Value: integer);
begin
  FGolgeIntensity := Value;
  Refresh;
end;

procedure TGolge.SetGolgeYogunluk(Value: TYogunluk);
begin
  FGolgeYogunluk := Value;
  Refresh;
end;

procedure TGolge.SetGolgePozisyon(Value: TGolgePos);
begin
  FGolgePozisyon := Value;
  Refresh;
end;

procedure TGolge.SetGolgeGenislik(Value: integer);
begin
  FGolgeGenislik := Value;
  Refresh;
end;

procedure TGolge.DrawGolge(Handle : HDC; left,top,right,bottom,width,intensity : integer;
          GolgePos:TGolgePos; Yogunluk : TYogunluk);
begin
  case GolgePos of
    Yuksol:
    begin
      DrawFilter(Handle,left+width+1,top,right-width,top+width,intensity,Yogunluk);
      DrawFilter(Handle,left,top,left+width,bottom-width,intensity,Yogunluk);
    end;
    Yuksag:
    begin
      DrawFilter(Handle,left+width,top,right-width-1,top+width,intensity,Yogunluk);
      DrawFilter(Handle,right-width,top,right,bottom-width,intensity,Yogunluk);
    end;
    Asgsag:
    begin
      DrawFilter(Handle,left+width,bottom-width,right-width-1,bottom,intensity,Yogunluk);
      DrawFilter(Handle,right-width,top+width,right,bottom,intensity,Yogunluk);
    end;
    Asgsol:
    begin
      DrawFilter(Handle,left+width+1,bottom-width,right-width,bottom,intensity,Yogunluk);
      DrawFilter(Handle,left,top+width,left+width,bottom,intensity,Yogunluk);
    end;
  end;
end;

procedure TGolge.DrawFilter(Handle : HDC; left,top,right,bottom,intensity : integer; Yogunluk : TYogunluk);
var
  x,y   : integer;
  width : integer;
  Red   : integer;
  Cv    : TCanvas;
begin
  x := left;
  repeat
    y := top;
    repeat
      case Yogunluk of
        Dusuk : if (odd(x)=odd(y)) then setpixel(Handle,x,y,PixelChanged(getpixel(Handle,x,y),Intensity));
        Yuksek  : setpixel(Handle,x,y,PixelChanged(getpixel(Handle,x,y),Intensity));
      end;
      inc(y);
    until y>bottom;
    inc(x);
  until x>right;
end;

function TGolge.PixelChanged(Color:TColor; value:integer) : TColor;
var
  r,g,b : integer;
begin
  r := getrvalue(ColorToRGB(Color));
  g := getgvalue(ColorToRGB(Color));
  b := getbvalue(ColorToRGB(Color));
  if value>0 then
  begin
    if r+value>255 then r := 254 else inc(r,value);
    if g+value>255 then g := 254 else inc(g,value);
    if b+value>255 then b := 254 else inc(b,value);
  end else
  begin
    if r+value<0 then r := 1 else inc(r,value);
    if g+value<0 then g := 1 else inc(g,value);
    if b+value<0 then b := 1 else inc(b,value);
  end;
  result := rgb(r,g,b);
end;

end.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Güzel bir paylaşım, teşekkürler :)
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

önemli değil üstad :)
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

teşekkür ederim. güzel bir bilgi :wink:
Cevapla