C
cncharles
Unregistered / Unconfirmed
GUEST, unregistred user!
IActionMenu=interface
['{83C75241-9C05-4085-B778-3BDE2E126DC9}']
procedure AddMenu(const Dimensions:array of Byte; Action:TAction);
procedure DeleteMenu(const Dimensions:array of Byte);
function GetActionBarItem:TActionBarItem;
function GetParentActionItem(const Dimensions:array of Byte):TActionClientItem;
procedure InsertMenu(const Dimensions:array of Byte; Action:TAction);
procedure SetActionBarItem(AActionBarItem:TActionBarItem);
property ActionBarItem:TActionBarItem read GetActionBarItem write SetActionBarItem;
end;
TActionMenu=class(TComponent, IActionMenu)
private
FActionBarItem:TActionBarItem;
public
//IActionMenu
procedure AddMenu(const Dimensions:array of Byte; Action:TAction);
procedure DeleteMenu(const Dimensions:array of Byte);
function GetActionBarItem:TActionBarItem;
function GetParentActionItem(const Dimensions:array of Byte):TActionClientItem;
procedure InsertMenu(const Dimensions:array of Byte; Action:TAction);
procedure SetActionBarItem(AActionBarItem:TActionBarItem);
property ActionBarItem:TActionBarItem read GetActionBarItem write SetActionBarItem;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
end;
谢cybercake, 我本来用的就是接口.
TActionMenu=class(TComponent, IActionMenu)
private
FActionBarItem:TActionBarItem;
public
//IActionMenu
procedure AddMenu(const Dimensions:array of Byte; Action:TAction);
procedure DeleteMenu(const Dimensions:array of Byte);
function GetActionBarItem:TActionBarItem;
function GetParentActionItem(const Dimensions:array of Byte):TActionClientItem;
procedure InsertMenu(const Dimensions:array of Byte; Action:TAction);
procedure SetActionBarItem(AActionBarItem:TActionBarItem);
property ActionBarItem:TActionBarItem read GetActionBarItem write SetActionBarItem;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
end;
//GetParentActionItem不会出错, 可以正确的回转结果.
function TActionMenu.GetParentActionItem(
const Dimensions: array of Byte): TActionClientItem;
var
I:integer;
Msg:string;
ActionItem:TActionClientItem;
ActionClients:TActionClients;
begin
Result:=nil;
ActionItem:=nil;
Msg:='对不起你的第%d维值%d超标.';
ActionClients:=FActionBarItem.Items;
for I := 0 to High(Dimensions) - 1 do begin
if Dimensions>ActionClients.Count then begin
Msg:=Format(Msg, [I, Dimensions]);
ShowMessage(Msg);
Exit;
end else begin
ActionItem:=TActionClientItem(ActionClients.Items[Dimensions]);
ActionClients:=ActionItem.ActionClients;
end;
end;
Result:=ActionItem;
end;
procedure TActionMenu.AddMenu(const Dimensions: array of Byte; Action: TAction);
var
ActionItem:TActionClientItem;
begin
ActionItem:=GetParentActionItem(Dimensions);
if ActionItem=nil then
Exit;
ActionItem:=ActionItem.Items.Add; //这里就出错. 类型不一致, 也就是说只要用到了
//ActionClientItem.Items属性都会出错, 但是奇怪能实现我的功能,但总提示错误不好.
ActionItem.Action:=Action;
end;
如果用了runtime package与exe一起发布了相关的bpl在其它的电脑上面
没有效果真是搞不明白其中的原因.
使用了FastMM, ShareMM都不行.
群号:16497064欢迎高手交流.
['{83C75241-9C05-4085-B778-3BDE2E126DC9}']
procedure AddMenu(const Dimensions:array of Byte; Action:TAction);
procedure DeleteMenu(const Dimensions:array of Byte);
function GetActionBarItem:TActionBarItem;
function GetParentActionItem(const Dimensions:array of Byte):TActionClientItem;
procedure InsertMenu(const Dimensions:array of Byte; Action:TAction);
procedure SetActionBarItem(AActionBarItem:TActionBarItem);
property ActionBarItem:TActionBarItem read GetActionBarItem write SetActionBarItem;
end;
TActionMenu=class(TComponent, IActionMenu)
private
FActionBarItem:TActionBarItem;
public
//IActionMenu
procedure AddMenu(const Dimensions:array of Byte; Action:TAction);
procedure DeleteMenu(const Dimensions:array of Byte);
function GetActionBarItem:TActionBarItem;
function GetParentActionItem(const Dimensions:array of Byte):TActionClientItem;
procedure InsertMenu(const Dimensions:array of Byte; Action:TAction);
procedure SetActionBarItem(AActionBarItem:TActionBarItem);
property ActionBarItem:TActionBarItem read GetActionBarItem write SetActionBarItem;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
end;
谢cybercake, 我本来用的就是接口.
TActionMenu=class(TComponent, IActionMenu)
private
FActionBarItem:TActionBarItem;
public
//IActionMenu
procedure AddMenu(const Dimensions:array of Byte; Action:TAction);
procedure DeleteMenu(const Dimensions:array of Byte);
function GetActionBarItem:TActionBarItem;
function GetParentActionItem(const Dimensions:array of Byte):TActionClientItem;
procedure InsertMenu(const Dimensions:array of Byte; Action:TAction);
procedure SetActionBarItem(AActionBarItem:TActionBarItem);
property ActionBarItem:TActionBarItem read GetActionBarItem write SetActionBarItem;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
end;
//GetParentActionItem不会出错, 可以正确的回转结果.
function TActionMenu.GetParentActionItem(
const Dimensions: array of Byte): TActionClientItem;
var
I:integer;
Msg:string;
ActionItem:TActionClientItem;
ActionClients:TActionClients;
begin
Result:=nil;
ActionItem:=nil;
Msg:='对不起你的第%d维值%d超标.';
ActionClients:=FActionBarItem.Items;
for I := 0 to High(Dimensions) - 1 do begin
if Dimensions>ActionClients.Count then begin
Msg:=Format(Msg, [I, Dimensions]);
ShowMessage(Msg);
Exit;
end else begin
ActionItem:=TActionClientItem(ActionClients.Items[Dimensions]);
ActionClients:=ActionItem.ActionClients;
end;
end;
Result:=ActionItem;
end;
procedure TActionMenu.AddMenu(const Dimensions: array of Byte; Action: TAction);
var
ActionItem:TActionClientItem;
begin
ActionItem:=GetParentActionItem(Dimensions);
if ActionItem=nil then
Exit;
ActionItem:=ActionItem.Items.Add; //这里就出错. 类型不一致, 也就是说只要用到了
//ActionClientItem.Items属性都会出错, 但是奇怪能实现我的功能,但总提示错误不好.
ActionItem.Action:=Action;
end;
如果用了runtime package与exe一起发布了相关的bpl在其它的电脑上面
没有效果真是搞不明白其中的原因.
使用了FastMM, ShareMM都不行.
群号:16497064欢迎高手交流.