设计期的右键菜单在哪,
如pagecontrol的 new page
menu的 menu designer
在设计期时我们右键就能出这些菜单,它们都存在哪了呢,好象注册表中没有。
自定义控件想加设计期的右键菜单,写在哪呀。
如pagecontrol的 new page
menu的 menu designer
在设计期时我们右键就能出这些菜单,它们都存在哪了呢,好象注册表中没有。
自定义控件想加设计期的右键菜单,写在哪呀。
解决方案 »
- 在delphi客户端如何可以不下载服务器中视频能在线播放?
- Dataset.UpdateBatch 问题
- WSDL Import 的时候找不到指定模块
- SHFileOperation 能不能做到当有相同文件或文件夹时,给出提示,是否覆盖?
- 求教:如何将大段文本插入数据库(不使用insert语句)
- 如何更改应用程序的窗口标题?
- 能告诉我delphi制作、注册、发布Activex控件的详细步骤吗?
- =====================免费的,你要吗?=====================
- delphi如何调用C# dll?
- delphi存储过程控件如何调用oracle的存储过程返回结果集?
- 在线求一 delphi 写的登录窗体
- 关于RichEdit中如何提取部分带有格式的文本内容?
然后:
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
procedure ExecuteVerb(Index: Integer); override;override上面三个函数.GerVerbCount里面就加一句:
Result := 2; //返回自己增加的菜单的个数GetVerb: //根据index参数返回菜单项的caption
case index of
0: Result := 'New Page';
1: Result := 'Next Page';
//...........
end;ExecuteVerb: //根据index参数,填写点击菜单的响应过程.--------------------------------------------------------
这个TComponentEditor类里面,有个属性:Component,它表示你右键菜单点的控件.当前你的例子里面是TPageControl.还有个Designer属性,是个接口.
你可以调用里面的方法:
Designer.Modified;
这个方法很重要,当你完成了下面的代码后:
ATabSheet := CreateYourTabSheet;
TPageControl(Component).Pages.Add(ATabSheet); //不知道是不是叫这个Pages名字,我随便写的.
也就是说,动态创建一个tabsheet,然后加到pagecontrol的列表里面后.你还得调用:Designer.Modified;调用Designer.Modified;的过程,就是:
1.在设计时,pagecontrol所在的form的dfm文件里面,加上你这个刚加进去的tabsheet.
2.在pas文件里面,form的定义TYourForm = class(TForm)后面,private 前面,增加新的tabsheet的定义行.
注册的时候,register过程:
procedure Register;
begin
RegisterComponentEditor(TYourPageControl, TYourPageControlEditor);
RegisterComponents('ActiveX', [TYourPageControl]);
end;TYourPageControlEditor 就是你从TComponentEditor所派生出来的类的名字.
type
TControlEditor = class(TComponentEditor)
public
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
procedure ExecuteVerb(Index: Integer); override;
end;
function TControlEditor.GetVerb(Index: Integer): string;
Begin
Result := '&Edit Items...';
End;
function TControlEditor.GetVerbCount: Integer;
Begin
Result := 1;
End;
procedure TControlEditor.ExecuteVerb(Index: Integer);
var
Dlg: TEditorForm; //跟一般的form一样,用来点设计时右键时,弹出的窗口,编辑属性.
Begin
Dlg:= TEditorForm.Create(Application);
Try
Dlg.ShowModal;
if Dlg.ModalResult = mrOK then
begin
if Dlg.Modified then
begin
CopyProperty(Dlg, Component); // 将修改过的属性赋值到控件中
Designer.Modified;
end;
end;
finally
Dlg.Free;
End;
End;
[Error] MyComCtrls.pas(22836): Undeclared identifier: 'RegisterComponentEditor'
DesignIntf;你的register过程,和你的TMyPageControlEditor这个类的定义及实现,最好单独的放在一个unit里面.
不要和TMyPageControl放在一个单元.因为register过程和TComponentEditor 需要uses DesignEditors, DesignIntf
如果你将他们放在TMyPageControl的那个单元,到时候,会出现什么pixos.dcu(大概是这个名字,记不清了)之类的单元,找不到的问题.
我把 DsgnIntf.dcu copy到lib了的。
FNewDockSheet.caption := IntToStr(TMyPageControl(Component).PageCount);
FNewDockSheet.PageControl:=TMyPageControl(Component);
没达到这个目的,
调用Designer.Modified;的过程,就是:
1.在设计时,pagecontrol所在的form的dfm文件里面,加上你这个刚加进去的tabsheet.
2.在pas文件里面,form的定义TYourForm = class(TForm)后面,private 前面,增加新的tabsheet的定义行.