小编TLa*_*ama的帖子

如何让 TVirtualStringTree 在禁用状态下显示图标?

我需要将目录中的文件显示到 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)

delphi virtualtreeview tvirtualstringtree

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

使用WMI获取其他信息

我有一个问题,如果你可以获得高清速度(RPM),如果内存是DDR1,DDR2,DDR3,如果高清是SATA或IDE插座和芯片组和主板...如果有可能在Delphi中进行相位

谢谢

memory delphi wmi motherboard chipset

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

Delphi - 将NtCreateKey与HKCU一起使用

并感谢您抽出宝贵时间来审视我的问题.

我正在尝试使用本机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 registry winapi delphi-7

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

如何将Memo或RichEdit保存为UTF 8文本文件?

我正在使用Delphi 7,我编写了一个从用户那里获取一些信息的程序,它将来自几个编辑框和备忘录的信息以及备忘录中的其他输入组件组合在一起.如何将此备忘录另存为UTF 8文本文件?我从上一个程序的用户那里收到了一些没有utf问题解决方案的文件,现在,当我打开输出文件时,我看到???? (如你所知!)而不是不同的语言字符,这些不可恢复,是吗?

delphi delphi-7

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

如何从多维PSafeArray中获取数据?

我需要从PSafeArrayDelphi中读取数据.
PSafeArray是由在C#中开发的DLL中实现的方法返回的.此方法返回二维字符串数组string[,].如何PSafeArray在Delphi中阅读这样的结果?

c# delphi delphi-7 safearray

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

没有客户端数据集的dbgrid

我有一个带有dbgrid和sqlquery组件的表单.我试图用sqlquery填充dbgrid.当我这样做时,我收到消息"单向数据集上不允许操作".我不想使用客户端数据集,因为我不想要数据的"本地"副本,我想直接读取和显示数据.如何才能做到这一点?

delphi dbexpress delphi-2010

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

如何在 Delphi 上创建正则表达式以删除括号和引号

我以前从未使用过 TPerlRegEx,这是我第一次使用正则表达式。

我正在寻找一个在Delphi Xe2中使用TPerlRegEx的小例子来删除括号和引号,如下所示:

输入字符串:

["some text"]
Run Code Online (Sandbox Code Playgroud)

结果:

some text
Run Code Online (Sandbox Code Playgroud)

单行,没有嵌套的括号或引号。我已经使用 Regexbuddy 创建和测试正则表达式,但它没有给我结果。

regex delphi

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

执行包含BLOB数据的Array DML命令是否可行且有意义?

是否可以执行在参数数组中传递BLOB字段数据的Array DML INSERTUPDATE语句?我问题中更重要的部分,如果可能的话,包含BLOB数据的Array DML命令是否仍然比逐个执行命令更有效?

我注意到TADParam有一个AsBlobs索引属性,所以我认为它可能是可能的,但我还没有尝试过这个,因为没有提及性能也没有示例显示这一点,因为索引属性的类型RawByteString不太适合我的需要.

我正在使用FireDAC并使用SQLite数据库(Params.BindMode = pbByNumber因此我使用INSERT多个本机SQLite VALUES).我的目标是尽可能快地存储大约10万条包含非常小的BLOB数据(每条记录大约1kB)的记录(以FireDAC的抽象成本计算).

delphi sqlite dml anydac firedac

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

Delphi使用1个保存按钮保存来自不同数据源的所有值

我得到了这个表格;

在此输入图像描述

我想用1个保存按钮保存这些编辑.但问题是这些字段都有不同的数据源.有人可以帮助我吗?

delphi

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

为什么FloatToText在不同的项目中返回不同的值?

我正在使用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.

他们在不同项目中工作的原因可能是什么?

delphi floating-point floating-point-precision

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