下面的程序不知道能否实现,SetGlyph()和GetGlyph()方法是从TSpeedButton类中抄过来的,但是下面的程序编译时提示无法识别TButtonGlyph类,但是我Use了Buttons单元,为什么??如果您知道怎么实现这个功能请您赐教!unit ButtonPanel;interfaceuses
Windows, Messages, SysUtils, Classes, Controls,ExtCtrls,Buttons;type
TButtonPanel = class(Tpanel)
private
FDown:Boolean;
FGlyph: Pointer;
Procedure SetDown(Value:Boolean);
function GetGlyph: TBitmap;
procedure SetGlyph(Value: TBitmap);
procedure GlyphChanged(Sender: TObject);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
Property Down:Boolean Read FDown Write SetDown;
property Glyph: TBitmap read GetGlyph write SetGlyph;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('SelfCom', [TButtonPanel]);
end;{ TButtonPanel }constructor TButtonPanel.Create(AOwner: TComponent);
begin
FGlyph := TButtonGlyph.Create;
TButtonGlyph(FGlyph).OnChange:=GlyphChanged;
inherited;
FDown :=True;
Width :=50;
Height:=40;
BevelInner:= bvRaised;
BevelOuter:= bvRaised;
Caption:='ButtonPanel1';
end;function TButtonPanel.GetGlyph: TBitmap;
begin
Result := TButtonGlyph(FGlyph).Glyph;
end;
procedure TButtonPanel.SetGlyph(Value: TBitmap);
begin
TButtonGlyph(FGlyph).Glyph := Value;
Invalidate;
end;procedure TButtonPanel.SetDown(Value:Boolean);
begin
if Value then begin
BevelInner:= bvRaised;
BevelOuter:= bvRaised;
end
else begin
BevelInner:= bvLowered;
BevelOuter:= bvLowered;
end;
FDown:=Value ;
end;
procedure TButtonPanel.GlyphChanged(Sender: TObject);
begin
Invalidate;
end;destructor TButtonPanel.Destroy;
begin
TButtonGlyph(FGlyph).Free;
inherited;
end;end.
Windows, Messages, SysUtils, Classes, Controls,ExtCtrls,Buttons;type
TButtonPanel = class(Tpanel)
private
FDown:Boolean;
FGlyph: Pointer;
Procedure SetDown(Value:Boolean);
function GetGlyph: TBitmap;
procedure SetGlyph(Value: TBitmap);
procedure GlyphChanged(Sender: TObject);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
Property Down:Boolean Read FDown Write SetDown;
property Glyph: TBitmap read GetGlyph write SetGlyph;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('SelfCom', [TButtonPanel]);
end;{ TButtonPanel }constructor TButtonPanel.Create(AOwner: TComponent);
begin
FGlyph := TButtonGlyph.Create;
TButtonGlyph(FGlyph).OnChange:=GlyphChanged;
inherited;
FDown :=True;
Width :=50;
Height:=40;
BevelInner:= bvRaised;
BevelOuter:= bvRaised;
Caption:='ButtonPanel1';
end;function TButtonPanel.GetGlyph: TBitmap;
begin
Result := TButtonGlyph(FGlyph).Glyph;
end;
procedure TButtonPanel.SetGlyph(Value: TBitmap);
begin
TButtonGlyph(FGlyph).Glyph := Value;
Invalidate;
end;procedure TButtonPanel.SetDown(Value:Boolean);
begin
if Value then begin
BevelInner:= bvRaised;
BevelOuter:= bvRaised;
end
else begin
BevelInner:= bvLowered;
BevelOuter:= bvLowered;
end;
FDown:=Value ;
end;
procedure TButtonPanel.GlyphChanged(Sender: TObject);
begin
Invalidate;
end;destructor TButtonPanel.Destroy;
begin
TButtonGlyph(FGlyph).Free;
inherited;
end;end.
解决方案 »
- 奇怪的delphi 2007
- 如何判断当前鼠标是否在某个控件上(注意:有可能都个控件重合在一起)
- 我如何将ListView1指定行信息,返回到StringGrid1指定行中的列中
- 急需qucickreport打印demo^_^
- 请问如何设置RichEdit中某行的字的颜色?
- 我想要这样的工作环境,不知有没有
- 有关应用程序模块太大,各模块的调用的问题
- 怎样实现点对点的文件传输啊 在Internet中
- 我如何根据输入的数字N,动态生成N个edit控件?能实现吗?谢谢!
- 一个很着急的求助!
- 我C++写了一个类,没有用到任何的MFC类,类都是封装微软的API,我用VC编译成DLL。这个DLL,要如何让DELPHI程序可以调用该类里的公共函数
- 一个基础的问题但我不会请大家帮忙————在线等待!!!!
因为她没有Canvas,所以要创建一个TControlCanvas()对象
这个对象的Control:=Tpanel
然后就可以直接在这个你创建的画布上面画图了画完就会在Tpanel上看到
unit uImagePanel;interfaceuses
SysUtils, Classes, Controls, ExtCtrls,Windows,Graphics,Messages;type
TImagePanel = class(TPanel)
private
{ Private declarations }
FBitmap:TBitmap;
FBmpFileName: string;
FStreatch: Boolean;
FDisplayImageFileName: Boolean;
procedure SetBmpFileName(const Value: string);
procedure SetStreatch(const Value: Boolean);
procedure SetDisplayImageFileName(const Value: Boolean);
protected
{ Protected declarations }
procedure Paint;override;
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
public
{ Public declarations }
published
{ Published declarations }
property BmpFileName:string read FBmpFileName write SetBmpFileName;
property Streatch:Boolean read FStreatch write SetStreatch default False;
property DisplayImageFileName:Boolean read FDisplayImageFileName write SetDisplayImageFileName default True;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Report', [TImagePanel]);
end;{ TImagePanel }procedure TImagePanel.SetBmpFileName(const Value: string);
begin
FBmpFileName := Value;
if FileExists(FBmpFileName) then
begin
if not Assigned(FBitMap) then
FBitmap:=TBitmap.Create;
FBitmap.LoadFromFile(FBmpFileName);
Paint;
end
else
begin
FBitmap.Free;
FBitmap:=nil;
Paint;
end;end;procedure TImagePanel.Paint;
var
Rect:TRect;
begin
// if not Assigned(FBitmap) then
begin
inherited;
Canvas.TextOut(0,0,'无图像');
Exit;
end; Canvas.Lock;
try inherited;
if FStreatch then
begin Rect.Left:=0;
Rect.Top:=0;
Rect.Bottom:=Height+Top;
Rect.Right:=Width+Left; //拉伸
Canvas.StretchDraw(Rect,FBitmap);
end
else
begin
//不拉伸
Canvas.Draw(0,0,FBitmap);
end;
if csDesigning in ComponentState then
with Canvas do
begin
Canvas.Pen.Color:=clRed;
if FDisplayImageFileName then
Canvas.TextOut(0,0,PChar(FBmpFileName));
end else
begin
if FDisplayImageFileName then
Canvas.TextOut(0,0,PChar(FBmpFileName)) ;
end;
finally
Canvas.Unlock;
end;end;procedure TImagePanel.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
//强制重绘
Paint;
//由系统重绘
//UpdateWindow(Handle);
end;procedure TImagePanel.SetStreatch(const Value: Boolean);
begin
if FStreatch<> Value then
begin
FStreatch := Value;
Paint;
end;
end;procedure TImagePanel.SetDisplayImageFileName(const Value: Boolean);
begin
if FDisplayImageFileName<> Value then
begin
FDisplayImageFileName := Value;
Paint;
end;
end;end.