记录数组中的默认布尔值 - Delphi

时间:2010-06-03 10:13:08

标签: delphi arrays boolean delphi-7

我正在使用一些旧的delphi 7代码帮助我的公司。

在开始时声明了一条记录,用于存储我们想要输出的所有数据。

  

键入
         TOutput_Type =记录
          结果:字符串;
      resultoffset:String;
      选中:布尔值;
      resultcategory:整数;
     结束;

然后声明一个数组

  

输出:TOutput_Type数组;

长度在开始时设置为较大的值,因为实际长度未知 此数组在整个地方使用,但不幸的是,使用时并不总是设置所选的值 我的问题是我在添加数据摘要,但由于未设置选中,delphi似乎给它一个随机的真或假状态。
有没有办法在开始时将所有选中的实例设置为true?看起来像一个简单的事情,但我不是德尔福程序员所以不确定它是否可能?我知道我可以通过并在每次创建新记录时添加选择:= true,但如果可能的话,我想在开始时干净利落地进行....
提前致谢

3 个答案:

答案 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循环......