一个弹出菜单组件的开发问题!!!!!

guosq 2006-01-10 04:32:51
这是我自己开发的一个弹出式菜单,
要求:把组件放到窗体上后,自动创建六个菜单项:[插入、增加、删除、上移、下移、清除]

问题是,它给我创建了12个菜单项,重复创建了一次。找不到问题所在,请帮小弟一把.

下面是组件原程序,注册一 下就可以用了

unit gridMenuGsq;

interface

uses Menus, Classes, dialogs, GridGsq;

type
TgridMenu=class(TPopupMenu)
private
FGridGsq: TGridGsq;
Fa: tmenuitem ;
Fb: tmenuitem ;
Fc: tmenuitem ;
Fd: tmenuitem ;
Fe: tmenuitem ;
Ff: tmenuitem ;
Fonjs: TNotifyEvent;
procedure a1(Sender: TObject);
procedure b1(Sender: TObject);
procedure c1(Sender: TObject);
procedure d1(Sender: TObject);
procedure e1(Sender: TObject);
procedure f1(Sender: TObject);
procedure SetGridGsq(const Value: TGridGsq);
public
constructor create(AOwner: TComponent);override;
destructor Destroy; override;
published
property GridGsq: TGridGsq read FGridGsq write SetGridGsq;
property onjs:TNotifyEvent read Fonjs write Fonjs;
end;

procedure Register;

implementation

{ gridMenu }

procedure Register;
begin
RegisterComponents('ABC', [TgridMenu]);
end;

constructor TgridMenu.create(AOwner: TComponent);
begin
inherited;
autohotkeys:= maManual;

Fa:= tmenuitem.Create(self);
Fa.Name := 'a';
Fa.Caption:= '插入';
Fa.OnClick:=a1;

Fb:= tmenuitem.Create(self);
Fb.Name :='b';
Fb.Caption:= '增加';
Fb.OnClick:=b1;

Fc:=tmenuitem.Create(self);
Fc.Name :='c';
Fc.Caption:= '删除';
Fc.OnClick:=c1;

Fd:=tmenuitem.Create(self);
Fd.Name :='d';
Fd.Caption:= '上移';
Fd.OnClick:=d1;

Fe:=tmenuitem.Create(self);
Fe.Name :='e';
Fe.Caption:= '下移';
Fe.OnClick:=e1;

Ff:=tmenuitem.Create(self);
Ff.Name :='f';
Ff.Caption:= '清除';
Ff.OnClick:=f1;

Items.Add(Fa);
Items.Add(Fb);
Items.Add(Fc);
Items.Add(Fd);
Items.Add(Fe);
items.Add(Ff);
end;

procedure TgridMenu.a1(Sender: TObject);
begin
if assigned(FGridGsq) then FGridGsq.insert ;
if assigned(Fonjs) then Fonjs(self);
end;

procedure TgridMenu.b1(Sender: TObject);
begin
if assigned(FGridGsq) then FGridGsq.add ;
if assigned(Fonjs) then Fonjs(self);
end;

procedure TgridMenu.c1(Sender: TObject);
begin
if assigned(FGridGsq) then FGridGsq.del ;
if assigned(Fonjs) then Fonjs(self);
end;
procedure TgridMenu.d1(Sender: TObject);
begin
if assigned(FGridGsq) then FGridGsq.up ;
if assigned(Fonjs) then Fonjs(self);
end;

procedure TgridMenu.e1(Sender: TObject);
begin
if assigned(FGridGsq) then FGridGsq.down ;
if assigned(Fonjs) then Fonjs(self);
end;

procedure TgridMenu.f1(Sender: TObject);
begin
if assigned(FGridGsq) then FGridGsq.clearRow ;
if assigned(Fonjs) then Fonjs(self);
end;

procedure TgridMenu.SetGridGsq(const Value: TGridGsq);
begin
FGridGsq := Value;
end;

destructor TgridMenu.Destroy;
begin
inherited;
end;

end.
...全文
69 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2006-01-10
  • 打赏
  • 举报
回复
constructor TgridMenu.create(AOwner: TComponent);
begin
inherited;
autohotkeys:= maManual;
if csDesigning in ComponentState then Exit; //如果是设计期间则不处理
//...
end

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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