我正在使用一些旧的delphi 7代码帮助我的公司。
在开始时声明了一条记录,用于存储我们想要输出的所有数据。
键入
TOutput_Type =记录
结果:字符串;
resultoffset:String;
选中:布尔值;
resultcategory:整数;
结束;
然后声明一个数组
输出:TOutput_Type数组;
长度在开始时设置为较大的值,因为实际长度未知
此数组在整个地方使用,但不幸的是,使用时并不总是设置所选的值
我的问题是我在添加数据摘要,但由于未设置选中,delphi似乎给它一个随机的真或假状态。
有没有办法在开始时将所有选中的实例设置为true?看起来像一个简单的事情,但我不是德尔福程序员所以不确定它是否可能?我知道我可以通过并在每次创建新记录时添加选择:= true,但如果可能的话,我想在开始时干净利落地进行....
提前致谢
答案 0 :(得分:5)
在调用SetLengt for Output变量之后,必须首先在for循环中启动新记录部分(因为未定义新的已分配内存)。 类似的东西:
OldLength := Length(Output);
SetLength(Output, NewLength);
for n := OldLength to NewLength -1 do
Output[n].selected := True;
答案 1 :(得分:3)
与对象不同,记录在创建时未初始化,因此您需要自己初始化它们。由于你使用的是Delphi 7,你不能使用带方法的记录,所以我要做的就是创建一个初始化函数,如下所示:
type
TOutputArray: array of TOutput_Type;
function CreateOutputArray(length: integer): TOutputArray;
var
i: integer;
begin
SetLength(result, MyArbitraryItemCount);
FillChar(result[0], Length(Output)*SizeOf(TOutput_Type), 0);
for i := 0 to high(result) do
result[i].selected := true;
end;
答案 2 :(得分:-2)
我会选择像dcp链接到的问题中的工厂方法。无参数构造函数不允许用于记录,因此您总是必须指定一些参数,如果您不真正需要它们可能会很烦人。
如果这是关于在开始时初始化大型数组的内容的一切,您也可以使用它:
SetLength(Output, MyArbitraryItemCount);
FillChar(Output[0], Length(Output)*SizeOf(TOutput_Type), 1);
然后一切都是1.包括selected
:)当然你也可以使用for循环......