小编Cod*_*345的帖子

在VirtualTreeView中更改拖动光标

默认情况下使用VirtualTreeView拖动操作时[doCopy,doMove].移动操作由带有小方框的箭头指针指示,复制操作由相同的指针图标指示,但旁边添加了[+].

默认情况下,VT使用复制操作,如果按下修改键(SHIFT键),则会修改操作以移动,从而从指针中删除[+].

这就是我需要的:

  • 反转操作(默认是移动,按下修改键 - 复制),因此反向指针箭头
  • 替换修饰键 - CTRL而不是SHIFT
  • 读取两个操作中的哪个操作发生并开始复制或移动操作

任何指向正确方向的指标都值得赞赏.

delphi c++builder virtualtreeview

4
推荐指数
1
解决办法
912
查看次数

如何使标准操作(如TEditCopy)识别其他控件(如TEmbeddedWB)?

我一般用的功能在线北京 TEditCut,TEditCopy,TEditPaste并且TEditSelectAll除了他们不不属于标准的任何控制工作.

例如,它们可以正常工作TEditTMemo控制,但不能正常工作TEmbeddedWB- 使用它,无论是否选择了文本,标准操作总是被禁用,即使TEmbeddedWB有类似CopyToClipboard和的方法SelectAll.

如何使标准操作起作用TEmbeddedWB?标准操作如何确定是应该启用还是禁用它们(以及它们在什么情况下执行它 - 是否在OnUpdate事件中)?我是否可以扩展标准操作以添加对无法识别的组件的支持,还是需要编写替换组件?

delphi action c++builder webbrowser-control twebbrowser

4
推荐指数
1
解决办法
293
查看次数

使用 SafeNet Thales 令牌上的 EV 代码签名证书进行签名时避免出现重复的密码提示

我有一个带有 EV 代码签名证书的 Thales SafeNet 令牌。

signtool要签署我在命令行中使用的可执行文件:

signtool sign /tr "http://timestamp.digicert.com" /td sha256 /fd sha256 /as /n "CERTIFICATE NAME ON TOKEN" /v "D:\path\to\file.exe"

这个过程有效。对文件进行签名后,将弹出SafeNet 身份验证客户端密码提示,并且文件已成功签名。

但是,当在批处理循环中使用上述命令行对每个文件进行签名时,每次都会出现密码弹出窗口。

有没有办法在会话中只询问一次(或者将其作为命令行参数放入批处理文件中signtool- 我可以使用变量在批处理文件本身中提示密码SET)?

(密码)参数仅在从文件(参数)/p签名时才有效,因此这不适用于令牌。.PFX/f

code-signing code-signing-certificate safenet

4
推荐指数
1
解决办法
1391
查看次数

使用 TMS 组件包升级 Indy10 (C++ Builder)

到目前为止,我一直在使用 Indy 10,没有出现任何问题,但最近在安装 TMS 组件包时出现问题后,我正在寻找升级 Indy 的替代方法。TMS 在带有 CB2010 的干净系统上安装良好,但是当我使用以下过程升级 Indy 时,在启动 IDE 时以及 TMS 安装后立即出现错误 - 错误为:The procedure entry point @Idhttp@TidCustomHTTP@GetRequestHeaders$qqrv could not be located in the dynamic link library IndyProtocols140.bpl。显然我这边有一些问题,因为 TMS 确实是在干净安装时安装的,而没有 Indy 升级。

因此,如果我用较新的版本覆盖 Indy 文件,也许它可以正确安装。

以下是我现在使用的 Indy 升级的安装过程(在 TMS 安装之前一直有效):

  1. 启动IDE并删除Indy10 Protocols Design TimeIndy10 Core Design Time打包

  2. 运行此脚本来删除旧的 Indy 文件:

    del /q "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\Indy10\*.*"
    del /q "c:\Program Files\Embarcadero\RAD Studio\7.0\lib\debug\Indy10\*.*"
    del /q "c:\Program Files\Embarcadero\RAD Studio\7.0\include\Indy10\*.*"
    del /q /s "c:\Program Files\Embarcadero\RAD …
    Run Code Online (Sandbox Code Playgroud)

installation c++builder tms indy10

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

VirtualTreeView在C++ Builder中为UnicodeString完成

我在C++ Builder中使用VirtualTreeView并使用它的结构如下:

struct TVTNodeData
   {
   int Index;
   UnicodeString Caption;
   }
Run Code Online (Sandbox Code Playgroud)

我使用具有以下内容的循环预填充树的节点:

TVirtualNode *Node = VTree->AddChild(NULL);
pNode = (TVTNodeData *)VTree->GetNodeData(Node);
pNode->Index = 1;
pNode->Caption = "Whatever";
Run Code Online (Sandbox Code Playgroud)

我注意到应用程序的内存不断增加(内存泄漏),即使我清除树并重新加载它.此页面 - http://www.remkoweijnen.nl/blog/2010/06/09/memory-leaks-when-using-virtual-treeview-component/建议在OnFreeNode事件中执行Finalize().目前很好.

但是C++中没有Finalize().我pNode->Caption=""OnFreeNode事件中尝试过并且内存不再被大量分配,但它仍然有点.我认为即使它被清空也可能会引用UnicodeString(引用计数> 0).

如何OnFreeNode在C++中为UnicodeString 释放节点数据?我知道UnicodeString是在所有引用计数为零之前分配的 - 那么如何强制引用计数变为零?

另外,如果节点被分配了OnNodeInit- 在OnFreeNode事件中同样适用吗?

如果TVTNodeData结构纯粹是虚拟的 - 节点永远不可见也不会使用AddChild和OnNodeInit初始化,那么需要Finalize,结构是否甚至存在于内存中呢?

更新:我后来发现我正在错误地测量内存使用情况,而对于将字符串设置为空字符串的字符串来说,它确实足以清除内存数据.但是 - 正如Rob Kennedy在下面的回答中所建议的那样,调用struct~destructor甚至比Finalize更好,并且更容易,因为它清除了整个结构(如果你有更多的字符串).

c++ delphi memory-leaks c++builder virtualtreeview

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

何时在OnNewText事件后重绘VirtualTreeView?

我使用此代码来填充VirtualStringTree并允许重命名项目:

//---------------------------------------------------------------------------
// Structure for the tree
//---------------------------------------------------------------------------
struct TVSTdata
{
UnicodeString Name;
};
//---------------------------------------------------------------------------
// Initialization of the tree
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
VirtualStringTree1->NodeDataSize = sizeof(TVSTdata);
// Fill all nodes with initial data
InitializeTree();
}
//---------------------------------------------------------------------------
// Fill all nodes with data and assign FocusedNode
//---------------------------------------------------------------------------
void TForm1::InitializeTree()
{
TVirtualNode* pNode;
TVirtualNode* pActiveNode;
TVSTdata*     pData;

VirtualStringTree1->BeginUpdate();
VirtualStringTree1->Clear();

pNode = VirtualStringTree1->AddChild(NULL); pData = static_cast<TVSTdata*>(VirtualStringTree1->GetNodeData(pNode)); pData->Name = "This is name 1";
pNode = VirtualStringTree1->AddChild(NULL); pData = static_cast<TVSTdata*>(VirtualStringTree1->GetNodeData(pNode)); pData->Name …
Run Code Online (Sandbox Code Playgroud)

delphi c++builder virtualtreeview tvirtualstringtree

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

简化VCL线程包装器代码

我正在使用线程包装器,它检查是否从主线程调用更新VCL(也有一些参数)的函数,然后在主线程的上下文中执行.

它有效,但我想让它变得更简单.问题是我必须在需要VCL同步的每个函数中重复此代码,这很容易出错.有没有办法让这个包装器更简单,更可重用?请注意,此特定包装器仅使用一个参数,但可以有任意数量的参数复制TLocalArgs并传递.

当前代码:

boost::scoped_ptr<TIdThreadComponent> WorkerThread;

...

void TForm1::SetMemoMessage(UnicodeString Msg)
{
// Check which thread called function, main thread or worker thread
if (GetCurrentThreadId() != System::MainThreadID)
    {
    struct TLocalArgs
        {
        TForm1 *Form;
        UnicodeString Msg;
        void __fastcall SetMemoMessage() // Same name as main function to make it easier to maintain
            {
            // We are in main thread now, safe to call message update directly
            Form->SetMemoMessage(Msg);
            }
        };

    // We are in worker thread, wrap into Synchronize
    TLocalArgs Args = { …
Run Code Online (Sandbox Code Playgroud)

multithreading vcl synchronization c++builder

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

TWebBrowser(TEmbeddedWB)控件中的拼写检查程序

Internet Explorer 10内置了拼写检查功能,工作正常.我尝试创建一个小的HTML页面,用以下内容对其进行测试:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=en xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><HEAD>
<META name=GENERATOR content="MSHTML 10.00.9200.16721"></HEAD>
<BODY spellcheck=true contentEditable=true style="MARGIN: 0.5em">
<P>Theze ara mispeled wordz</P>
</BODY></HTML>
Run Code Online (Sandbox Code Playgroud)

所需要的只是放置属性spellcheck=truecontentEditable=true.

我也试过添加<meta http-equiv="X-UA-Compatible" content="IE=10" />例如

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=en xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><HEAD>
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<META name=GENERATOR content="MSHTML 10.00.9200.16721"></HEAD>
<BODY spellcheck=true contentEditable=true style="MARGIN: 0.5em">
<P>Theze ara mispeled wordz</P>
</BODY></HTML>
Run Code Online (Sandbox Code Playgroud)

就此而言,使用IE = edge而不是IE = 10没有任何区别: <meta http-equiv ="X-UA-Compatible"content …

delphi spell-checking c++builder webbrowser-control twebbrowser

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

Greyed TWebBrowser控件

TWebBrowser控制太小时会变得灰暗.

如果TWebBrowser控件对齐alClient并且表单上没有其他控件,我可以使它非常小(例如50x10).然而,当我添加其他控件,如面板,工具栏,主菜单等等都浮在顶部(alTop) - 我添加的控件越多,TWebBrowser我可以得到更小的窗口而不会变灰.当窗口调整大小变大时,它会再次变为未分组.

在这个例子中,我放置TToolBar了2个按钮对齐alTop,并TWebBrowser对齐alClient.如果我使工具栏不可见,我可以使网页浏览器非常小.但是,在工具栏可见的情况下,它会变灰.我添加的控件越多,它在变灰之前似乎拥有越来越少的可用空间.

Web浏览器变灰了

正如您在上一个示例中所看到的,Web浏览器甚至比第二个示例中的更小,但仍然可见,除了顶部没有工具栏外,一切都是相同的.如果在Windows 7或8或Internet Explorer 10或11上使用,则同样适用.

这里的例子只是例子.将100x100控制作为最小尺寸我没有问题.问题是,当我放置相当多的控件时,它不允许我控制比550x250更小的控制,这是非常大的.

任何人都可以告诉我为什么其他控件对Web浏览器不能使用较小的大小,当它在表单上没有其他控件时可以完美地完成这一操作?

delphi c++builder webbrowser-control twebbrowser

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

C++ Builder/Delphi 2010应用程序清单模板

经过Google搜索以及我的头脑旋转和一堆误导性和矛盾的信息之后,我设法为应用程序清单编译了以下最小"模板",它应该定义以下内容:

  • 程序版本和名称
  • 它不需要任何特殊的管理员权限
  • 它与Windows Vista兼容到Windows 8.1
  • 这是DPI意识到的

我的清单文件是否足以满足上述目的,我是否有任何错误,我应该注意这些错误?我特别对xmlns命名空间版本感到困惑,以及为什么它们对于这个清单的部分不同?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

    <assemblyIdentity type="win32"
                      name="Manufacturer.Division.ApplicationName"
                      version="1.2.3.4"
                      processorArchitecture="x86"
    />

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false" />
            </requestedPrivileges>
        </security>
    </trustInfo>

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>  <!-- The application supports Windows Vista and Windows Server 2008  -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>  <!-- The application supports Windows 7 and Windows Server 2008 R2   -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>  <!-- The application supports Windows 8 and Windows Server 2012      -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>  <!-- The …
Run Code Online (Sandbox Code Playgroud)

delphi c++builder manifest

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