delphi怎样调用其他类文件里面的方法

xlxix 2018-06-19 04:07:42
现在要做一个功能,双击明细行的时候,自动跳转到该明细对应的单据,这时候就需要调用另外一个类文件的方法,但是不知道为什么调用不到,是不是还有什么控制。
下面是同一个类文件里面的两个方法,一个是本来就有的,一个是自己仿照写的。
这个是本来就有的:
procedure rzcp_ckbhExecute(Sender: TObject);
procedure TDmAction.rzcp_ckbhExecute(Sender: TObject);
begin
DmForm.GetOperRight(Dm.cUser_ID, 'rzcp_ckbh');
if not Dm.bQuery then exit;
DmForm.callForm('RZKC', 'Fmrzcp_ckbh');
end;

这个是我自己写的

procedure xshs_mjfyExecute(Sender: TObject);
procedure TDmAction.xshs_mjfyExecute(Sender: TObject);
begin
DmForm.GetOperRight(Dm.cUser_Id, 'xshs_mjfy');
if not Dm.bQuery then exit;
DmForm.callForm('XSHS', 'Fmxshs_mjfy');
end;

这里已经把类文件uDmAction加上了
implementation
uses uDm,uDmHs,UDmHsList,uDmAction,uCommonUnit,uFmRepview;

这样写,调用原来就有的方法是没有问题的
DmAction.rzcp_ckbhExecute(Sender);

但是如果调用我自己的方法
DmAction.xshs_mjfyExecute(Sender);
在编译的时候就会报错,【错误】uFmxshs_mjmx.pas(97):Undeclared identifier:‘xshs_mjfyExecute’.
...全文
877 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
声明要写在接口部分,实现写在实现部分:
unit uDmAction;
interface
uses
SysUtils, Windows, Messages, Classes, ADODB, ActnList, uCommonUnit, Forms,
shellapi, Dialogs;

type
TDmAction = class(TDataModule)
ActionList1: TActionList;
rzcp_ckbh: TAction;
xshs_mjfy: TAction;
public
procedure rzcp_ckbhExecute(Sender: TObject);
procedure xshs_mjfyExecute(Sender: TObject);
// ...
end;

implementation

procedure TDmAction.xshs_mjfyExecute(Sender: TObject);
begin
// ...
end;

end.
xlxix 2018-06-21
  • 打赏
  • 举报
回复
引用 6 楼 hongss 的回复:
把类文件uDmAction加到前边

interface
uses
SysUtils, Windows, Messages, Classes, ADODB, ActnList, uCommonUnit, Forms,
shellapi, Dialogs, uDmAction;


放到前面的也是不行
unit uFmxshs_mjmx;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UFMBASE_LIST, PropFilerEh, PropStorageEh, Menus, uFrmDBGrid,
uFrmleft, uFrmBtnList, StdCtrls, ExtCtrls, Buttons, ComCtrls,ADODB,DB,
DBGridEh, DBCtrls, Mask, DBCtrlsEh, DBLookupEh,uDmAction;
xlxix 2018-06-21
  • 打赏
  • 举报
回复
引用 5 楼 DelphiGuy 的回复:
对。
type
TDmAction = class(TDataModule)
ActionList1: TActionList;
rzcp_ckbh: TAction;
xshs_mjfy: TAction;
public
procedure rzcp_ckbhExecute(Sender: TObject);
procedure xshs_mjfyExecute(Sender: TObject);
//...
end;


已经移到public里面去了但是还是不行
  public
{ Public declarations }
procedure xshs_mjfyExecute(Sender: TObject);
xlxix 2018-06-21
  • 打赏
  • 举报
回复
引用 5 楼 DelphiGuy 的回复:
对。
type
TDmAction = class(TDataModule)
ActionList1: TActionList;
rzcp_ckbh: TAction;
xshs_mjfy: TAction;
public
procedure rzcp_ckbhExecute(Sender: TObject);
procedure xshs_mjfyExecute(Sender: TObject);
//...
end;


但是为什么两个方法放的位置是一样的,但是上面那个可以调用,而下面那个却不行呢
hongss 2018-06-20
  • 打赏
  • 举报
回复
把类文件uDmAction加到前边
interface
uses
  SysUtils, Windows, Messages, Classes, ADODB, ActnList, uCommonUnit, Forms,
  shellapi, Dialogs, uDmAction;
  • 打赏
  • 举报
回复
对。 type TDmAction = class(TDataModule) ActionList1: TActionList; rzcp_ckbh: TAction; xshs_mjfy: TAction; public procedure rzcp_ckbhExecute(Sender: TObject); procedure xshs_mjfyExecute(Sender: TObject); //... end;
hj8090 2018-06-20
  • 打赏
  • 举报
回复
放在Public中
xlxix 2018-06-20
  • 打赏
  • 举报
回复
没人回答
xlxix 2018-06-19
  • 打赏
  • 举报
回复
引用 1 楼 DelphiGuy 的回复:
procedure xshs_mjfyExecute(Sender: TObject); 这要写在单元的interface部分
现在是这样写的
unit uDmAction;
interface
uses
  SysUtils, Windows, Messages, Classes, ADODB, ActnList, uCommonUnit, Forms,
  shellapi, Dialogs;

type
  TDmAction = class(TDataModule)
    ActionList1: TActionList;
    rzcp_ckbh: TAction;
    xshs_mjfy: TAction;
    procedure rzcp_ckbhExecute(Sender: TObject);
    procedure xshs_mjfyExecute(Sender: TObject);
  • 打赏
  • 举报
回复
procedure xshs_mjfyExecute(Sender: TObject); 这要写在单元的interface部分

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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