• 带图片背景的Panel控件源代码:TImagePanel


    unit ImagePanel;
    
    interface
    
    uses
      Windows, ExtCtrls, Graphics, Classes, Controls; // SysUtils
    
    type
      TImagePanel = class(TCustomPanel)
      private
        { Private declarations }
        FPicture : TPicture;
        FTransparent : Boolean;
        FAutoSize : Boolean;
    
        procedure PictureChanged(Sender: TObject);
        procedure SetPicture(const Value: TPicture);
        procedure SetAutoSize(const Value: Boolean); reintroduce;
        procedure SetTransparent(const Value: Boolean);
        procedure SetFont(const Value: TFont);
        procedure SetCaption(const Value: TCaption);
        procedure SetAlignment(const Value: TAlignment);
      protected
        { Protected declarations }
        procedure Paint(); override;
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy(); override;
      published
        property Picture: TPicture read FPicture write SetPicture;
        property Transparent: Boolean read FTransparent write SetTransparent default false;
        property AutoSize: Boolean read FAutoSize write SetAutoSize;
    
        property Font write SetFont;
        property Caption write SetCaption;
        property Alignment write SetAlignment;
        { Published declarations }
      end;
    
    procedure Register;
    
    implementation
    
    procedure Register;
    begin
      RegisterComponents('Sunisoft', [TImagePanel]);
    end;
    
    { TImagePanel }
    
    constructor TImagePanel.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
    
      FPicture:=TPicture.Create();
      FPicture.OnChange := PictureChanged;
    
      Repaint();
    end;
    
    destructor TImagePanel.Destroy;
    begin
      FPicture.Free();
      FPicture:=nil;
    
      inherited;
    end;
    
    procedure TImagePanel.Paint;
    const
      Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
    var
      Flags: longint;
      Rect: TRect;
      FontHeight: Integer;
    begin
      Canvas.Brush.Style := bsClear;
      Canvas.Font := Font;
    
      if Assigned(FPicture.Graphic) then
      begin
        if FAutoSize then
        begin
          Width := FPicture.Width;
          Height := FPicture.Height;
        end;
    
        if FPicture.Graphic.Transparent<> FTransparent then
          FPicture.graphic.Transparent := FTransparent;
    
        Canvas.stretchDraw(ClientRect, FPicture.Graphic);
      end
      else
      begin
        Canvas.Brush.Color := Color;
        Canvas.FillRect(ClientRect);
      end;
    
      if Caption<>'' then
      begin
        Rect := GetClientRect;
        FontHeight := Canvas.TextHeight('W');
    
        Rect.Top := ((Rect.Bottom + Rect.Top) - FontHeight) div 2;
        Rect.Bottom := Rect.Top + FontHeight;
        Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[Alignment];
        Flags := DrawTextBiDiModeFlags(Flags);
        DrawText(Canvas.Handle, PChar(Caption), -1, Rect, Flags);
      end;
    end;
    
    procedure TImagePanel.PictureChanged(Sender: TObject);
    begin
      Repaint();
    end;
    
    procedure TImagePanel.SetAlignment(const Value: TAlignment);
    begin
      inherited Alignment := Value;
      Repaint();
    end;
    
    procedure TImagePanel.SetAutoSize(const Value: Boolean);
    begin
      FAutoSize := Value;
      Repaint();
    end;
    
    procedure TImagePanel.SetCaption(const Value: TCaption);
    begin
      inherited Caption := Value;
      Repaint();
    end;
    
    procedure TImagePanel.SetFont(const Value: TFont);
    begin
      inherited Font := Value;
      Repaint();
    end;
    
    procedure TImagePanel.SetPicture(const Value: TPicture);
    begin
      FPicture.Assign(Value);
      Repaint();
    end;
    
    procedure TImagePanel.SetTransparent(const Value: Boolean);
    begin
      FTransparent := Value;
      Repaint();
    end;
    
    end.
  • 相关阅读:
    solr
    2.配置Flutter代码编辑器(IDE)
    1.Flutter的下载安装和环境配置
    ReactNative开发环境配置,新手踩坑必备.我也是新手
    汉字转拼音,获取汉字首字母
    For循环性能优化
    JavaScript滑块简易取色器
    C# 获取汉字拼音首字母(修正X问题,真正修正)
    团队项目-个人博客5.31
    团队项目-个人博客5.30
  • 原文地址:https://www.cnblogs.com/findumars/p/2744335.html
Copyright © 2020-2023  润新知