小编Ste*_*nas的帖子

什么是安全的最大堆栈大小或如何衡量堆栈的使用?

我有一个带有多个工作线程的应用程序,每个核心一个.在现代的8核机器上,我有8个这样的线程.我的应用程序加载了很多插件,这些插件也有自己的工作线程.因为应用程序使用大块内存(照片,例如200 MB),我有内存碎片问题.问题是每个线程都分配了{$ MAXSTACKSIZE ...}的地址空间.它不使用物理内存,而是使用地址空间.我将MAXSTACKSIZE从1MB降低到128KB,似乎可行,但如果我接近极限,我现在不行.有没有可能测量真正使用多少堆栈?

delphi stack delphi-2010

9
推荐指数
2
解决办法
6265
查看次数

如何绘制数千个不同透明度的精灵?

嗨我正在使用Firemonkey,因为它具有跨平台功能.我想渲染一个粒子系统.现在我正在使用TMesh,它可以很好地快速显示粒子.每个粒子通过两个纹理三角形在网格中表示.使用不同的纹理坐标,我可以使用相同的网格显示许多不同的粒子类型.问题是,每个粒子都有自己的透明度/不透明度.根据我目前的方法,我无法为每个三角形(甚至顶点)单独设置透明度.我能做什么?

我意识到TMesh.Data.VertexBuffer中还有一些其他属性,比如Diffuse或其他纹理集(TexCoord1-3),但这些属性在TMesh中不被使用(甚至没有初始化).通过继承TMesh简单地改变这种行为似乎并不容易.似乎必须从较低级别的控件继承以初始化具有更多属性的VertextBuffer.在我尝试之前,我想问一下是否可以控制三角形的透明度.例如,我可以设置透明色(漫反射)还是使用透明纹理(TextCoor1)?或者有更好的方法在Firemonkey中绘制粒子.

delphi delphi-xe2 firemonkey

8
推荐指数
1
解决办法
900
查看次数

XMLDoc的IDE插件

有一个IDE插件(我认为它不是免费的),它有助于在IDE中编写XMLDocumention.我试图搜索它,但我再也找不到了.谁知道呢?

delphi xml-documentation delphi-2010

7
推荐指数
1
解决办法
1339
查看次数

用于高DPI Windows的Delphi Firemonkey Scale

我认为在FireMonkey中扩展应用程序应该很容易,因为它应该也适用于Retina-Mac.似乎有一些背景魔法选择了另一种风格,但在Windows中似乎并非如此.

在VCL中有TForm.Scaled可以完成工作(或多或少).

对于FireMonkey,我发现Embarcadero的这篇文章,但似乎Embarcadero不太确定这种方法是否有用,因为在XE5中,sampleproject"ControlsDemo"不再包含scale-trackbar.它还需要在所有形式中都存在root-TLayout,可以设置比例因子.我的表单中没有这样的元素(我害怕添加一个,因为我不能确定我是否运行另一个firemonkey bug).

那么如何使用FireMonkey考虑不同的DPI设置?

编辑:我试图破解TPlatFormWin并将CurrentScreenScale设置为2但它不起作用:我有黑色工具栏,但没有缩放,但至少它使用了提供的TImage.MultiResBitmap中的HighRes替代.

delphi firemonkey delphi-xe5

7
推荐指数
1
解决办法
3755
查看次数

Delphi 2009中的错误? - >*.在项目搜索路径中找不到(在Delphi 2006中有效)

我有一个问题从Delphi 2006迁移到Delphi 2009.一个使用JVCL的项目抱怨jvconsts.res丢失了.该文件绝对存在.项目搜索路径包括文件所在的目录.(注意:我的全局搜索路径中没有JVCL以使其更具可移植性)

但是应该找到该文件,正如Delphi帮助所说:

"...链接器在"项目|选项"对话框的"目录/条件"页面上的"搜索路径"输入框中指定的目录中搜索.res文件[...]

这不是JVCL问题:简约程序显示:

想象一下这个目录结构:

C:\Test\ResTest.dpr
C:\Test\Res\Test.res
Run Code Online (Sandbox Code Playgroud)

这是ResTest.dpr:

program ResTest;

{$R test.res} // not found even if "c:\Test\Res" is in project search path

begin
end.
Run Code Online (Sandbox Code Playgroud)

这在Delphi 2006中编译得很好但在Delphi 2009中没有编译.经过一些搜索我发现,一种告诉Delphi文件所在的方法:使用命令行编译器的gobal搜索路径或-R参数.

在我写这篇文章时,我更接近真正的问题:在Delphi 2006中,.cfg-File包含以下行:

-I"c:\Test\Res"
-U"c:\Test\Res"
-R"c:\Test\Res"
Run Code Online (Sandbox Code Playgroud)

基本上,它将项目搜索路径中的值复制到3个命令行选项中,因此它确保-R参数具有正确的值.

在Delphi 2009中(我将编译器输出的详细程度设置为"debug")我从IDE获得结果命令行:

如果目录(c:\ Test\Res)包含在项目搜索路径中:

dcc32.exe --no-config -M -Q -ID:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib" -LE"C:\Users\Public\Documents\RAD Studio\6.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\6.0\Dcp" -O"c:\program files\codegear\rad studio\6.0\Lib" -R"c:\program files\codegear\rad studio\6.0\Lib" -UD:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib" -K00400000   ResTest.dpr
Run Code Online (Sandbox Code Playgroud)

如果目录包含在全局搜索路径中

dcc32.exe --no-config -M -Q -ID:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -LE"C:\Users\Public\Documents\RAD Studio\6.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\6.0\Dcp" -O"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -R"c:\program …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2009

6
推荐指数
1
解决办法
6171
查看次数

如何找出真正的屏幕刷新率(不是舍入的数字)

根据微软这篇文章,用户设置的屏幕刷新率可以是(并且大部分)是一个小数.用户设置59Hz,但屏幕按60Hz的屏幕显示运行,但实际上它是59.94Hz.我非常流畅的动画需要的是59.94Hz.

使用IDirect3DDevice9 :: GetDisplayMode我只得到一个int值,根据定义,它不能代表真正的时间(EnumDisplaySettings也是如此).我遇到一个关于每一秒的可见口吃,因为它报告圆形/截断59.如果我手动将我的应用程序中报告的时间校正到59.94,它会顺利运行.

有谁知道如何检索真正的屏幕刷新率?

我目前的解决方法是将60Hz和59Hz都映射到恒定的59.94Hz,但这并不令人满意.

windows directx winapi direct3d

5
推荐指数
1
解决办法
7474
查看次数

TAction.SecondaryShortCuts是特定于语言的.如何正确设置?

我刚刚使用了Delphi的TAction的SecondaryShortCuts-Feature.但快捷方式由字符串定义,如"F5"或"Shift + F5".现在的问题是:在我的德国Windows上,动作不会触发,因为键"Shift"在德语中被称为"Umsch"!这是否意味着SecondaryShortCuts-Property在设计时完全没用,因为没有人可以创建在国际上工作的应用程序?

我可以通过将VK_SHIFT转换为正确的名称来在运行时设置密钥.我通过GetKeyNameText尝试了它,但这没有用,因为它给了长形式"Umschalt"而不是"Umsch".有人知道获取密钥名称的简短版本的功能吗?

delphi delphi-xe2

4
推荐指数
1
解决办法
596
查看次数

包含TObjectList <T>的TGenericClass <T>无法编译

我正在尝试编写一个包含通用TObjectList <T>的泛型类,它应该只包含TItem的元素.

uses
  Generics.Collections;

type
  TItem = class
  end;

  TGenericClass<T: TItem> = class
  public
    SimpleList: TList<T>; // This compiles
    ObjectList: TObjectList<T>; // This doesn't compile: Compiler complaints that "T is not a class type"
  end;
Run Code Online (Sandbox Code Playgroud)

这是一个错误的语法吗?BTW:TGenericClass <T:class>编译,但是List中的Items不再是TItem,这是我不想要的.

delphi generics delphi-2009

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

Delphi IDE:复制当前行或选择的键盘快捷键?

许多甚至简单的编辑器(例如Notepad ++或RubyMine)都有:按Ctrl + D复制当前选择或当前行(如果未选择任何内容).

在Delphi IDE(2010或XE2)中是否有类似的快捷方式?我读了各种捷径清单,但没有找到任何东西.

delphi

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

如何用SSE2优化这个Delphi功能?

我需要一个提示,如何使用SSE2程序集(32位)实现这个Delphi函数.其他优化也是受欢迎的.也许有人可以告诉我,可以使用什么样的指令,所以我有一个进一步阅读的起点.

实际:

const Precision = 10000;

// This function adds all Pixels into one. The pixels are weighted before adding. 
// A weight can range from 0 to "Precision". "Size" is typically 10 to 50.

function TFilter.Combine(Pixels: PByte; Weights: PCardinal; const Size: Cardinal): Cardinal;
var
  i, R, G, B, A: Cardinal;
begin
  B := Pixels^ * Weights^; Inc(Pixels);
  G := Pixels^ * Weights^; Inc(Pixels);
  R := Pixels^ * Weights^; Inc(Pixels);
  A := Pixels^ * Weights^; Inc(Pixels);
  Inc(Weights); // goto next …
Run Code Online (Sandbox Code Playgroud)

delphi x86 assembly sse2 basm

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

如何将其他文件复制到 OSX

我有一个简单的 FireMonkey 应用程序,它加载图像文件。这是我第一次尝试 OSX。它在 OSX 上通过 paserver 从“scratch-dir”启动。但我的图像文件显然不存在并且无法加载。我需要做什么才能让 Delphi 将此图像文件复制到 OSX 或捆绑它?

delphi macos delphi-xe2 firemonkey

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