此刻我与帕斯卡(使用拉撒路)挣扎....
我正在尝试设置一个基于const记录来填充组合框的系统。这些是指向字符串数组的指针。我的想法是,在运行时我可以通过选择不同的记录来修改UI。
我的问题是,如果我在记录定义中定义字符串数组的大小,这一切都有效。但我不想这样做,因为它会有所不同。我试图使用动态数组,但有例外。
我会感激地收到关于我做错事的指针(!);)
希望这段代码片段能更好地解释我在做什么.....
type
// definition of the record used for setting the combo box
TComboItemsTextArray = array[0..10] of string[25]; // this works but I don't want to define the arrray size here.....
// TComboItemsTextArray = array of string; // this alternative gives an exception.
TQDef = record
......
Min : Integer;
Max : Integer;
ComboItemTextArray : ^TComboItemsTextArray;
........
end;
const
// example text array for a specific combo setup
Names : array[1..5] of string[25] =
(
'Name 1',
'Name 2',
'Name 3',
'Name 4',
'Name 5'
);
// specific combo box setup record
QDef1 : TQDef =
(
......
Min:1;
Max:5;
ComboItemTextArray:@Names;
.....
);
var
Q : TQDef;
I : Integer;
...
begin
// set the question to be used
Q := Qdef1;
// use array to setup combo box
for I := Q.Min to Q.Max do
QCombo.Items.Add(Q.ComboItemTextArray^[I]);
end;
答案 0 :(得分:0)
在FPC和D2009 +中,指向X的指针可以作为数组过度索引。但是这些黑客并不是非常好。
从各种未链接的阵列创建数据结构运行时是最简单的选择。更先进的是进入资源的方向。
答案 1 :(得分:0)
你的问题并没有说明这一点,但我忘了你试图动态定义数组的大小。这可以这样做:
type
// definition of the record used for setting the combo box
TComboItemsTextArray = array[0..10] of string[25]; // this works but I don't want to define the arrray size here.....
// TComboItemsTextArray = array of string; // this alternative gives an exception.
TQDef = record
......
Min : Integer;
Max : Integer;
ComboItemTextArray : ^TComboItemsTextArray;
........
end;
...
var
Q : TQDef;
length : integer;
length := 20; // Arbitrary length...
SetLength(Q.ComboItemTextArray, length)