似乎有align一个非常好的属性,但是可以对齐元素,这样如果所有元素都小于容器的大小,那么面板上的所有元素都将对齐到彼此底部的所有元素?像顶部中心的东西.
像这样的东西:

或至少水平,垂直,他们可以100%.
使用Delphi 7.这是一个(不完整的)示例,演示了我的问题:
interface
uses Classes, Contnrs;
type
IEditorModule = interface;
procedure Method1;
procedure Method2;
end;
TEditorModuleList = class(TList)
protected
function GetItem(Index: Integer): IEditorModule;
procedure SetItem(Index: Integer; const Value: IEditorModule);
public
property Items[Index: Integer]: IEditorModule
read GetItem write SetItem; default;
end;
implementation
function TEditorModuleList.GetItem(Index: Integer): IEditorModule;
begin
Result := IEditorModule(inherited Items[index]);
end;
Run Code Online (Sandbox Code Playgroud)
无法编译,因为我收到此错误:
[错误] LEditorModule.pas(73):不兼容的类型:'IEditorModule'和'TObject'
声明新TList后代的主要原因是能够执行以下操作:
aModuleList[3].Method1;
Run Code Online (Sandbox Code Playgroud)
什么样的语法允许我将对象强制转换为接口(而不是具体的类)?事实:
我该怎么做呢?
我正在寻找一种方法在Delphi中获取最小的单浮点值和双浮点值,我可以添加或减去或添加到我的数字,以使浮点数比较的数字不同.或者,如果我可以获得比我的数字更小和更大的下一个浮点数.从浮点的角度来看,我想转换这个:
if (A >= B) or (C <= D) then
Run Code Online (Sandbox Code Playgroud)
至
if (A > newnumber1) or (C < newnumber2) then
Run Code Online (Sandbox Code Playgroud)
它们在浮点产生相同结果的地方.newnumber1和newnumber2显然是用于单和双打不同.我需要一些值,我可以从我的A中减去并添加到我的C值以获得newnumber1和newnumber2,或者我需要一种从B和D获取这些数字的方法.
在C++ 11中,有一个方法std::nextafter在这个问题中引用,看起来就足够了.
上下文
我正在做矢量操作,我需要做相当于大于或等于.实现此目的的最简单方法是采用稍微小一些的数字,并使用大于操作的数字.如果可能的话,我宁愿不要嘲笑似乎有效的价值.
我正在使用的向量操作是ippsThreshold_LTValGTVal_32s来自:
https://software.intel.com/en-us/node/502143
该库显然不支持> =操作.这在浮点意义上是不实际的.要创建一个等效函数,我需要增加和减少我的比较值来计算它,然后使用大于操作和小于操作.
例如
如果我有一个包含5个值的数组[99.4,20,19.9,99,80],ippsThreshold_LTValGTVal_32s向量操作将允许我用我自己的替换值替换向量中的特定值.在这个例子中,我想用0替换所有值> = 99和<= 20.要做到这一点,我想传递这样的东西.因此,我必须用略小的东西替换99,用稍微大一些的东西替换20.
函数签名如下所示:
ippsThreshold_LTValGTVal_32s(..., ..., ..., levelLT, valueLT, levelGT, valueGT);
Run Code Online (Sandbox Code Playgroud)
我的电话会是这样的:
ippsThreshold_LTValGTVal_32s(..., ..., ..., 20.00000001, 0, 98.99999, 0);
Run Code Online (Sandbox Code Playgroud)
然后,这将包括用于小于操作的20和用于大于操作的99,并且给出一个看起来像[0,0,0,0,80]的向量.
我需要找出20.0000001和98.999999的用途.我希望这些值之间的差异和原始值尽可能小,同时仍然足够重要,以包括>和<操作中的值.
有3个类(可能还有更多),它们具有相同的过程(程序Populate).它们几乎相同,只是通过对象创建而不同.我想要的只是在基类中编写一个通用过程,它将永远取代这个臭名昭着的代码重复.我不确定,如果我可以准确地表达我的意思,但请查看下面的代码并查看.
TGrandFather = class(TObject)
end;
TFather = class(TGrandFather)
end;
TSon = class(TFather)
end;
TGrandson.... and so on...
TGrandFathers = class (TList)
public
procedure Populate(Amount:Integer);
end;
TFathers = class (TGrandFathers)
public
procedure Populate(Amount:Integer);
end;
TSons = class (TFathers)
public
procedure Populate(Amount:Integer);
end;
TGrandsons....
...
procedure TGrandFathers.Populate(Amount:Integer);
var i:integer;
xGrandFather:TGrandFather;
begin
for i := 0 to Amount do
begin
xGrandFather:=TGrandFather.Create;
Add(xGrandFather);
end;
end;
procedure TFathers.Populate(Amount:Integer);
var i:integer;
xFather:TFather;
begin
for i := 0 to Amount do
begin
xFather:=TFather.Create; //this is the point, …Run Code Online (Sandbox Code Playgroud) 是否有任何编译器定义或函数/常量/变量可用于判断某些代码是为构建时间包构建还是从IDE内部执行?
我们在一个单元的初始化中设置了一些代码钩子,这是一个包的一部分.我们不希望在IDE中安装软件包时执行此代码,只有当它作为应用程序的一部分运行时才会执行.
现在我已经为设计时间包添加了一个编译器定义,它剥离了代码,但我想知道是否有一个内置的编译器定义,表明这是设计时包的一部分,或者是否有一些函数/常量可以检查代码是否在IDE中运行.类似于if csDesigning in ComponentState then人们从内部组件使用的旧版本.
我正在从D7迁移到XE2,并且IDE已经更改了一些DFM文件.
在某些文件中,更改只是一些简单的属性,如删除ItemHeight或添加ExplicitLeft = 0.
但是,在其他文件中,更改比删除整个object声明更大,我可以在将dfm文件与D7进行比较时检查.
当我在XE2中从D7添加DFM的缺失部分时,它会保存而不会出现错误:
未找到TGenReglas类.忽略错误并继续?
我已经检查过,TGenReglas在项目中,我甚至将其文件夹添加到项目路径中,以防万一.
保存并重新打开项目后,我的所有更改都不会保存.
我可以将DFM文件从D7复制到XE2中以解决这个问题或我应该怎么做?