小编Joh*_*ica的帖子

德尔福:更好的设计避免循环单位参考?

我在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)

delphi circular-reference

3
推荐指数
2
解决办法
582
查看次数

如何从具有受保护数据类型的类继承?

我有一个带有内部受保护类的基本泛型类.如何从基类继承并访问受保护的内部类?

作为示例,此代码将无法编译:

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)

delphi inheritance protected

3
推荐指数
1
解决办法
105
查看次数

哪个声明导致单元被隐式导入?

我正在为项目安装一些自定义组件.
我多年前写过这些,所以事情变得有点模糊.

我收到很多警告:

[dcc32警告] Life32v2.dpk(53):W1033单位'DDUtils'隐式导入包'Life32v2'

然而,当我在做文件查找ctrlshiftFDDUtils是无处项目(组)被发现.
显然,DDUtils使用由一个单元明确我的部件或连接的一个进口甚至比这更间接.

双击错误只会将我带到dpk文件,这是无用的.

有没有办法查看单位导入的路线?

delphi packages

3
推荐指数
1
解决办法
198
查看次数

更改TToolBar背景颜色

我遇到了一个问题,我通常无法改变其属性的背景颜色(例如clwhite).我在Delphi方面不是很有经验,我找到了两种可能的解决方案,但我仍然想知道,如何正确地改变它或为什么它不可能.TToolBarToolBar.Color

1)将样式更改为渐变,但它也会更改按钮的基本动画.

ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite
Run Code Online (Sandbox Code Playgroud)

2)将TToolBarTPanel使用以下设置.

Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
Run Code Online (Sandbox Code Playgroud)

delphi common-controls

3
推荐指数
1
解决办法
2086
查看次数

汇编 - 为什么这个 CALL 函数不起作用?

我不明白为什么这段代码中的 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。

debugging assembly call

3
推荐指数
1
解决办法
1629
查看次数

Delphi DunitX FMX GUI 记录器

我有一个基于控制台的 DUNITX 单元测试程序,我正在尝试将其转换为 FMX GUI 输出。在这里阅读了 embarcadero 文档后,我通过执行以下操作修改了测试程序文件:

  1. 包括 DUnitX.Loggers.GUIX 单元
  2. 注释掉 DUnitX.Loggers.Console 单元
  3. 注释掉 {$APPTYPE CONSOLE} 指令
  4. 将 Logger 更改为 logger := TGUIXTestRunner.Create(nil);

修改后的列表如下所示:

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)

delphi unit-testing dunitx

3
推荐指数
1
解决办法
1459
查看次数

如何在xmldoc注释中添加换行符

我有一个以下摘要片段.

  /// <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 xml-documentation

3
推荐指数
1
解决办法
325
查看次数

如何在c ++中复制Delphi的索引属性?

我希望能够在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]

声明 …

c++ delphi properties

3
推荐指数
1
解决办法
94
查看次数

如何在Borland JBuilder 2005/2006中增加javac进程的最大堆大小

在大多数现代IDE中,您可以设置一个参数,以确保javac获得足够的堆内存来进行编译.由于不值得进入的原因,我们暂时与JBuilder 2005/2006并列,看起来源代码的数量超过了javac可以处理的数量.

请保留JBuilder 2005/2006 javac的具体答案(我们现在无法迁移,Borland Make编译器不能正确支持Java 1.6)

我知道如何和什么参数应该传递给javac的,问题是IDE似乎并没有让这些在任何地方设置.很多配置都隐藏在Jbuilder Install\bin*.config文件中,我觉得答案可能在某处,但还没有找到.

jbuilder javac heap-memory

2
推荐指数
1
解决办法
8482
查看次数

Delphi 7 - 窗体中的嵌入式文件打开对话框

有谁知道是否可以在自己的表单中嵌入文件打开对话框?

我们有一个选项卡式对话框,在其中一个选项卡上,我们希望用户能够浏览具有与标准打开对话框相同功能的文件,例如'查找'组合框,放置栏,shell文件列表,文件名组合名称完成等

我已经看过用一些第三方组件重新创建对话框,即Jam Shell Browser Components

我可以通过这种方式获得大部分功能,但我遗漏了一些东西,比如地方栏和文件名自动完成\建议

delphi delphi-7 topendialog opendialog

2
推荐指数
1
解决办法
3968
查看次数