标签: c++builder

一个好的(和免费的)VCL GUI替代方案

我有一个基于Borland C++ Builder 6构建的相当混乱的VCL代码库的项目.我打算重写它的大部分内容,因为它在当前状态下难以维护.我正在寻找一个好的,免费的VCL替代品.它是一个仅限Windows的闭源商业项目.

所以主要要求是:

  1. 免费用于商业闭源项目
  2. 管理Windows GUI.不需要其他组件(数据库链接和东西)
  3. 可扩展(因此可以根据现有的GUI编写我自己的GUI组件)
  4. 对STL友好.

如果可能,请发布您的建议,有利有弊.

编辑

感谢所有的答案.我决定选择Qt,因为它有一些其他很好的功能,如Qt Linguist翻译套件.

c++ windows user-interface vcl c++builder

3
推荐指数
2
解决办法
6035
查看次数

在Delphi/C++ Builder中安装多个库版本

如何在Delphi或C++ Builder中安装多个版本的库?例如,我可能希望能够使用当前版本的JCL和JVCL开发我们的应用程序的下一个版本,同时仍然能够使用针对该版本测试的任何版本的JCL和JVCL来编译我们的应用程序的发行版本.

使用Boost等库可以轻松使用多个版本的库,因为这些只是我可以放在任何地方的头文件和库/ DLL文件,因此我可以简单地将项目文件指向相应的库目录.然而,由于像JCL和JVCL库试图把自己安装到IDE中,我不知道如何配置不同的项目使用不同的版本,没有它变成一个无法破解.

(我还不完全熟悉Delphi如何管理组件和项目 - 我的大多数经验都是用C++编写的 - 所以这可能是我问题的一部分.)

delphi c++builder configuration-management

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

C++ builder如何与其他RAD IDE叠加?

我对PC进行任何开发已有几年了(我通常都会使用嵌入式软件).

那时我非常精通(Borland,现在是CodeGear)C++ Builder.时间已经过时了,C++ Builder已经变得非常昂贵,并且有其他选择(MSVC工作室,NetBeans,QtCreator,甚至可能是带有正确插件的Eclipse).其他?

我有三件事(没有特别的顺序),易用性,额外的GUI组件和跨平台性.

易于使用 - 我想要一个有用的IDE,而不是阻碍我.好的调试器,重构,跳转到变量声明,用法,那种东西..

GUI组件 - 在使用C++ Builder时,我对开发其他VCL组件的容易程度以及可用的数量(通常是免费的)有多么的印象深刻.因此,如果我想要一个标准的字符串网格,其中单元格也可以包含图片,复选框等,我可能会找到一个,或者自己滚动.

我不确定附加组件的当前状态是什么.其他系统是否有类似http://www.tmssoftware.com/site/的内容

跨平台 - 我个人使用Linux来实现一切,但实际上,我的大多数用户都安装了Windows.因此,跨平台"很高兴","所有其他条件都相同".

现在我必须选择一个解决方案并在接下来的几年里坚持下去.哪一个,考虑到我的观点(成本起作用,但不是成败)?

在此先感谢您的帮助.

c++ netbeans c++builder rad

3
推荐指数
2
解决办法
2642
查看次数

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

支持简历的Indy Http Server

我写了一个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)

delphi tcp indy c++builder httpserver

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

正确的方法来更改VCL组件的内容

我经常在制作VCL程序时遇到这样的情况:

  • 我在表单上有许多组件,允许用户操作.最常见的是一堆编辑框.
  • 当用户手动输入内容时,需要通过OnChange事件验证这些编辑框的内容.
  • 在表单的其他地方,有一些组件可供用户点击以获取一些默认值加载到编辑框中(在TEdit :: Text中).

现在我想要的是,每当用户在TEdit :: Text中输入内容时,OnChange事件必须处理用户输入.但是当我的程序将TEdit :: Text设置为默认值时,这不是必需的,因为我知道该值是正确的.

不幸的是,编写代码myedit->Text = "Default";会触发OnChange事件.

我倾向于用我认为相当丑陋的方法解决这个问题:通过创建一个bool变量is_user_inputTEdit::OnChange检查.如果是,则TEdit :: Text将被验证,否则将被忽略.但是,当然,这并不妨碍程序TEdit::OnChange在不必要时启动.

是否有更好或更清洁的方法来实现这一目标?

有没有办法让OnChange检查谁叫它?或者我想,一种暂时禁用OnChange事件的方法会更好.TEdit::Enabled似乎不会影响是否OnChange被触发.

c++ vcl c++builder

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

delphi到C++构建器的转换

我在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

delphi c++builder binary-operators boolean-operations

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

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

AnsiString是Embarcadero C++ Builder中类型字符串的默认值?

我继承了一个旧的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)的文档中被重新描述,所以......

c++ c++builder unicode-string ansistring

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

为什么STL算法的指针要比std :: vector迭代器快得多?

为什么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++ pointers vector c++builder

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