我不知道如何在没有安装Borland C++ Builder软件的情况下在计算机上运行创建应用程序.
我有一个主窗体和非模态自动完成窗体.当用户点击自动填充表单中的列表时,如何防止用户激活自动填充表单?
因此,基本上我希望自动完成表单在用户单击时接收鼠标单击消息,但永远不会变为活动状态,因为它会导致主窗体中的第三方组件出现问题,而我无法控制.
我正在使用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。
我不知道如何实现这个想法。还是会有更简单的方法来做到这一点?
我正在尝试将基本的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)
那么,我的问题是我应该:
我正在设置一个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:

可能是什么问题?
我是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) 我想在RAD Studio C++ Builder XE中将十六进制字符串转换为16位十进制.
例如,我有十六进制字符串"8FC".二进制表示为100011111100.这个的十进制表示为:2300.
如何在C++ Builder XE中进行此转换?
在这里我的代码
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有人帮忙吗?谢谢 !
到目前为止,在我的应用程序中,它已经确定在运行时创建的所有其他表单应该是模态的.因此,在创建新表单时,我使用类似以下代码块的东西:
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仍留在内存中.
如何管理表单创建的内存,以便在表单关闭后删除为表单分配的内存?是否有标准的最佳实践,或者我缺少的内置功能?
手册说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的新手.
我正在寻找一个证明,我可以使用RAD Studio 10.2.3为Windows 32位和Linux构建跨平台应用程序。
我仍然无法确认如何使用FMX实施此操作。
c++builder ×10
c++ ×6
delphi ×3
firemonkey ×2
borland-c++ ×1
forms ×1
googletest ×1
hex ×1
networking ×1
runtime ×1
tframe ×1
udp ×1
unit-testing ×1
vcl ×1
visual-c++ ×1
winapi ×1
winsock ×1