我不能意识到这件事.我在Delphi语言中有一个组件,它包括另外两个组件:一个火猴布局和一个包含TRectangle的TLayout动态数组。这是通过属性BarNumber实现的。
我有很多关于设计时和运行时行为的问题,这是由于DFM (火猴中的FMX)将子组件存储为对象的一部分。现在。这是创建时部分的代码。
constructor TFluffyTable.Create(Owner: TComponent);
var
i: integer;
begin
inherited Create(Owner);
Width:=300;
Height:= 160;
BarNumber:=100;
SetLength(Column, FBarNumber);
for i := 0 to (FBarNumber-1) do
begin
Column[i]:= TColumn.Create(Self);
Column[i].Name:= 'Column_' + IntToStr(i);
Column[i].Parent:= Self;
Column[i].Height:=Height;
Column[i].Width:=Width/FBarNumber;
Column[i].Align:= TAlignLayout.alMostLeft;
end;
end;如果我注册组件并在设计时使用它,我会得到正确的条数显示。但是如果我用这个组件运行程序,我会得到两倍的条数,因为EXE加载了这些值。我设法解决了这个问题
if not (csDesigning in ComponentState) then就在for循环之前。但很明显,我看不到处于设计模式的栏。好吧,如果这是唯一的解决方案,我可以忍受。这还没结束..!出于一个奇怪的原因,我唯一可以设置宽度、高度和BarNumber值的地方就是代码的这一部分。如果我在对象检查器中设置它们,它们将不会被考虑,并在我运行程序时重置为默认值。(BarNumber是一个在FBarNumber上读写的变量)
简而言之:我不知道如何处理和管理我的组件,使BarNumber和其他属性在设计时设置,并在运行时查看正确的条数。非常感谢。
发布于 2012-01-20 16:30:48
您必须确保在运行时从0列开始。只需添加如下内容:
for [i] = pred(length(column)) downto 0 do
begin
column[i].free
end;在你开始制作专栏之前。
https://stackoverflow.com/questions/8934995
复制相似问题