标签: c++builder

如何在Borland C++中禁用主窗体的关闭

When closing an application on close button (FormClose handler is called), 
there is a dialog if user is sure that he wants to close the application. 
If the result of the dialog is mrCancel, then I try to set the ModalResult
of a main form to mrNone like I do with other forms, but even though, the 
application still closes.

What is the solution?

Cheers.

vcl c++builder

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

C++模板可以很好地与VCL类一起使用吗?

我正在尝试使用C++模板'mixins'来创建一些具有共享附加功能的新VCL组件.例...

template <class T> class Mixin : public T
{
private:
  typedef T inherited;

// ...additional methods

public:
  Mixin(TComponent *owner) : inherited(owner)
  {
  // .. do stuff here
  };
};
Run Code Online (Sandbox Code Playgroud)

像这样使用:

class MyLabel : public Mixin<TLabel>
{
  ....
}

class MyEdit : public Mixin<TEdit>
{
  ....
}
Run Code Online (Sandbox Code Playgroud)

现在,一切编译都很好,mixin的东西似乎工作 - 直到我尝试使用TStream-> WriteComponent将组件保存到流中,其中继承的属性(例如TLabel.Width/Height/etc.)不会被写入.即使使用如上所示的'null'mixin也是如此.

直接从TForm,TEdit等派生类时,我的代码工作正常 - 并且该类已正确地注册到流系统.

delphi templates vcl c++builder

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

在Codegear 2009 IDE中设置命令行构建的构建配置

这是一个后续问题.是否可以在Codegear 2009中为命令行构建设置构建配置?

例如:

msbuild /property:BuildConfiguration=Release workspaceX.groupproj
Run Code Online (Sandbox Code Playgroud)

c++builder

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

是否有一个混合了Listbox和树视图的C++ Builder组件?

我需要用列显示一些分层数据.
所以一种混合了树视图列表框.

我看一下标准组件和JCL/JVCL,但没什么相似之处.任何的想法 ?

编辑

我正在使用RADStudio XE,因此该组件应该是最新的!

delphi treeview c++builder uicomponents

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

Firebird TIBQuery插入返回... INTO

我有一个带有Generator的firebird 2.x数据库和一个生成关键字段的触发器.我需要从下面的查询中获取返回的值.

INSERT INTO XXXX (vdate,description) values ('"+ VDate +"','"+ Description +"') returning vno INTO :ParamVoucherNo
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码的几个版本,但它不会破坏我得到

动态sql错误sql错误代码= -104

是否真的可以使用TIBQuery在delphi中获取返回值?

Query1->SQL->Clear();
Query1->SQL->Add("INSERT INTO XXXX (vodate,description) values ('"+ VDate +"','"+ Description +"') returning vno INTO :ParamVoucherNo");

Query1->Params->ParamByName("ParamVoucherno")->ParamType = ptResult;
Query1->Params->ParamByName("ParamVoucherno")->DataType = ftInteger;
Query1->Params->ParamByName("ParamVoucherno")->Value = "";
Query1->Prepare();
Query1->ExecSQL();
Run Code Online (Sandbox Code Playgroud)

有什么建议?

delphi firebird c++builder

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

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
查看次数

如何使用Indy10 TIdUDPClient接收广播数据包?

我正在连接到一个发送UDP数据包的系统,作为响应(发送到特定IP地址)和广播(根据WireShark,目标255.255.255.255)

我可以正确接收'直接'数据包,但我无法弄清楚如何获得广播数据包.我假设我需要第二个具有不同绑定的TIdUDPClient,但我无法让它工作.

TIdUDPClient *reader(new TIdUDPClient(NULL));
TIdUDPClient *broadcastReader(new TIdUDPClient(NULL));

reader->Port = 2000;
reader->Host = "192.168.0.1";
reader->Connect();

broadcastReader->Port = 2000;
// broadcastReader->Host = "0.0.0.0"; // This doesn't work, but is here as an example
broadcastReader->BroadcastEnabled = true;
broadcastReader->Connect();
Run Code Online (Sandbox Code Playgroud)

然后,我有其他几乎相同的线程调用reader/broadcastReader->ReceiveBuffer().在reader一个工作正常,但broadcastReader->receiveBuffer()不会返回......

为C++代码和Delphi标签道歉;-)

delphi udp c++builder indy10

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

简化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
查看次数

我无法在RAD Studio C++ Builder XE中构建静态可执行文件

我需要使用链接的静态库构建我的C++ Builder XE项目,这样我就可以在Project的Debug\Win32目录中获得一个大的可执行文件,但我不能.

每次我尝试构建我的项目时,它都不会使用运行时库构建可执行文件,而我已将Project的选项设置为禁用"使用动态RTL链接"并启用"使用运行时包构建",如下所示:

在此输入图像描述 在此输入图像描述

这里出了什么问题?任何的想法?

非常感谢提前.

c++ dll c++builder bpl static-linking

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

在C++ Builder中使用OpenSSL

我正在C++ Builder 10 Seattle中编译应用程序,并尝试使用OpenSSL进行RSA工作.

我按照本教程:

如何使用OpenSSL在C/C++中生成RSA密钥

这是代码:

#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>

bool generate_key()
{
    int             ret = 0;
    RSA             *r = NULL;
    BIGNUM          *bne = NULL;
    BIO             *bp_public = NULL, *bp_private = NULL;

    int             bits = 2048;
    unsigned long   e = RSA_F4;

    // 1. generate rsa key
    bne = BN_new();
    ret = BN_set_word(bne,e);
    if(ret != 1){
        goto free_all;
    }

    r = RSA_new();
    ret = RSA_generate_key_ex(r, bits, bne, NULL);
    if(ret != 1){
        goto free_all;
    }

    // 2. save public …
Run Code Online (Sandbox Code Playgroud)

openssl rsa c++builder c++builder-10-seattle

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