我有一个基于Borland C++ Builder 6构建的相当混乱的VCL代码库的项目.我打算重写它的大部分内容,因为它在当前状态下难以维护.我正在寻找一个好的,免费的VCL替代品.它是一个仅限Windows的闭源商业项目.
所以主要要求是:
如果可能,请发布您的建议,有利有弊.
感谢所有的答案.我决定选择Qt,因为它有一些其他很好的功能,如Qt Linguist翻译套件.
如何在Delphi或C++ Builder中安装多个版本的库?例如,我可能希望能够使用当前版本的JCL和JVCL开发我们的应用程序的下一个版本,同时仍然能够使用针对该版本测试的任何版本的JCL和JVCL来编译我们的应用程序的发行版本.
使用Boost等库可以轻松使用多个版本的库,因为这些只是我可以放在任何地方的头文件和库/ DLL文件,因此我可以简单地将项目文件指向相应的库目录.然而,由于像JCL和JVCL库试图把自己安装到IDE中,我不知道如何配置不同的项目使用不同的版本,没有它变成一个无法破解.
(我还不完全熟悉Delphi如何管理组件和项目 - 我的大多数经验都是用C++编写的 - 所以这可能是我问题的一部分.)
我对PC进行任何开发已有几年了(我通常都会使用嵌入式软件).
那时我非常精通(Borland,现在是CodeGear)C++ Builder.时间已经过时了,C++ Builder已经变得非常昂贵,并且有其他选择(MSVC工作室,NetBeans,QtCreator,甚至可能是带有正确插件的Eclipse).其他?
我有三件事(没有特别的顺序),易用性,额外的GUI组件和跨平台性.
易于使用 - 我想要一个有用的IDE,而不是阻碍我.好的调试器,重构,跳转到变量声明,用法,那种东西..
GUI组件 - 在使用C++ Builder时,我对开发其他VCL组件的容易程度以及可用的数量(通常是免费的)有多么的印象深刻.因此,如果我想要一个标准的字符串网格,其中单元格也可以包含图片,复选框等,我可能会找到一个,或者自己滚动.
我不确定附加组件的当前状态是什么.其他系统是否有类似http://www.tmssoftware.com/site/的内容 ?
跨平台 - 我个人使用Linux来实现一切,但实际上,我的大多数用户都安装了Windows.因此,跨平台"很高兴","所有其他条件都相同".
现在我必须选择一个解决方案并在接下来的几年里坚持下去.哪一个,考虑到我的观点(成本起作用,但不是成败)?
在此先感谢您的帮助.
当TWebBrowser控制太小时会变得灰暗.
如果TWebBrowser控件对齐alClient并且表单上没有其他控件,我可以使它非常小(例如50x10).然而,当我添加其他控件,如面板,工具栏,主菜单等等都浮在顶部(alTop) - 我添加的控件越多,TWebBrowser我可以得到更小的窗口而不会变灰.当窗口调整大小变大时,它会再次变为未分组.
在这个例子中,我放置TToolBar了2个按钮对齐alTop,并TWebBrowser对齐alClient.如果我使工具栏不可见,我可以使网页浏览器非常小.但是,在工具栏可见的情况下,它会变灰.我添加的控件越多,它在变灰之前似乎拥有越来越少的可用空间.

正如您在上一个示例中所看到的,Web浏览器甚至比第二个示例中的更小,但仍然可见,除了顶部没有工具栏外,一切都是相同的.如果在Windows 7或8或Internet Explorer 10或11上使用,则同样适用.
这里的例子只是例子.将100x100控制作为最小尺寸我没有问题.问题是,当我放置相当多的控件时,它不允许我控制比550x250更小的控制,这是非常大的.
任何人都可以告诉我为什么其他控件对Web浏览器不能使用较小的大小,当它在表单上没有其他控件时可以完美地完成这一操作?
我写了一个indy http服务器,我想用简历支持服务文件下载.当我使用IDM下载文件时,下载是单线程的:

请注意," 恢复"功能为"是",但是当我暂停并恢复下载时,它将从表单开始.
我的Indy Http服务器如下:
void __fastcall TfrmMain::httpServerCommandGet(TIdContext *AContext,
TIdHTTPRequestInfo *ARequestInfo, TIdHTTPResponseInfo *AResponseInfo)
{
Beep(1000, 100);
string fileName = ExtractFileDir(Application->ExeName) + ARequestInfo->Document;
fileName = fileName.replace("/", "\\");
TFileStream *stream = new TFileStream(fileName, fmOpenRead | fmShareDenyNone);
int start = 0, end = 0;
string range = ARequestInfo->Range;
if(!range.empty())
{
int dash_pos = range.find("-");
start = range.substr(0, dash_pos).intValue();
end = range.substr(dash_pos + 1).intValue();
if(end == 0) // Endless Range: start-
end = stream->Size;
}
else
{
start …Run Code Online (Sandbox Code Playgroud) 我经常在制作VCL程序时遇到这样的情况:
现在我想要的是,每当用户在TEdit :: Text中输入内容时,OnChange事件必须处理用户输入.但是当我的程序将TEdit :: Text设置为默认值时,这不是必需的,因为我知道该值是正确的.
不幸的是,编写代码myedit->Text = "Default";会触发OnChange事件.
我倾向于用我认为相当丑陋的方法解决这个问题:通过创建一个bool变量is_user_input来TEdit::OnChange检查.如果是,则TEdit :: Text将被验证,否则将被忽略.但是,当然,这并不妨碍程序TEdit::OnChange在不必要时启动.
是否有更好或更清洁的方法来实现这一目标?
有没有办法让OnChange检查谁叫它?或者我想,一种暂时禁用OnChange事件的方法会更好.TEdit::Enabled似乎不会影响是否OnChange被触发.
我在Delphi中有源代码我按照http://hscripts.com/tutorials/cpp/bitwise-operators.php为按位运算符在C++ Builder中转换它,但结果是不同的
Delphi中的源代码
procedure TForm1.Button1Click(Sender: TObject)
var
tmp, dynamicINT : integer;
begin
dynamicINT := 42080;
tmp := ((dynamicINT shl 1) or (dynamicINT shr 31) and $7FFFFFFF);
Edit1.Text := IntToHex(tmp, 4);
end;
Run Code Online (Sandbox Code Playgroud)
德尔福结果:148C0正确!
C++ Builder中的源代码
void __fasctall TForm1::Button1Click(TObject *Sender)
{
int tmp = 0;
int dynamicINT = 42080;
tmp = ((dynamicINT << 1) || (dynamicINT >> 31) && 0x7FFFFFFF);
Edit1->Text = IntToHex(tmp, 4);
}
Run Code Online (Sandbox Code Playgroud)
C++ Builder结果:0001???
转换有什么问题?
我正在使用C++ Builder 6和Delphi 7
经过Google搜索以及我的头脑旋转和一堆误导性和矛盾的信息之后,我设法为应用程序清单编译了以下最小"模板",它应该定义以下内容:
我的清单文件是否足以满足上述目的,我是否有任何错误,我应该注意这些错误?我特别对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) 我继承了一个旧的Borland C++ Builder应用程序,现在我必须迁移到一个新的开发工具.建议的方法是使用Embarcadero C++ Builder,从我最初的测试看,它似乎是一个相当平滑的过渡.
但我有一个问题,我希望有一个简单的解决方案:
该应用程序解析大量的文本文件.这些文件都是基于ANSI的,并且永远不会改变,因此它是ANSI输入和ANSI输出.我string遇到的主要问题是,使用Embarcadero C++,类型现在是一个UnicodeString而不是AnsiString(就像在Borland C++ Builder中一样).
在此应用程序中使用Unicode不是一个选项 - 它使用的文件是ANSI格式的.修改要使用的代码AnsiString(和类似的代码)是可行的,但我不愿意,因为它使用了很多TStringList(和类似的)构造.
所以我的问题是:是否有一个设置或编译器选项或者我可以用来告诉Embarcadero System.AnsiString用作定义string而不是System.UnicodeString?
这可能是一个长镜头,但是RAD Studio XE(我借用它来做一些测试的旧版本)文档说" 默认情况下,类型string现在是一个Unicode字符串",这意味着这可以是改变.然而,这在当前版本(XE8)的文档中被重新描述,所以......
为什么std::nth_element()运行这么快,当它被赋予指针而不是迭代器?我希望std::vector和STL算法相当优化,但是当我将迭代器更改为指针时,我的测量显示执行时间下降了75%.
使用迭代器,以下代码(不包括向量的分配)在1200毫秒内运行:
std::vector<uint16_t> data(/* 50 million values */);
const double alfa = 0.01;
const double beta = 0.95;
std::nth_element(data.begin(), data.begin() + int(data.size() * alfa), data.end());
const uint16_t x = *(data.begin() + int(data.size() * alfa));
std::nth_element(data.begin(), data.begin() + int(data.size() * beta), data.end());
const uint16_t y = *(data.begin() + int(data.size() * beta));
Run Code Online (Sandbox Code Playgroud)
使用指针,以下代码(不包括向量的分配)在350毫秒内运行:
std::vector<uint16_t> data(/* 50 million values */);
const double alfa = 0.01;
const double beta = 0.95;
std::nth_element(&data.front(), &data.front() + int(data.size() * alfa),
&data.front() + data.size()); …Run Code Online (Sandbox Code Playgroud) c++builder ×10
c++ ×5
delphi ×5
vcl ×2
ansistring ×1
httpserver ×1
indy ×1
manifest ×1
netbeans ×1
pointers ×1
rad ×1
tcp ×1
twebbrowser ×1
vector ×1
windows ×1