标签: c++builder

borland c ++ builder如何用包制作exe文件

我不知道如何在没有安装Borland C++ Builder软件的情况下在计算机上运行创建应用程序.

c++builder borland-c++

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

如何防止用户点击时激活表单?

我有一个主窗体和非模态自动完成窗体.当用户点击自动填充表单中的列表时,如何防止用户激活自动填充表单?

因此,基本上我希望自动完成表单在用户单击时接收鼠标单击消息,但永远不会变为活动状态,因为它会导致主窗体中的第三方组件出现问题,而我无法控制.

delphi winapi vcl c++builder

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

在运行时从窗体删除TFrame

我正在使用C ++ Builder创建VCL表单应用程序。现在我有一个包含许多组件的TFrame,看起来像这样...

在此处输入图片说明

我也有一个按钮调用“添加”。基本上,每当我按下表单上的“添加”按钮时,都会向其中添加一个新的TFrame,并在前一个TFrame下方添加一个看起来像表格的东西。为了添加重复项,我必须在创建TFrame之前每次都对其重命名。

    int __fastcall TForm1::AddMapCells(void)
    {
        Num++;
        TFrame1 * MyFrame = new TFrame1(Form1);
        MyFrame->Parent=Form1;
        MyFrame->Name = "TFrame" + IntToStr(Num);
        MyFrame->Top = 23*Num;
        return Num;
    }
Run Code Online (Sandbox Code Playgroud)

因此,TFrame的命名为TFrame1,TFrame2,TFrame3等。

现在的问题是我要制造它,因此每当我按下TFrame的“ X”按钮时,它都会删除该TFrame,并且我不确定该怎么做。我在想,也许每次创建TFrame时,我都可以重命名“ X”按钮,所以它就像Button1,Button2,Button3等。然后删除程序,只需将ButtonX与TFrameX匹配即可识别要删除的TFrame。例如,如果我按下按钮4,它应该与TFrame4匹配并删除TFrame4。

我不知道如何实现这个想法。还是会有更简单的方法来做到这一点?

c++ runtime c++builder tframe

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

通过C++中的合同和单元测试进行设计

我正在尝试将基本的Design by Contract(由宏实现,它使用内置的assert函数)和Google Test单元测试结合在一个应用程序中.

所以,例如,我有以下代码:

AppFavorite* AppFavorites::Add(const UnicodeString& link)
{
    REQUIRE(!link.IsEmpty());

    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我无法在单元测试中进行以下测试,因为IDE在到达断言时中止(REQUIRE(!link.IsEmpty());):

TEST(AppFavoritesTest, AddEmpty)
{
    AppFavorites favorites;
    ASSERT_THROW(favorites.Add(L""), std::invalid_argument);
}
Run Code Online (Sandbox Code Playgroud)

那么,我的问题是我应该:

  1. 永远不要测试合同所涵盖的条件,或
  2. 在单元测试期间以某种方式禁用合同检查?

c++ unit-testing design-by-contract c++builder googletest

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

对于定向广播地址,Winsock bind()与WSAEADDRNOTAVAIL失败

我正在设置一个UDP套接字,并试图绑定应该是一个有效的网络广播地址(192.168.202.255:23456),但bind失败,错误10049 ,WSAEADDRNOTAVAIL . 如果我使用localhost广播地址127.0.0.255,它会成功.

WSAEADDRNOTAVAIL文档说"请求的地址在其上下文中无效.这通常是由于尝试绑定到对本地计算机无效的地址.这也可能是由connect,sendto,WSAConnect,WSAJoinLeaf或者WSASendTo远程地址或端口对远程计算机无效(例如,地址或端口0)." 但我认为这个地址192.168.202.255应该是一个有效的广播地址,因为运行时有以下条目ipconfig:

ipconfig表示本地IP为192.168.202.213

可能是什么问题?

我是Winsock编程的新手,我可能犯了一个基本错误,但我找不到它.我到目前为止的代码是:

m_ulAddress = ParseIPAddress(strAddress);
// Winsock 2.2 is supported in XP
const WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA oWSAData;
const int iError = WSAStartup(wVersionRequested, &oWSAData);
if (iError != 0) {
    PrintLine(L"Error starting the network connection: WSAStartup error " + IntToStr(iError));
} else if (LOBYTE(oWSAData.wVersion) != 2 || HIBYTE(oWSAData.wVersion) != 2) {
    PrintLine(L"Error finding version 2.2 of Winsock; got version " + …
Run Code Online (Sandbox Code Playgroud)

networking udp network-programming c++builder winsock

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

如何在BCB XE中将十六进制字符串编码为整数

我想在RAD Studio C++ Builder XE中将十六进制字符串转换为16位十进制.

例如,我有十六进制字符串"8FC".二进制表示为100011111100.这个的十进制表示为:2300.

如何在C++ Builder XE中进行此转换?

c++ hex c++builder c++builder-xe

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

警告C4238:使用非标准扩展:用作左值的类rvalue

在这里我的代码

   if(bSelected)
{
    clrTextSave=pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
    clrBkSave=pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
    pDC->FillRect(rcAllLabels,&CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
    pDC->FillRect(rcAllLabels,&CBrush(m_clrTextBk));
Run Code Online (Sandbox Code Playgroud)

当我在Visual Studio 2008上编辑它给我:警告C4238:使用非标准扩展:用作左值的类右值我不知道如何修复此警告?Plz有人帮忙吗?谢谢 !

c++ c++builder visual-studio-2008 visual-c++

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

使用C++ Builder/Firemonkey中的表单创建来管理内存

到目前为止,在我的应用程序中,它已经确定在运行时创建的所有其他表单应该是模态的.因此,在创建新表单时,我使用类似以下代码块的东西:

void __fastcall ShowForm( TComponent * Owner )
{
    TForm1 * form = new TForm1( Owner );
    form->ShowModal();

    delete form;
}
Run Code Online (Sandbox Code Playgroud)

使用这种方法,表单的内存在用户关闭后很容易删除.

但是,在尝试弄清楚如何处理非模态对话框的内存管理时,我遇到了一个问题.显然,我不能简单地在ShowForm方法结束时调用delete,因为表单会在创建后立即删除.所以我留下这样的东西:

void __fastcall ShowForm( TComponent * Owner )
{
    TForm1 * form = new TForm1( Owner );
    form->Show();
}
Run Code Online (Sandbox Code Playgroud)

基于此文档和我编写的测试应用程序,我知道form指针将在其所有者关闭后被删除.但是,这仍然让我有以下情况:

假设我有FormA一个按钮,它创建并显示FormB使用代码的实例,就像上面的方法一样.我现在单击按钮创建一个FormB然后关闭FormB,三次.直到FormA关闭,三个实例FormB仍留在内存中.

如何管理表单创建的内存,以便在表单关闭后删除为表单分配的内存?是否有标准的最佳实践,或者我缺少的内置功能?

c++ forms c++builder firemonkey c++builder-xe8

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

如何使用Synchronize()?

手册说Synchronize是TThread的成员.但是,它表明您可以直接调用Synchronize.其他消息来源也是如此.

//Synchronize() performs actions contained in a routine as if they were executed from the main VCL thread    

void __fastcall TCriticalThread::Execute()
{
   ...
   Synchronize(UpdateCaption);
   ...
}
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,我的编译器告诉我"E2268调用未定义的函数'同步'".当然我包括了图书馆:

#include <System.Classes.hpp>
Run Code Online (Sandbox Code Playgroud)

另一方面,编译器找到TThread :: Synchronize,但它不接受MainThreadID作为参数:

TThread::Synchronize(MainThreadID, MainForm->UpdateCaption );
Run Code Online (Sandbox Code Playgroud)

PS:我是C++ Builder的新手.

c++ delphi multithreading c++builder thread-safety

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

RAD Studio 10.2.3 Linux + Win32

我正在寻找一个证明,我可以使用RAD Studio 10.2.3为Windows 32位和Linux构建跨平台应用程序。

我仍然无法确认如何使用FMX实施此操作。

delphi c++builder firemonkey

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