首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理在运行时与设计时创建的子组件和属性?

如何处理在运行时与设计时创建的子组件和属性?
EN

Stack Overflow用户
提问于 2012-01-20 07:40:49
回答 3查看 1.3K关注 0票数 3

我不能意识到这件事.我在Delphi语言中有一个组件,它包括另外两个组件:一个火猴布局和一个包含TRectangle的TLayout动态数组。这是通过属性BarNumber实现的。

我有很多关于设计时和运行时行为的问题,这是由于DFM (火猴中的FMX)将子组件存储为对象的一部分。现在。这是创建时部分的代码。

代码语言:javascript
复制
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加载了这些值。我设法解决了这个问题

代码语言:javascript
复制
   if not (csDesigning in ComponentState) then

就在for循环之前。但很明显,我看不到处于设计模式的栏。好吧,如果这是唯一的解决方案,我可以忍受。这还没结束..!出于一个奇怪的原因,我唯一可以设置宽度、高度和BarNumber值的地方就是代码的这一部分。如果我在对象检查器中设置它们,它们将不会被考虑,并在我运行程序时重置为默认值。(BarNumber是一个在FBarNumber上读写的变量)

简而言之:我不知道如何处理和管理我的组件,使BarNumber和其他属性在设计时设置,并在运行时查看正确的条数。非常感谢。

EN

Stack Overflow用户

发布于 2012-01-20 16:30:48

您必须确保在运行时从0列开始。只需添加如下内容:

代码语言:javascript
复制
for [i] = pred(length(column)) downto 0 do
begin
  column[i].free
end;

在你开始制作专栏之前。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8934995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档