我想自己做一个控件,这个控件和Tpanel一样,只是向Tpanel里面多加了一个TImage,用TImage来在Tpanel上画一个背景,再写一个方法就是可以改变背景.即就是把Tpanel和TImage合在一起,我从来没做过一点头绪都没有.看你们是怎么写的.帮帮我.谢谢
解决方案 »
- 求助 CXgrid 改变选定行的背景颜色??
- 一个函数在程序里执行的时候返回值不稳定,高手进,内详
- delphi idipMcast组件怎么用
- vcl对创建子控件的封装
- 在delphi中,怎么用一个数组代表多个不同长度、类型的结构体的变量?
- 选择多个文件时如何弹出属性对话框?
- radiogroup中如何控制可选项目
- 我把一个form加到dpk中,How调用dpk包中的form?
- 请求大虾帮忙:如何在Delphi5中安装文档对象模型控件TXmlDocument?
- delphi小票打印问题
- 请问各位高手,为什么焦点在控件上,而光标不见了,向上面又可以输入内容?
- Treeview扩展后右边的Scroll怎么移到顶端?
[email protected]
SysUtils, Classes, Controls, ExtCtrls, Graphics;type
TIMGPanel = class(TCustomPanel)
private
FPicture: TPicture;
procedure SetPicture(const Value: TPicture);
protected
procedure Paint;override;
public
property DockManager;
constructor Create(AOwner:TComponent);override;
destructor Destroy;override; published
property Align;
property Alignment;
property Anchors;
property AutoSize;
property BevelInner;
property BevelOuter;
property BevelWidth;
property BiDiMode;
property BorderWidth;
property BorderStyle;
property Caption;
property Color;
property Constraints;
property Ctl3D;
property UseDockManager default True;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property FullRepaint;
property Font;
property Locked;
property ParentBiDiMode;
property ParentBackground;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property Picture:TPicture read FPicture write SetPicture;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnCanResize;
property OnClick;
property OnConstrainedResize;
property OnContextPopup;
property OnDockDrop;
property OnDockOver;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TIMGPanel]);
end;{ TIMGPanel }constructor TIMGPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle + [csReplicatable];
FPicture := TPicture.Create;
Height := 105;
Width := 105;
end;
destructor TIMGPanel.Destroy;
begin
FPicture.Free;
inherited;
end;procedure TIMGPanel.Paint;
begin
inherited;
if Assigned(Picture) then
inherited Canvas.StretchDraw(ClientRect,Picture.Graphic);
end;procedure TIMGPanel.SetPicture(const Value: TPicture);
begin
FPicture.Assign(Value);
end;end.
是的,我看拉,也用过你的,只不过我想多看看你们写的.所以再叫 zxf_feng(阿日) 贴出来看看,我肯定给你分的
现在我把我做的这个控件说出来,看看大家能帮实现这个控件吗?因为时间比较急.我会再多给100分的.哦,TALED是继承于TGraphicControl类的.他与TPANEL继承的不一样和TImage一样.能实现吗?
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,Printers, Buttons,Contnrs,
ElementClass,TypInfo,IniFiles,ImgList;Type
TLedPanelEx = class(TPanel)
private
FBitMap:TBitmap;
FImageChangeLink: TChangeLink;
FImages: TCustomImageList;
FLedIndex: Integer;
procedure SetImages(const Value: TCustomImageList);
procedure ImageListChange(Sender: TObject);
procedure SetLedIndex(const Value: Integer);
protected
procedure Paint; override;
function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Images: TCustomImageList read FImages write SetImages;
property LedIndex:Integer Read FLedIndex Write SetLedIndex;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Standard', [TLedPanelEx]);end;
{ TLedPanelEx }function TLedPanelEx.CanAutoSize(var NewWidth,
NewHeight: Integer): Boolean;
begin
if AutoSize and Assigned(FImages) then
begin
NewWidth:=FImages .Width ;
NewHeight:=FImages .Height;
end;
end;
constructor TLedPanelEx.Create(AOwner: TComponent);
begin
inherited;
FImageChangeLink := TChangeLink.Create;
FImageChangeLink.OnChange := ImageListChange;
FBitMap:=TBitmap .Create;
end;destructor TLedPanelEx.Destroy;
begin
FBitMap.Free;
FImageChangeLink.Free;
inherited;
end;procedure TLedPanelEx.ImageListChange(Sender: TObject);
begin
if Sender = Images then Refresh ;
end;procedure TLedPanelEx.Paint;
begin
inherited;
if Assigned (Images) then
begin
Canvas .CopyMode:=cmWhiteness;
if Images.GetBitmap(FLedIndex,FBitMap) then
Canvas .BrushCopy(Rect(0,0,Images .Width,Images .Height),FBitMap ,Rect(0,0,Images .Width,Images .Height),clWhite);
end;
end;procedure TLedPanelEx.SetImages(const Value: TCustomImageList);
begin
if Images <> nil then Images.UnRegisterChanges(FImageChangeLink);
FImages := Value;
if Images <> nil then
begin
Images.RegisterChanges(FImageChangeLink);
Images.FreeNotification(Self);
end;
Refresh ;
end;procedure TLedPanelEx.SetLedIndex(const Value: Integer);
begin
FLedIndex := Value;
Refresh ;
end;
//
//
// FileName : ImagePanel.pas
//
//
////////////////////////////////////////////////////////////////////////////////////
unit ImagePanel;interfaceuses windows, extctrls, graphics, classes, controls;type
TImagePanel = class(TCustomPanel)
private
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
procedure Paint(); override; public
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;
end;procedure Register;implementation{ 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;procedure Register;
begin
RegisterComponents('Sunisoft', [TImagePanel]);
end;end.