带图片背景的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 .
查看更多关于带图片背景的Panel控件源代码:TImagePanel的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did48475