我需要将目录中的文件显示到 TVirtualStringTree。所以,我使用 SHGetFileInfo 来获取文件的图标。但似乎我只能获得“正常”图标(以下屏幕截图的左侧)。如果是这样,TVirtualStringTree 可以将图标绘制为“禁用”吗?就像您禁用了 a 节点一样。请看屏幕截图:
更新
Soft Gems 论坛中有一个类似的帖子。我可以获得图标的矩形,然后自己绘制图标。我正在使用 TcxImageList,它可以轻松绘制“禁用”图标。我首先在 GetImageIndex 事件中分配了一个不存在的图像索引,所以我有一个空间来绘制图标。然后使用以下代码进行绘制。
procedure TfrmMain.tvSharesAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
var
rImage: TRect;
OffsetLeft: Integer;
begin
rImage := ItemRect;
with TVirtualStringTree(Sender) do begin
if (toShowRoot in TreeOptions.PaintOptions) then
OffsetLeft := Indent * (GetNodeLevel(Node) + 1)
else
OffsetLeft := Indent * GetNodeLevel(Node);
Inc(rImage.Left, Margin + OffsetLeft);
Inc(rImage.Top, (NodeHeight[Node] - Images.Height) div 2);
rImage.Right := rImage.Left + Images.Width;
rImage.Bottom := rImage.Top + Images.Height;
end;
// draw the …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,如果你可以获得高清速度(RPM),如果内存是DDR1,DDR2,DDR3,如果高清是SATA或IDE插座和芯片组和主板...如果有可能在Delphi中进行相位
谢谢
并感谢您抽出宝贵时间来审视我的问题.
我正在尝试使用本机NtCreateKey API在HKCU中创建一个密钥.
我有一个来源可以帮助我理解API的工作原理,但我似乎无法使其适用于HKCU,只有HKLM ......这可能吗?
源代码我已经:
const
KeyNameBuffer: AnsiString = '\Registry\Machine\SOFTWARE'; //Assuming I need to change this.....
NewKeyNameBuffer: AnsiString = 'Parent Key To Create';
HiddenKeyNameBuffer: AnsiString = 'Main Key To Create';
HiddenValueNameBuffer: AnsiString = 'Value Key To Create';
procedure TForm1.btnDemoClick(Sender: TObject);
var
KeyName, ValueName: UNICODE_STRING;
SoftwareKeyHandle, SysKeyHandle, HiddenKeyHandle: THandle;
Status: ULONG;
ObjectAttributes: OBJECT_ATTRIBUTES;
Disposition: ULONG;
Buffer: array of WideChar;
begin
//
// Open the Software key
//
SetLength(Buffer, Length(KeyNameBuffer));
MultiByteToWideChar(CP_UTF8, 0, @KeyNameBuffer[1], Length(KeyNameBuffer),
PWideChar(Buffer), Length(Buffer));
KeyName.Buffer := @Buffer[0];
KeyName.Length := …
Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 7,我编写了一个从用户那里获取一些信息的程序,它将来自几个编辑框和备忘录的信息以及备忘录中的其他输入组件组合在一起.如何将此备忘录另存为UTF 8文本文件?我从上一个程序的用户那里收到了一些没有utf问题解决方案的文件,现在,当我打开输出文件时,我看到???? (如你所知!)而不是不同的语言字符,这些不可恢复,是吗?
我需要从PSafeArray
Delphi中读取数据.
这PSafeArray
是由在C#中开发的DLL中实现的方法返回的.此方法返回二维字符串数组string[,]
.如何PSafeArray
在Delphi中阅读这样的结果?
我有一个带有dbgrid和sqlquery组件的表单.我试图用sqlquery填充dbgrid.当我这样做时,我收到消息"单向数据集上不允许操作".我不想使用客户端数据集,因为我不想要数据的"本地"副本,我想直接读取和显示数据.如何才能做到这一点?
我以前从未使用过 TPerlRegEx,这是我第一次使用正则表达式。
我正在寻找一个在Delphi Xe2中使用TPerlRegEx的小例子来删除括号和引号,如下所示:
输入字符串:
["some text"]
Run Code Online (Sandbox Code Playgroud)
结果:
some text
Run Code Online (Sandbox Code Playgroud)
单行,没有嵌套的括号或引号。我已经使用 Regexbuddy 创建和测试正则表达式,但它没有给我结果。
是否可以执行在参数数组中传递BLOB字段数据的Array DML INSERT
或UPDATE
语句?我问题中更重要的部分,如果可能的话,包含BLOB数据的Array DML命令是否仍然比逐个执行命令更有效?
我注意到TADParam
有一个AsBlobs
索引属性,所以我认为它可能是可能的,但我还没有尝试过这个,因为没有提及性能也没有示例显示这一点,因为索引属性的类型RawByteString
不太适合我的需要.
我正在使用FireDAC并使用SQLite数据库(Params.BindMode = pbByNumber
因此我使用INSERT
多个本机SQLite VALUES
).我的目标是尽可能快地存储大约10万条包含非常小的BLOB数据(每条记录大约1kB)的记录(以FireDAC的抽象成本计算).
我得到了这个表格;
我想用1个保存按钮保存这些编辑.但问题是这些字段都有不同的数据源.有人可以帮助我吗?
我正在使用FloatToText
这种方式:
function ExFloatToStr(Value: Extended): string;
var
Buffer: array[0..63] of Char;
FormatSettings: TFormatSettings;
begin
GetLocaleFormatSettings(GetUserDefaultLCID, FormatSettings);
SetString(Result, Buffer, FloatToText(Buffer, Value, fvExtended, ffGeneral,
18, 0, FormatSettings));
end;
Run Code Online (Sandbox Code Playgroud)
如果我传递给这个函数值9229.99,它返回一个字符串值9229.9900000000016,但它不是我想要的.当我创建一个新项目并在那里复制上面的代码时,它运行良好.它返回9229.99.
他们在不同项目中工作的原因可能是什么?