ocx问题:我创建了一个继承TStatusBar的类,包含进度条,下拉列表框等控件,怎么才能把这个类封装成ocx呢
我创建了一个继承TStatusBar的类,包含进度条,下拉列表框等控件,怎么才能把这个类封装成ocx呢,奇怪的是:TStatusBar存在于面板上,怎么在New ActiveX Control窗口中怎么不能选择TStatusBar
代码如下:
unit utMyStatusBar;
interface
uses
Windows, Messages,
Activex, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, shellapi,GIFImage,
StdCtrls, ActnList, ComObj, Variants, ExtCtrls, ComCtrls, OleCtrls, utProgress;
Type
TMyStatusBar = class(TStatusBar)
private
{ Private declarations }
FStep : integer; //进度条的进度
public
{ Public declarations }
cbReferFrm : TComboBox; //坐标系TComboBox
prbProcess : TProgressBar; //进度条
imgProcess : TImage; //可以显示gif文件
GifFileName : String; //gif文件全路径和文件全名
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure InitGifImage(GifFile: string);
procedure AddReferFrm(ReferFrmName: string); //增加坐标系名称
procedure DelReferFrm(Index: Integer); //删除坐标系名称
//创建进度条,并赋最大值Max(与进度条显示进度有关)
procedure InitProgressBar(Max: Integer);
//显示进度,Step为增量
procedure ProgressStep(Step: Integer = 1);
//清除进度条的显示,并释放
procedure ClearProgressStep;
//播放动画
procedure PlayAnimate;
//停止动画
procedure StopAnimate;
procedure SetScale(Scale: double); //设置比例尺
procedure SetCoordinate(X, Y: double); //设置X, Y坐标值
procedure AddProgressBar(ProgressBarName:TControl); //增加进度条
protected
//事件过程定义
procedure cbChange(Sender: TObject); //改变坐标系事件过程
procedure SbResize(Sender: TObject); //状态栏改变大小,同时加入gif
published
end;
implementation
constructor TMyStatusBar.Create(AOwner: TComponent);
var
StatusPanel: TStatusPanel;
i: integer;
begin
inherited Create(AOwner);
ControlStyle:= ControlStyle + [csAcceptsControls];//可以在Panel添加其他控件
cbReferFrm := TComboBox.Create(Nil);
imgProcess := TImage.Create(Nil);
for i:=0 to 3 do
begin
StatusPanel := TStatusPanel.Create(Panels); //创建Panels
self.Panels.AddItem(StatusPanel,i);
end;
//设置控件和Panel的宽度和文字显示 ,默认为50
Panels[0].Width := 150;
Panels[0].Text := '坐标系:';
Panels[1].Width := 150;
Panels[1].Text := '比例尺:';
Panels[2].Width := 200;
Panels[2].Text := 'X坐标: Y坐标: ';
//self.OnDrawPanel := DrawPanel;
//加入下拉列表框
with cbReferFrm do
begin
Top:= 2;
Left:= 50;
Width:= 100;
Height:= self.Height;
Visible:= True;
Parent:= self;
end;
//添加事件过程
cbReferFrm.OnChange := cbChange;
self.OnResize := SbResize;
end;
destructor TMyStatusBar.Destroy;
begin
inherited Destroy;
end;
procedure TMyStatusBar.InitGifImage(GifFile: string);
begin
GifFileName := GifFile;
imgProcess.Picture.LoadFromFile(GifFileName);
TGIFImage(imgProcess.Picture.Graphic).Animate := false;
end;
procedure TMyStatusBar.addReferFrm(ReferFrmName: string);
begin
cbReferFrm.Items.Add(ReferFrmName);
end;
procedure TMyStatusBar.DelReferFrm(Index: Integer);
begin
cbReferFrm.Items.Delete(Index);
end;
procedure TMyStatusBar.InitProgressBar(Max: Integer);
begin
prbProcess := TProgressBar.Create(Nil);
with prbProcess do
begin
Top:= 2;
Left:= 502;
Width:= self.Width - 30 - 502;
Height:= 21;
Visible:= True;
Parent:= self;
end;
prbProcess.Min := 0;
prbProcess.Max := Max;
FStep := 0;
end;
procedure TMyStatusBar.ProgressStep(Step: Integer = 1);
begin
if Step = 1 then
inc(FStep)
else
FStep := FStep + Step;
Application.ProcessMessages;
prbProcess.Position := FStep;
end;
procedure TMyStatusBar.ClearProgressStep;
begin
FStep := 0;
prbProcess.Position := 0;
prbProcess.Free;
end;
procedure TMyStatusBar.PlayAnimate;
begin
if TGifImage(imgProcess.Picture.Graphic) <> Nil then
begin
TGifImage(imgProcess.Picture.Graphic).Animate := true;
TGifImage(imgProcess.Picture.Graphic).PaintResume;
end;
end;
procedure TMyStatusBar.StopAnimate;
begin
if TGifImage(imgProcess.Picture.Graphic) <> Nil then
TGifImage(imgProcess.Picture.Graphic).PaintPause;
end;
procedure TMyStatusBar.SetScale(Scale: double);
begin
Panels[1].Text := '比例尺: 1:' + FloatToStr(Scale);
end;
procedure TMyStatusBar.SetCoordinate(X, Y: double);
begin
Panels[2].Text := 'X坐标:' + FloatToStr(X) + ' Y坐标:' + FloatToStr(Y);
end;
procedure TMyStatusBar.AddProgressBar(ProgressBarName: TControl);
begin
with ProgressBarName do
begin
Top:= 2;
Left:= 502;
Width:= self.Width - 30 - 502;
Height:= 21;
Visible:= True;
Parent:= self;
end;
end;
procedure TMyStatusBar.cbChange(Sender: TObject);
begin
//showmessage('cbChange');
end;
procedure TMyStatusBar.SbResize(Sender: TObject);
begin
with imgProcess do
begin
Top:= 7;
Left := self.Width - 25;
Parent:= self;
end;
end;
initialization
finalization
end.