小编Ian*_*oyd的帖子

如何在VirtualStringTree中添加不可见的节点?

目前我有这个代码来添加一些节点 VST

function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; AObject: TDATArecord): PVirtualNode;
var
  Data: PUserData;
begin
  Result := AVST.AddChild(ANode);
  Data := AVST.GetNodeData(Result);
  AVST.ValidateNode(Result, false);
  Data^.FObject := AObject;
end;

//adding node
VDT1.BeginUpdate;
try
  DATArecord.name := 'nodename';
  DATArecord.Visible:= False;
  AddVSTStructure(VDT1, nil, DATArecord);
finally
  VDT1.EndUpdate;
end;
Run Code Online (Sandbox Code Playgroud)

我想在非可见状态下添加节点,我的意思是完全不可见.

我知道我可以在添加它之后设置节点的可见性VDT1.IsVisible[Node] := boolean;但我想在树中显示之前将其设置为不可见,考虑到我添加的记录设置为DATArecord.Visible:= False;

因此,如果Datarecord.visible等于true,则添加具有可见状态的节点.如果是false,添加具有不可见状态的节点我该怎么做?

delphi virtualtreeview tvirtualstringtree delphi-xe8

3
推荐指数
1
解决办法
152
查看次数

如何使用更高优先级的TVirtualStringTree进程按键?

我们最近在工作中找到了一个搜索表单.它的功能是标准搜索表单的功能:在顶部的某些框中输入一些条件,点击"搜索"按钮,然后在下面的网格中显示结果.但它的功能很丑陋而且非常有限,所以我的一位同事在重新开始工作之前就重建了它.现在我想完成最后几个细节.

其中一个变化是用TListBox更强大的功能取代旧网格TVirtualStringTree.但是在这个过程中,它似乎已经破坏了一些东西:之前,如果你点击网格中的一行(给予焦点的网格)并点击Enter,相应的事件处理程序将触发并处理你的输入,打开详细视图对于所选项目.但是,在此网格中,按下Enter会导致TButton具有Default = true属性的窗体上的触发OnClick.

如何TVirtualStringTree在具有输入焦点时使优先级成为优先级,以便它在响应之前(并且最好是代替)将其发送到表单时响应用户按Enter键?

delphi vcl virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
75
查看次数

我可以泄漏什么未命名的GDI资源

我对我的应用程序进行了一夜间压力测试,今天早上软件因Windows错误而崩溃.

发生错误是因为该进程明显超出了GDI句柄:

Process Explorer

在此输入图像描述

任务管理器

在此输入图像描述

接下来要弄清楚我正在泄漏哪种GDI资源(例如笔,画笔,位图,字体,区域,DC).为此我转向了NirSoftGDIView:

在此输入图像描述

  • 笔: 0
  • Ext Pen:0
  • 刷子:4
  • 位图:35
  • 字体:19
  • 调色板:1
  • 地区:3
  • DC:11
  • 图元文件DC:0
  • 增强型图元文件DC:0
  • 其他GDI:0
  • GDI总计:0
  • 所有GDI:10,000

GDI可以处理什么,不是任何已知的GDI类型?

winapi gdi resource-leak

3
推荐指数
1
解决办法
440
查看次数

TVirtualStringTree中的图标绘有异常

这是重现问题的非常小的项目(VirtualStringTree版本6.5):

type
  TForm1 = class(TForm)
    vstTest: TVirtualStringTree;
    Images: TImageList;
    procedure FormCreate(Sender: TObject);
    procedure vstTestGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
      TextType: TVSTTextType; var CellText: string);
    procedure vstTestGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind;
      Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  PTestRec = ^TTestRec;
  TTestRec = record
    Col1: string;
    Col2: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Node: PVirtualNode;
  Data: PTestRec;
begin
  vstTest.Header.Columns.Add;
  vstTest.Header.Columns.Add;
  vstTest.Header.Options := …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview tvirtualstringtree delphi-10.1-berlin

3
推荐指数
1
解决办法
570
查看次数

什么会导致我的客户端服务器上的高缓冲区 I/O?

我有一个客户端的 SQL Server 具有高Buffer I/O

我检查了长时间运行的查询,添加了新索引,并且服务器上没有锁定。是磁盘问题吗?

以下是活动监视器上等待的详细信息:

在此处输入图片说明

sql sql-server

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

OPENROWSET 因“无效的授权规范”而失败

我正在尝试OPENROWSET在 SQL Server 2008 SP1 中使用:

SELECT *
FROM OPENROWSET(
      'SQLOLEDB', 
      'Data Source=hydrogen;User ID=scratch;Password=scratch;',
      'select * from users')
Run Code Online (Sandbox Code Playgroud)
  • OLE DB 提供程序SQLOLEDB
  • 连接字符串Data Source=hydrogen;User ID=scratch;Password=scratch;
  • 命令文本select * from users

查询失败:

链接服务器“(空)”的 OLE DB 访问接口“SQLNCLI10”返回消息“授权规范无效”。

链接服务器“(空)”的 OLE DB 访问接口“SQLNCLI10”返回消息“连接字符串属性无效”。

消息 7399,级别 16,状态 1,第 1 行
链接服务器“(null)”的 OLE DB 提供程序“SQLNCLI10”报告了错误。身份验证失败。

消息 7303,级别 16,状态 1,第 1 行无法初始化链接服务器“(空)”的 OLE DB 访问接口“SQLNCLI10”的数据源对象。

注意:服务器和凭据当然是正确的。

但我没有使用 SQLNCLI10

令人困惑的是错误表明有人正在使用 OLE DB 提供程序SQLNCLI11 (SQL Server Native Client 11.0)

链接服务器“(空)”的 OLE …

sql-server openrowset sql-server-2008 sqloledb

3
推荐指数
1
解决办法
9395
查看次数

Windows 资源管理器悬停和选择的视觉样式

Windows 的最后三个版本在 Windows 资源管理器列表视图中都具有半透明突出显示和悬停效果:

在此处输入图片说明

使用主题浏览器,我看到 ListItem 没有与我在 Windows 中看到的状态相匹配的状态:

在此处输入图片说明

有没有:

  • 班级
  • 部分
  • 状态

代表Windows中的ListView?

winapi themes visual-styles

3
推荐指数
1
解决办法
358
查看次数

如何将两个打包的 64 位四字加载到 128 位 xmm 寄存器中

我有两个 UInt64(即 64 位四字)整数。

  • 它们对齐到 8 字节 ( sizeof(UInt64)) 边界(如果这对任何有用,我也可以将它们对齐到 16 字节)
  • 它们被打包在一起,因此它们并排在内存中

我如何将它们加载到 xmm 寄存器中,例如xmm0

在此处输入图片说明


我发现:

movq xmm0, v[0]
Run Code Online (Sandbox Code Playgroud)

但这只会移动v[0],并将高 64 位xmm0设置为零:

xmm0 0000000000000000 24FC18D93B2C9D8F

奖金问题

  • 我如何让他们回来?
  • 如果它们不在内存中并排怎么办?
  • 如果它们是 4 字节对齐的怎么办?

编辑

正如 W. Chang 指出的那样,字节序化很小,我认为它是相反的:

在此处输入图片说明

我的难题是如何让他们进来,又如何让他们出去。

language-agnostic x86 assembly sse2

3
推荐指数
1
解决办法
1405
查看次数

CryptoNG:使用 BCryptExportKey 导出 RSA 密钥失败并显示 STATUS_INVALID_HANDLE

使用下一代加密 API(又名 CryptoAPI Next Generation,又名 CryptoNG,又名 Cng,又名 BestCrypt,又名 bcrypt),我试图导出一个新生成的 RSA 私钥对:

编辑:较短的代码版本:

BCRYPT_ALG_HANDLE alg;
BCryptOpenAlgorithmProvider(out alg, BCRYPT_RSA_ALGORITHM, null, 0);

BCRYPT_KEY_HANDLE key;
BCryptGenerateKeyPair(alg, out key, 4096, 0);

DWORD cbResult;
BCryptExportKey(key, 0, BCRYPT_RSAFULLPRIVATE_BLOB, null, 0, out cbResult, 0);
Run Code Online (Sandbox Code Playgroud)

更长的代码版本

NTSTATUS nt;

// Open the RSA algorithm provider
BCRYPT_ALG_HANDLE alg;
nt = BCryptOpenAlgorithmProvider(out alg, BCRYPT_RSA_ALGORITHM, null, 0);
NTStatusCheck(nt);
      // Successfully opened the RSA algorithm provider

// Generate a 4096 bit RSA public-private key pair
BCRYPT_KEY_HANDLE key;
nt = BCryptGenerateKeyPair(alg, out key, …
Run Code Online (Sandbox Code Playgroud)

windows cryptography cng

3
推荐指数
1
解决办法
1635
查看次数

如何调用 NtOpenFile?

我正在尝试调用NtOpenFile,但失败并显示错误:

STATUS_OBJECT_PATH_SYNTAX_BAD = NTSTATUS($C000003B);

对象路径组件不是目录对象。

基本要点是:

//The file we'll test with
filename: UnicodeString := 'C:\Windows\Explorer.exe'; //23 characters

//Convert the filename to counted UNICODE_STRING
cs: UNICODE_STRING;
cs.Length        := Length(filename) * sizeof(WideChar); //46 bytes
cs.MaximumLength := cs.Length + 2;  //48 bytes
cs.Buffer        := PWideChar(Filename);  //"C:\Windows\Explorer.exe"

//Define the OBJECT_ATTRIBUTES
oa: OBJECT_ATTRIBUTES := Default(OBJECT_ATTRIBUTES);
oa.Length := sizeof(OBJECT_ATTRIBUTES); //24 bytes
oa.Attributes := OBJ_CASE_INSENSITIVE;
oa.ObjectName := @cs; //UNICODE_STRING

//Open the file (by Object Attributes) and get a file handle
hFile: THandle;
iosb: IO_STATUS_BLOCK;

status: …
Run Code Online (Sandbox Code Playgroud)

delphi winapi

3
推荐指数
1
解决办法
254
查看次数