★★★我从TDBGridEh扩展的一个组件,半路出了点问题,进来帮我看看!★★★
组件类名:TDBGridEhHw,继承自TDBGridEh类
功能:在TDBGridEh实例上点击右键,可以弹出快捷菜单,功能分别是:新增记录,删除记录,打印当前表格,导出当前表格中的内容为... 4个功能,但是在做打印的时候出问题了.问题是要设置TPrintDBGridEh实例的DBGridEh属性,但现在我的新组件TDBGridEhHw不是TDBGridEh了,应该怎么搞定呀?
下面是我的原代码:大家帮我看看:
unit DBGridEhHw;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Grids, DBGridEh, PrnDbgeh, Dialogs, Menus, DB;
type
TDBGridEhHw = class(Tdbgrideh)
private
{ Private declarations }
protected
{ Protected declarations }
procedure AddOnClick(Sender: TObject);
procedure DelOnClick(Sender: TObject);
procedure PrintOnClick(Sender: TObject);
procedure ExportOnClick(Sender: TObject);
public
HwPopupMenu: TPopupMenu;
HwMenuAdd: TMenuItem;
HwMenuDel: TMenuItem;
HwMenuPrint: TMenuItem;
HwMenuExport: TMenuItem;
HwMenuItemLine: TMenuItem;
HwEhprint: TPrintDBGridEh;
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor destroy; override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure TDBGridEhHw.AddOnClick(Sender: TObject);
begin
showmessage('插入一条新记录');
if (DataSource.DataSet.Active) and ((DataSource.DataSet.State = dsEdit) or (DataSource.DataSet.State = dsInsert)) then
begin
DataSource.DataSet.Append;
end;
end;
procedure TDBGridEhHw.DelOnClick(Sender: TObject);
begin
showmessage('删除当前记录');
if (DataSource.DataSet.Active) and ((DataSource.DataSet.State = dsEdit) or (DataSource.DataSet.State = dsInsert)) then
begin
DataSource.DataSet.Delete;
end;
end;
procedure TDBGridEhHw.PrintOnClick(Sender: TObject);
begin
showmessage('打印当前表格');
if (DataSource.DataSet.Active) and (DataSource.DataSet.RecordCount > 0) then
HwEhprint.Preview;
end;
procedure TDBGridEhHw.ExportOnClick(Sender: TObject);
begin
showmessage('导出为其他文件');
end;
constructor TDBGridEhHw.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if not (csDesigning in self.ComponentState) then
begin
if self.PopupMenu = nil then
begin
Hwehprint := TPrintDBGridEh.Create(self); //创建一个TPrintDBGridEh对象,并且与TDBGridEh实例关联,实现表格打印
HwEhprint.DBGridEh := ?; //现在问题出在这儿,因为HwEhprint.DBGridEh必须是一个TDBGridEh类型
//,而目前我的是TDBGridEhHw,它是从TDBGridEh继承下来的,此时想个
//什么办法来设置这个属性?
HwPopupMenu := TPopupMenu.Create(self); //创建快捷菜单
HwMenuAdd := TMenuItem.Create(self); //创建子菜单
HwMenuAdd.Caption := '新增记录';
HwMenuAdd.OnClick := AddOnClick;
HwMenuDel := TMenuItem.Create(self); //创建子菜单
HwMenuDel.Caption := '删除记录';
HwMenuDel.OnClick := DelOnClick;
HwMenuPrint := TMenuItem.Create(self); //创建子菜单
HwMenuPrint.Caption := '打印...';
HwMenuPrint.OnClick := PrintOnClick;
HwMenuExport := TMenuItem.Create(self); //创建子菜单
HwMenuExport.Caption := '导出文件...';
HwMenuExport.OnClick := ExportOnClick;
HwPopupMenu.Items.Add(HwMenuAdd); //加入子菜单
HwPopupMenu.Items.Add(HwMenuDel);
HwPopupMenu.Items.Add(HwMenuPrint);
HwPopupMenu.Items.Add(HwMenuExport);
self.PopupMenu := HwPopupMenu;
end;
end;
end;
destructor TDBGridEhHw.destroy;
begin
HwPopupMenu.Free;
inherited destroy;
end;
procedure Register;
begin
RegisterComponents('Hw', [TDBGridEhHw]);
end;
end.