Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- TCustomCard = class(TGraphicControl)
- private
- FDrawBuffer: TBitmap;
- FBackground: TPicture;
- procedure SetBackground(Value: TPicture);
- procedure BackgroundChanged(Sender: TObject);
- procedure GrayscaleBitmap(Bitmap: TBitmap);
- procedure CMTextChanged(var AMessage: TMessage); message CM_TEXTCHANGED;
- procedure CMEnabledChanged(var AMessage: TMessage); message CM_ENABLEDCHANGED;
- protected
- procedure Paint; override;
- procedure Resize; override;
- procedure Loaded; override;
- procedure UpdateDrawBuffer; virtual;
- property Background: TPicture read FBackground write SetBackground;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- end;
- implementation
- constructor TCustomCard.Create(AOwner: TComponent);
- begin
- inherited;
- FDrawBuffer := TBitmap.Create;
- FBackground := TPicture.Create;
- FBackground.OnChange := BackgroundChanged;
- end;
- destructor TCustomCard.Destroy;
- begin
- FBackground.Free;
- FDrawBuffer.Free;
- inherited;
- end;
- procedure TCustomCard.GrayscaleBitmap(Bitmap: TBitmap);
- var
- X: Integer;
- Y: Integer;
- Gray: Byte;
- Pixel: PRGBTriple;
- begin
- for Y := 0 to Bitmap.Height - 1 do
- begin
- Pixel := Bitmap.ScanLine[Y];
- for X := 0 to Bitmap.Width - 1 do
- begin
- Gray := Round((0.299 * Pixel.rgbtRed) + (0.587 * Pixel.rgbtGreen) + (0.114 * Pixel.rgbtBlue));
- Pixel.rgbtRed := Gray;
- Pixel.rgbtGreen := Gray;
- Pixel.rgbtBlue := Gray;
- Inc(Pixel);
- end;
- end;
- end;
- procedure TCustomCard.CMTextChanged(var AMessage: TMessage);
- begin
- UpdateDrawBuffer;
- Invalidate;
- end;
- procedure TCustomCard.CMEnabledChanged(var AMessage: TMessage);
- begin
- UpdateDrawBuffer;
- Invalidate;
- end;
- procedure TCustomCard.SetBackground(Value: TPicture);
- begin
- FBackground.Assign(Value);
- end;
- procedure TCustomCard.BackgroundChanged(Sender: TObject);
- begin
- UpdateDrawBuffer;
- Invalidate;
- end;
- procedure TCustomCard.UpdateDrawBuffer;
- begin
- FDrawBuffer.Canvas.StretchDraw(ClientRect, FBackground.Graphic);
- FDrawBuffer.Canvas.TextOut(0, 0, Text);
- if not Enabled then
- GrayscaleBitmap(FDrawBuffer);
- end;
- procedure TCustomCard.Paint;
- begin
- Canvas.Draw(0, 0, FDrawBuffer);
- end;
- procedure TCustomCard.Resize;
- begin
- inherited;
- FDrawBuffer.SetSize(ClientWidth, ClientHeight);
- UpdateDrawBuffer;
- end;
- procedure TCustomCard.Loaded;
- begin
- inherited;
- UpdateDrawBuffer;
- end;
Advertisement
Add Comment
Please, Sign In to add comment