★★★我从TDBGridEh扩展的一个组件,半路出了点问题,进来帮我看看!★★★

arraiy 2004-09-27 06:56:45
组件类名: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.
...全文
103 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
blankman 2004-09-28
  • 打赏
  • 举报
回复
呵呵,没有用过这个控件,也没有这么使用过,
我还是觉得直接使用 sql 语句方便灵活得多
arraiy 2004-09-28
  • 打赏
  • 举报
回复
大家进来帮我看看呀!在线等!

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧