TLama

Untitled

Nov 5th, 2013
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.48 KB | None | 0 0
  1. type
  2.   TCustomCard = class(TGraphicControl)
  3.   private
  4.     FDrawBuffer: TBitmap;
  5.     FBackground: TPicture;
  6.     procedure SetBackground(Value: TPicture);
  7.     procedure BackgroundChanged(Sender: TObject);
  8.     procedure GrayscaleBitmap(Bitmap: TBitmap);
  9.     procedure CMTextChanged(var AMessage: TMessage); message CM_TEXTCHANGED;
  10.     procedure CMEnabledChanged(var AMessage: TMessage); message CM_ENABLEDCHANGED;
  11.   protected
  12.     procedure Paint; override;
  13.     procedure Resize; override;
  14.     procedure Loaded; override;
  15.     procedure UpdateDrawBuffer; virtual;
  16.     property Background: TPicture read FBackground write SetBackground;
  17.   public
  18.     constructor Create(AOwner: TComponent); override;
  19.     destructor Destroy; override;
  20.   end;
  21.  
  22. implementation
  23.  
  24. constructor TCustomCard.Create(AOwner: TComponent);
  25. begin
  26.   inherited;
  27.   FDrawBuffer := TBitmap.Create;
  28.   FBackground := TPicture.Create;
  29.   FBackground.OnChange := BackgroundChanged;
  30. end;
  31.  
  32. destructor TCustomCard.Destroy;
  33. begin
  34.   FBackground.Free;
  35.   FDrawBuffer.Free;
  36.   inherited;
  37. end;
  38.  
  39. procedure TCustomCard.GrayscaleBitmap(Bitmap: TBitmap);
  40. var
  41.   X: Integer;
  42.   Y: Integer;
  43.   Gray: Byte;
  44.   Pixel: PRGBTriple;
  45. begin
  46.   for Y := 0 to Bitmap.Height - 1 do
  47.   begin
  48.     Pixel := Bitmap.ScanLine[Y];
  49.     for X := 0 to Bitmap.Width - 1 do
  50.     begin
  51.       Gray := Round((0.299 * Pixel.rgbtRed) + (0.587 * Pixel.rgbtGreen) + (0.114 * Pixel.rgbtBlue));
  52.       Pixel.rgbtRed := Gray;
  53.       Pixel.rgbtGreen := Gray;
  54.       Pixel.rgbtBlue := Gray;
  55.       Inc(Pixel);
  56.     end;
  57.   end;
  58. end;
  59.  
  60. procedure TCustomCard.CMTextChanged(var AMessage: TMessage);
  61. begin
  62.   UpdateDrawBuffer;
  63.   Invalidate;
  64. end;
  65.  
  66. procedure TCustomCard.CMEnabledChanged(var AMessage: TMessage);
  67. begin
  68.   UpdateDrawBuffer;
  69.   Invalidate;
  70. end;
  71.  
  72. procedure TCustomCard.SetBackground(Value: TPicture);
  73. begin
  74.   FBackground.Assign(Value);
  75. end;
  76.  
  77. procedure TCustomCard.BackgroundChanged(Sender: TObject);
  78. begin
  79.   UpdateDrawBuffer;
  80.   Invalidate;
  81. end;
  82.  
  83. procedure TCustomCard.UpdateDrawBuffer;
  84. begin
  85.   FDrawBuffer.Canvas.StretchDraw(ClientRect, FBackground.Graphic);
  86.   FDrawBuffer.Canvas.TextOut(0, 0, Text);
  87.   if not Enabled then
  88.     GrayscaleBitmap(FDrawBuffer);
  89. end;
  90.  
  91. procedure TCustomCard.Paint;
  92. begin
  93.   Canvas.Draw(0, 0, FDrawBuffer);
  94. end;
  95.  
  96. procedure TCustomCard.Resize;
  97. begin
  98.   inherited;
  99.   FDrawBuffer.SetSize(ClientWidth, ClientHeight);
  100.   UpdateDrawBuffer;
  101. end;
  102.  
  103. procedure TCustomCard.Loaded;
  104. begin
  105.   inherited;
  106.   UpdateDrawBuffer;
  107. end;
Advertisement
Add Comment
Please, Sign In to add comment