Delphi 7中如何使用含Procedure的Record?代码报错排查
在Delphi 7中使用带Procedure的Record的问题与解决方法
你遇到的问题核心很明确:Delphi 7并不支持在Record(记录类型)内部定义方法(比如Procedure)。这个特性是从Delphi 2006版本开始才被引入的,叫做「Advanced Record(高级记录)」,而Delphi 7的编译器完全不认识这种语法,所以才会抛出那些看似奇怪的语法错误。
那在Delphi 7里怎么实现类似的功能呢?有两种常用的方案:
方案一:使用独立的普通过程操作Record
把原本想写在Record里的Procedure改成独立的全局过程,通过var参数来修改Record的内容,这样就能实现清空记录的功能:
unit unTEFTipos; interface type TTEFPagamento = record AcrescimoDesconto: Double; TrocoSaque: Double; end; // 定义独立的清空过程,用var参数传递记录以修改其内容 procedure ClearTEFPagamento(var Pagamento: TTEFPagamento); implementation procedure ClearTEFPagamento(var Pagamento: TTEFPagamento); begin Pagamento.AcrescimoDesconto := 0; Pagamento.TrocoSaque := 0; end; end.
调用的时候只需要传入你的Record变量即可:
var MyPagamento: TTEFPagamento; begin ClearTEFPagamento(MyPagamento); end;
方案二:改用Class(类)代替Record
如果你更习惯「对象.方法」的调用方式,完全可以把Record改成Class,Delphi 7对类的方法支持非常完善,写法和你原本的代码几乎一致:
unit unTEFTipos; interface type TTEFPagamento = class public AcrescimoDesconto: Double; TrocoSaque: Double; procedure Clear; end; implementation procedure TTEFPagamento.Clear; begin AcrescimoDesconto := 0; TrocoSaque := 0; end; end.
注意类需要手动创建和释放实例:
var MyPagamento: TTEFPagamento; begin MyPagamento := TTEFPagamento.Create; try MyPagamento.Clear; // 其他操作... finally MyPagamento.Free; end; end;
简单总结下:如果必须使用Record类型,方案一最适合;如果可以接受类的实例化逻辑,方案二的写法更贴近你最初的需求。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

