我最近升级到Delphi 11.3,并解决了问题。
我遇到的一个问题是 Delphi 在您键入时显示的实时代码模板。我通常会启用此功能,因为它会很有帮助。
但在 Delphi 11.3 中,当 Color SpeedSetting 设置为“Ocean”时,突出显示的模板槽是不可读的,因为它使用深蓝色背景(“highlight”,或者我猜是“highdark”)和黑色文本,而不是一些文本。反转颜色,例如“前景”(即:文本)的白色。
这是一个屏幕截图:
我如何控制该颜色?我在自定义颜色设置中找不到用于模板突出显示的项目。
编辑添加:Color SpeedSetting“Visual Studio (TM)”也有同样的问题。
编辑2:更多研究:
任何浅色背景的主题都会出现这种不可用的颜色问题。我不确定 Delphi 是否在某些主题上有一些“浅色主题”标志,或者它是根据某些元素的背景颜色工作的,但它们似乎都表现出了问题。
第 3 方 Delphi IDE 主题编辑器也没有用于实时模板颜色的项目。
模板字段颜色在 10.x 中不是问题,其中实时模板字段是用轮廓框绘制的,而不是背景更改。(嗯,初始字段的背景发生了变化,但是一旦您开始输入,就会变成一个框。)
我已将其发布到质量门户 RSP-42312。
2023 年 12 月,我更新了问题 RSP-42312,报告该问题在 Delphi 12 编辑器中仍然存在。
delphi templates syntax-highlighting editor delphi-12-athens
每次我打开 Delphi 并尝试在欢迎页面上加载 GetIt Packages 时,都会收到错误,并且无法加载,如下图所示:

单击“重试”不起作用。同样的问题。
它给我的警告/错误是:
无法加载 URL https://getit-12.embarcadero.com。发生以下错误:模块“rtl290.bpl”中地址 7A0E2732 处发生访问冲突。写入地址77C9BC5C
这种情况每次都会发生。这是 Delphi 12 中的错误还是我的安装没有正确完成?我该如何修复 GetIt 和此警告/错误?
在某些编程语言中,可以将函数标记为已弃用或已过时,然后不能使用或应谨慎使用。有时它甚至会在某处产生警告消息。
Delphi 编程语言中是否可以将过程标记为已弃用?如果可能的话,它是如何运作的?
如何在运行时通过代码访问Delphi项目中表单的DFM资源?
背景:我希望能够在运行时解析表单的 DFM,以根据需要创建 HTML 和其他表示形式。当然,我可以在构建项目之前解析它们并创建额外的资源。但当它们被编译到软件中并在运行时使用时,我相信它们也应该可以在代码中以某种方式访问。
我目前使用 Delphi 11,很快就会使用 Delphi 12。
delphi embedded-resource dfm delphi-11-alexandria delphi-12-athens
Delphi 12 引入了多行字符串,我试图弄清楚它是如何工作的,来自 JavaScript 背景。在那里我可以直接在多行字符串中包含变量,例如:
const myName = 'Martin';
const myString = `Hi ${myName},
Say hello to
multi-line
strings!`;
Run Code Online (Sandbox Code Playgroud)
这将替换${myName}为变量的内容。在 Delphi 中如何使用新的'''多行字符串来实现这一点?
delphi string-interpolation multilinestring delphi-12-athens
我使用 TParallel.For 像这样:
procedure TForm1.Button2Click(Sender: TObject);
var
lF: TParallel;
begin
lF := TParallel.Create;
try
lF.&For(1, 100000,
procedure(I: Integer)
var x: Integer;
lList: TStringList;
begin
lList := TStringList.Create;
try
lList.Add(i.ToString);
finally
lList.Free;
end;
end );
finally
FreeAndNIL(lF);
end;
end;
Run Code Online (Sandbox Code Playgroud)
自 Delphi 12(已修补)以来,我可以看到 for 循环结束后 CPU 使用率很高。直到 11.3 CPU 仅在 for 循环执行期间使用,完成后将返回到 0。
有人知道还有其他设置吗?我已经尝试过尝试,TThreadPool.Default.SetMaxWorkerThreads但没有成功。
我正在尝试使用该类TRegistry读取 Windows 中的注册表值。
有人给我发送了一个如何使用它的示例,但代码不起作用。
uses Windows, Registry;
...
procedure TForm1.Button1Click(Sender: TObject);
var
Registry: TRegistry;
ProductName: string;
begin
Registry := TRegistry.Create(KEY_READ); // or KEY_WRITE if you want to modify the value
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
ProductName := Registry.GetValue('SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName', '');
ShowMessage('The product name is: ' + ProductName);
finally
Registry.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这不是找GetValue。所以也许这不是TRegistry工作方式,或者它的工作方式在新版本的 Delphi 中已经改变了。我不确定,而且 Embarcadero docwiki 已关闭,所以我也无法在那里检查。
怎样TRegistry运作?如何使用它从注册表中读取值?
delphi ×7
deprecated ×1
dfm ×1
editor ×1
obsolete ×1
procedure ×1
rad-studio ×1
registry ×1
templates ×1