我在Delphi 10中有一个三角形网格结构.
出于性能原因,我将网格顶点,三角形面等的数据存储在TList的后代中.
我让TLists为列表的每个成员进行计算.对于这些计算,我需要访问TMesh结构的某些字段.因此,在创建TMesh并随后创建列表期间,我将父TMesh分配给列表.我使用TMesh的前向声明来做到这一点.请参阅以下代码:
type
{forward declaration}
TMesh=class;
TVertex=record
Point: TPoint3D;
//other fields
end;
TVertices=class(TList<TVertex>)
Mesh: TMesh;
procedure DoSomethingWithAllVertices; //uses some fields of TMesh
constructor Create(const AMesh: TMesh);
//other methods
end;
TTriangleFace=record
Vertices: Array[0..2] of Integer;
//other fields
end;
TTriangleFaces=class(TList<TTriangleFace>)
Mesh: TMesh;
procedure DoSomethingWithAllTriangleFaces; //uses some fields of TMesh
constructor Create(const AMesh: TMesh);
//other methods
end;
TMesh=class(TComponent)
Vertices: TVertices;
TriangleFaces: TTriangleFaces;
constructor Create(AOwner: TComponent);
//other fields & methods
end;
implementation
constructor TMesh.Create(AOwner: TComponent);
begin
inherited;
Vertices:=TVertices.Create(Self);
TriangleFaces:=TTriangleFaces.Create(Self);
end;
constructor TVertices.Create(const …Run Code Online (Sandbox Code Playgroud) 我有一个带有内部受保护类的基本泛型类.如何从基类继承并访问受保护的内部类?
作为示例,此代码将无法编译:
unit uFoo;
interface
type
TFoo<T> = class
protected
type
TFooProtected = class
end;
end;
TFoo2<T> = class(TFoo<T>)
protected
item: TFooProtected;
end;
Run Code Online (Sandbox Code Playgroud) 我正在为项目安装一些自定义组件.
我多年前写过这些,所以事情变得有点模糊.
我收到很多警告:
[dcc32警告] Life32v2.dpk(53):W1033单位'DDUtils'隐式导入包'Life32v2'
然而,当我在做文件查找ctrlshiftF的DDUtils是无处项目(组)被发现.
显然,DDUtils使用由一个单元是明确我的部件或连接的一个进口甚至比这更间接.
双击错误只会将我带到dpk文件,这是无用的.
有没有办法查看单位导入的路线?
我遇到了一个问题,我通常无法改变其属性的背景颜色(例如clwhite).我在Delphi方面不是很有经验,我找到了两种可能的解决方案,但我仍然想知道,如何正确地改变它或为什么它不可能.TToolBarToolBar.Color
1)将样式更改为渐变,但它也会更改按钮的基本动画.
ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite
Run Code Online (Sandbox Code Playgroud)
2)将TToolBar内TPanel使用以下设置.
Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
Run Code Online (Sandbox Code Playgroud) 我不明白为什么这段代码中的 CALL 函数不起作用:
#include<stdio.h>
void main() {
__asm {
jmp L1
L2:
mov eax, 8
ret
L1:
call L2
}
}
Run Code Online (Sandbox Code Playgroud)
如果我一步一步调试代码,'call L1'行没有被处理,程序直接跳到最后。怎么了?我正在使用 Intel 32 位寄存器开发 VisualStudio2015。
我有一个基于控制台的 DUNITX 单元测试程序,我正在尝试将其转换为 FMX GUI 输出。在这里阅读了 embarcadero 文档后,我通过执行以下操作修改了测试程序文件:
修改后的列表如下所示:
program HTMLParserTest;
{$IFNDEF TESTINSIGHT}
//{$APPTYPE CONSOLE}
{$ENDIF}{$STRONGLINKTYPES ON}
uses
System.SysUtils,
{$IFDEF TESTINSIGHT}
TestInsight.DUnitX,
{$ENDIF }
// DUnitX.Loggers.Console,
DUnitX.Loggers.GUIX,
DUnitX.Loggers.Xml.NUnit,
DUnitX.TestFramework,
test.ITUtils.Delphi in 'test.ITUtils.Delphi.pas',
ITUtils.Delphi in '..\Concept Test\ITUtils.Delphi.pas',
test.ITsimplehtmlparser.Delphi in 'test.ITsimplehtmlparser.Delphi.pas',
ITTools.simplehtmlparser.Delphi in '..\Concept
Test\ITTools.simplehtmlparser.Delphi.pas';
var
runner : ITestRunner;
results : IRunResults;
logger : ITestLogger;
nunitLogger : ITestLogger;
begin
{$IFDEF TESTINSIGHT}
TestInsight.DUnitX.RunRegisteredTests;
exit;
{$ENDIF} …Run Code Online (Sandbox Code Playgroud) 我有一个以下摘要片段.
/// <summary>
/// Holds the future state for 4 pixels
/// Every pixel can be in 4 states, on, off, unknown, or don't care
/// Off=00, on=01, unknown = 10, don't care = 11.
/// The grid is like this:
/// <code>
/// TL|TR <br/>
/// ---+--- <br/>
/// BL|BR <br/>
/// </code>
/// </summary>
Run Code Online (Sandbox Code Playgroud)
这在弹出提示中显示为:
保持4像素的未来状态每个像素可以处于4种状态,
开,关,未知,或者不关心关= 00,开= 01,未知= 10,
不关心= 11.网格是这样的:TL|TR ---+--- BL|BR
中间的ascii艺术以等宽字体正确显示,但没有换行符.
如何正确显示换行符
我希望能够在Delphi中使用以下构造,以便在c ++中工作
首先是Delphi代码:
type
TSlice = record
private
function GetData4: UINT32; inline;
procedure SetData4(Index: 0..15; Value: UINT32); inline;
public
Data8: array[0..7] of UINT64;
property Data4[index: 0..15]: UINT32 read GetData4 write SetData4;
end;
Run Code Online (Sandbox Code Playgroud)
现在我拥有并运行的c ++代码:
struct TSlice {
UINT64 Data8[8];
__device__ __forceinline__ UINT32 * Data4() { return reinterpret_cast<UINT32*>(Data8); }
}
Run Code Online (Sandbox Code Playgroud)
但是,我还是要写
for (auto i = 0; i < 3; i++) {
Slice->Data4()[lane * 4] = SliverPart;
Slice->Data4()[lane * 4 + 1] = SliverPart;
}
Run Code Online (Sandbox Code Playgroud)
我真的想放弃()这里:Slice->Data2[lane * 4]
声明 …
在大多数现代IDE中,您可以设置一个参数,以确保javac获得足够的堆内存来进行编译.由于不值得进入的原因,我们暂时与JBuilder 2005/2006并列,看起来源代码的数量超过了javac可以处理的数量.
请保留JBuilder 2005/2006 javac的具体答案(我们现在无法迁移,Borland Make编译器不能正确支持Java 1.6)
我知道如何和什么参数应该传递给javac的,问题是IDE似乎并没有让这些在任何地方设置.很多配置都隐藏在Jbuilder Install\bin*.config文件中,我觉得答案可能在某处,但还没有找到.
有谁知道是否可以在自己的表单中嵌入文件打开对话框?
我们有一个选项卡式对话框,在其中一个选项卡上,我们希望用户能够浏览具有与标准打开对话框相同功能的文件,例如'查找'组合框,放置栏,shell文件列表,文件名组合名称完成等
我已经看过用一些第三方组件重新创建对话框,即Jam Shell Browser Components
我可以通过这种方式获得大部分功能,但我遗漏了一些东西,比如地方栏和文件名自动完成\建议
delphi ×8
assembly ×1
c++ ×1
call ×1
debugging ×1
delphi-7 ×1
dunitx ×1
heap-memory ×1
inheritance ×1
javac ×1
jbuilder ×1
opendialog ×1
packages ×1
properties ×1
protected ×1
topendialog ×1
unit-testing ×1