当我将string类型转换为TDateTimeI时出错.我正在使用VarToDateTime功能.我作为字符串的日期是2018-07-11T13:45:14.363.
var
s: string;
v: Variant;
dt: TDateTime;
begin
s := '2018-07-11T13:45:14.363';
v := s;
dt := VarToDateTime(v);
end;
Run Code Online (Sandbox Code Playgroud)
这是一个Delphi应用程序,但我想这是一个常见的Windows编程问题.
我在周末离开了我的应用程序(在Delphi IDE中)并且刚刚回来找到堆栈溢出.
堆栈就像这样......
:75c4417e kernel32.GetDriveTypeW + 0x23
:75c452ae kernel32.IsProcessorFeaturePresent + 0xa9
:75c45272 kernel32.IsProcessorFeaturePresent + 0x6d
:75c45248 kernel32.IsProcessorFeaturePresent + 0x43
:7678410b KERNELBASE.LoadStringBaseExW + 0xc7
:76678ed2 USER32.LoadStringW + 0x19
:0040c4ae LoadResString + $4A
uADStanDef.TADDefinition.Create(nil)
uADStanDef.TADDefinition.CreateTemporary
uADStanDef.TADConnectionDefTemporaryFactory.CreateObject
uADStanFactory.TADManager.CreateInterface((1050358107, 62550, 16757, (168, 100, 178, 87, 60, 74, 32, 21)),(no value),True)
uADStanFactory.ADCreateInterface((1050358107, 62550, 16757, (168, 100, 178, 87, 60, 74, 32, 21)),(no value),True)
uADCompClient.TADCustomConnection.Create($2DB7EB0)
fMainForm.TMainForm.ServerAliveTimerTimer($2E8DE38) <========== my code
:004f1546 Winapi + $4F1546
:00461316 Winapi + $461316
:766762fa ; C:\Windows\syswow64\USER32.dll
:76676d3a USER32.GetThreadDesktop + 0xd7
:766777c4 …Run Code Online (Sandbox Code Playgroud) 碰巧我,Delphi XE6 IDE 忘记TFrame了我过去创建的所有后代.
更具体地说,当我单击标准 - >框架时,选择我的框架的对话框不再显示.
相反,它显示以下错误消息:
没有框架可供插入.可以从File | New | Other选项创建新帧.
有办法纠正这种情况吗?
EDIT1重现的步骤很遗憾:我真的不确定这是怎么发生的,但事实确实如此.我认为从某些版本的Delphi升级到另一个版本时可能存在罪魁祸首.因为我随着时间的推移多次升级,我记得在Delphi 7中启动项目,然后有一些版本我不记得哪些版本,我使用的最后两个版本是XE2,直到现在是XE6.
Edit2如果在XE2之前使用Delphi版本创建了框架,则会发生这种情况.
我想在 DX Berlin 中禁用带有 VCL 样式的 [X] 关闭按钮。
为什么这段代码不能与 VCL 风格一起工作?
EnableMenuItem(GetSystemMenu(Form3.Handle, LongBool(False)),SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
Run Code Online (Sandbox Code Playgroud) 我已设置FocusedNode使用以下代码的高度
procedure TMainForm.SetheightClick(Sender: TObject);
begin
if Assigned(tree1.FocusedNode) then
Tree1.NodeHeight[Tree1.FocusedNode] := strtointdef(edit8.Text ,50);
end;
Run Code Online (Sandbox Code Playgroud)
我想设置Tvirtualstringtree多选节点的高度.怎么做?
我正在使用 Embarcadero 的 Rad Studio Delphi (10.2.3),并且在读取非常大的文本文件(700 万行以上,每行都不同,行长度可以是 1 到 ~200 个字符等)时遇到内存问题。我对 Delphi 编程相当陌生,所以在发帖之前我已经搜索过 SO 和 Google 寻求帮助。
我最初实现了一个 TStringList 并使用 LoadFromFile 方法读取文件,但是当处理的文本文件变得足够大时,这会失败。然后,我实现了一个 TStreamReader 并使用 ReadLn 使用此处找到的基本代码填充 TStringList:
TStringList.LoadFromFile - 大文本文件的异常
代码示例:
//MyStringList.LoadFromFile(filename);
Reader := TStreamReader.Create(filename, true);
try
MyStringList.BeginUpdate;
try
MyStringList.Clear;
while not Reader.EndOfStream do
MyStringList.Add(Reader.ReadLine);
finally
MyStringList.EndUpdate;
end;
finally
Reader.Free;
end;
Run Code Online (Sandbox Code Playgroud)
在我需要处理的文件变得巨大(约 700 万行以上)之前,这种方法一直很有效。看起来 TStringList 变得太大以至于内存不足。我说“出现”是因为我实际上无权访问正在运行的文件,并且所有错误信息都是由我的客户通过电子邮件提供的,这使得这个问题变得更加困难,因为我无法简单地在 IDE 中调试它。
该代码是32位编译的,我无法使用64位编译器。我也不能包括数据库系统之类的。不幸的是,我有一些严格的限制。我需要加载每一行以查找模式并将这些行与其他行进行比较以查找“模式中的模式”。我很抱歉在这里说得很含糊。
底线是——有没有一种方法可以在不使用 TStringList 的情况下访问文本文件中的每一行,或者也许有更好的方法来处理 TStringList 内存?
也许有一种方法可以将 StreamReader 中的特定行块加载到 TStringList 中(例如,读取前 100,000 行并处理,接下来的 100,000 行等),而不是一次加载所有内容?我想我可以写一些东西来处理可能的“块间”模式。
预先感谢您的任何和所有帮助和建议!
***** 编辑更新 *****
好的,这是我需要实现的基本解决方案:
var …Run Code Online (Sandbox Code Playgroud) 我有一个位图和一个蒙版(还有一个位图)。我想在蒙版上绘制位图(如下图所示)

如何在 Delphi 上使用Firemonkey执行此操作?
我在Delphi应用程序中使用TDBGrid组件,当我更改行颜色时,网格线变得不清楚或几乎不可见.
那么,任何人都可以告诉我们如何改变网格线的颜色吗?
我的意思是:如何改变细胞边界的颜色(见下图)
细胞边界

我被要求对另一个开发人员 10 多年前在 Delphi 7 中所做的项目进行一些更改。这是一段专有代码,因此我将非常具体。
“Container”是一个 TScrollBox,里面的面板是 TSpkRollPanel 的——一个可折叠或可扩展的 TPanel 衍生物。
我希望下图能说明一切。这真的很简单。我应该使 TSpkRollPanel 元素仅垂直拖放,以便它们可以按所需顺序排列。我花了几个小时来加快 Delphi 的速度(我已经 10 多年没见过了)
如果有人能指出我正确的方向,我将不胜感激。我精通德尔福,只是生疏了。