我有一个带有多个工作线程的应用程序,每个核心一个.在现代的8核机器上,我有8个这样的线程.我的应用程序加载了很多插件,这些插件也有自己的工作线程.因为应用程序使用大块内存(照片,例如200 MB),我有内存碎片问题.问题是每个线程都分配了{$ MAXSTACKSIZE ...}的地址空间.它不使用物理内存,而是使用地址空间.我将MAXSTACKSIZE从1MB降低到128KB,似乎可行,但如果我接近极限,我现在不行.有没有可能测量真正使用多少堆栈?
嗨我正在使用Firemonkey,因为它具有跨平台功能.我想渲染一个粒子系统.现在我正在使用TMesh,它可以很好地快速显示粒子.每个粒子通过两个纹理三角形在网格中表示.使用不同的纹理坐标,我可以使用相同的网格显示许多不同的粒子类型.问题是,每个粒子都有自己的透明度/不透明度.根据我目前的方法,我无法为每个三角形(甚至顶点)单独设置透明度.我能做什么?
我意识到TMesh.Data.VertexBuffer中还有一些其他属性,比如Diffuse或其他纹理集(TexCoord1-3),但这些属性在TMesh中不被使用(甚至没有初始化).通过继承TMesh简单地改变这种行为似乎并不容易.似乎必须从较低级别的控件继承以初始化具有更多属性的VertextBuffer.在我尝试之前,我想问一下是否可以控制三角形的透明度.例如,我可以设置透明色(漫反射)还是使用透明纹理(TextCoor1)?或者有更好的方法在Firemonkey中绘制粒子.
有一个IDE插件(我认为它不是免费的),它有助于在IDE中编写XMLDocumention.我试图搜索它,但我再也找不到了.谁知道呢?
我认为在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 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) 根据微软的这篇文章,用户设置的屏幕刷新率可以是(并且大部分)是一个小数.用户设置59Hz,但屏幕按60Hz的屏幕显示运行,但实际上它是59.94Hz.我非常流畅的动画需要的是59.94Hz.
使用IDirect3DDevice9 :: GetDisplayMode我只得到一个int值,根据定义,它不能代表真正的时间(EnumDisplaySettings也是如此).我遇到一个关于每一秒的可见口吃,因为它报告圆形/截断59.如果我手动将我的应用程序中报告的时间校正到59.94,它会顺利运行.
有谁知道如何检索真正的屏幕刷新率?
我目前的解决方法是将60Hz和59Hz都映射到恒定的59.94Hz,但这并不令人满意.
我刚刚使用了Delphi的TAction的SecondaryShortCuts-Feature.但快捷方式由字符串定义,如"F5"或"Shift + F5".现在的问题是:在我的德国Windows上,动作不会触发,因为键"Shift"在德语中被称为"Umsch"!这是否意味着SecondaryShortCuts-Property在设计时完全没用,因为没有人可以创建在国际上工作的应用程序?
我可以通过将VK_SHIFT转换为正确的名称来在运行时设置密钥.我通过GetKeyNameText尝试了它,但这没有用,因为它给了长形式"Umschalt"而不是"Umsch".有人知道获取密钥名称的简短版本的功能吗?
我正在尝试编写一个包含通用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,这是我不想要的.
许多甚至简单的编辑器(例如Notepad ++或RubyMine)都有:按Ctrl + D复制当前选择或当前行(如果未选择任何内容).
在Delphi IDE(2010或XE2)中是否有类似的快捷方式?我读了各种捷径清单,但没有找到任何东西.
我需要一个提示,如何使用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) 我有一个简单的 FireMonkey 应用程序,它加载图像文件。这是我第一次尝试 OSX。它在 OSX 上通过 paserver 从“scratch-dir”启动。但我的图像文件显然不存在并且无法加载。我需要做什么才能让 Delphi 将此图像文件复制到 OSX 或捆绑它?
delphi ×10
delphi-xe2 ×3
firemonkey ×3
delphi-2009 ×2
delphi-2010 ×2
assembly ×1
basm ×1
delphi-xe5 ×1
direct3d ×1
directx ×1
generics ×1
macos ×1
sse2 ×1
stack ×1
winapi ×1
windows ×1
x86 ×1