标签: c++builder

在C++ Builder XE2中重命名VCL Form类

在工作中,我们有一个相当大的C++ VCL表单应用程序.它汇编在Embarcadero XE2,但可以追溯到很多年.我需要在这个应用程序中添加一个新表单.

当您执行"文件>添加新> VCL表单"时,将创建一个表单,其中包含类名称TForm1.还创建了一个指针,如下所示:TForm1 *Form1

出于显而易见的原因,我想重命名表单和指针,说TStuffForm*StuffForm.问题是我无法让它工作!

对于那里的任何实际XE2用户:这样做的规范方法是什么?

我已经尝试通过仔细替换字符串直接在代码中重命名,但它不起作用.IDE疯了,并向我发出多个模态弹出窗口抱怨我丢失了TForm1类.这太令人不快了,我放弃了.

我也尝试了IDE中的重构功能,但这也没有用.所以现在我有点卡住了.

c++ ide vcl c++builder c++builder-xe2

4
推荐指数
1
解决办法
1307
查看次数

TRichEdit 暂停/恢复撤销功能

有没有办法在 TRichEdit 控件中暂停/恢复撤消记录?是否有要发送的消息或要设置的模式?

编辑
我已经通过使用 ITextDocument 接口解决了它。看我下面的帖子。

vcl c++builder undo-redo trichedit c++builder-xe5

4
推荐指数
1
解决办法
512
查看次数

C++ 中 .dfm 文件的用途是什么

我在 Unix 中使用过 C++,并且知道 .h 和 .cpp 文件,但我从未使用过 C++ 构建器,现在我有一个包含 .cpp、.h 和 .dfm 文件的项目。那么.dfm 文件的用途是什么以及我们如何使用它?

提前致谢。

c++builder

4
推荐指数
1
解决办法
4928
查看次数

带或不带 & 用于在 C++ 构建器中调用 Synchronize()

我的环境:

操作系统 - Windows7 Pro(32位)

IDE - RadStudio XE2 Update4

我想知道 Synchronize() 函数。

Synchronize() 函数用于线程程序中。关于在 C+ builder 中使用 Synchronize(),示例如下(可以在这里看到)

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(&UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TMyThreadClass::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
Run Code Online (Sandbox Code Playgroud)

我感到困惑的是,在某些旧版本的 C++ builder(例如 bcb6)中,使用了 Synchronize()

// Synchronize(UpdateCaption);
Run Code Online (Sandbox Code Playgroud)

函数名前没有“&”;

同样在此处的 …

c++builder

4
推荐指数
1
解决办法
2996
查看次数

抑制 Cppcheck 中自动绑定事件处理程序的从未使用过的警告

我使用 Cppcheck 1.70 检查 C++-Builder 项目。我收到很多这样的风格警告

[source\DbgRecMain.cpp:452]: (style) The function 'FormResize' is never used.
Run Code Online (Sandbox Code Playgroud)

这些函数是使用的事件处理程序但不是在 C++ 代码中显式使用:它们在加载相应的表单或数据模块后由 VCL 运行时绑定。当然,Cppcheck 不会检查 DFM 文件,这就是为什么它无法检测其中定义的事件和处理程序之间的引用。

我想到的一些选择

  • 添加一些显式引用,但这必须手动维护。
  • 抑制所有此类警告,但这会隐藏真正的死代码。

如何专门抑制这些关于明显未使用的事件处理程序的警告?

static-analysis c++builder cppcheck

4
推荐指数
1
解决办法
6514
查看次数

具有 Fluent 界面的 C++ Builder 模式

我正在尝试使用流畅的界面实现构建器模式,以在 C++ 中构建对象。我希望构建器遵循 CRTP 模式。在 Java 中,我会执行类似于以下代码的操作。我如何在 C++ 中做同样的事情?

下面是一些具有基类和派生类的 java 代码。派生类的构建器继承了基类的构建器..

// Base class
public abstract class BaseClass {

    private final int base_class_variable;

    BaseClass(final Builder <?> builder) {
        this.base_class_variable = builder.base_class_variable;
    }

    public abstract static class Builder <B extends Builder> {

        int base_class_variable;

        public B setBaseClassVariable(final int variable) {
            this.base_class_variable = variable;
            return self();
        }

        protected abstract B self();
    }

}

// Derived class
public final class DerivedClass extends BaseClass {

    private final int derived_class_variable;

    private DerivedClass(final Builder builder) …
Run Code Online (Sandbox Code Playgroud)

c++ fluent builder c++builder c++11

4
推荐指数
1
解决办法
5273
查看次数

与 i7 处理器相比,使用 Windows API CreateWaitableTimer 休眠在 Xeon 上的执行方式不同

我正在开发一个需要持续约 1 毫秒睡眠的程序。睡眠用于生成长度约为 1 毫秒的硬件脉冲。

我正在使用以下代码进行睡眠

void usleep(__int64 usec)
{
  HANDLE timer;
  LARGE_INTEGER ft;
  ft.QuadPart = -(10*usec); // Convert to 100 nanosecond interval, negative value indicates relative time

  timer = CreateWaitableTimer(NULL, TRUE, NULL);
  SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
  WaitForSingleObject(timer, INFINITE);
  CloseHandle(timer);
}
Run Code Online (Sandbox Code Playgroud)

取自这里

当我在 Intel i7 上使用上面的代码(使用 Embarcaderos bcc32 编译器)时,通过 1000 (1ms) 我得到一个睡眠,我使用Poco 的时间戳函数测量到大约 1ms。代码本身在一个线程中执行。

代码如下所示:

    mDebugFile <<  std::setprecision (17) << mPulseEventTime.elapsed()/1000.0 << "\t" << 0 << "\n";
    setHigh(false);
    mDebugFile <<  std::setprecision (17) << mPulseEventTime.elapsed()/1000.0 << …
Run Code Online (Sandbox Code Playgroud)

c++ windows time c++builder

4
推荐指数
1
解决办法
213
查看次数

为什么 C++ Builder 和 Delphi 类名以字母 T 开头?

像类 TObject、TForm、TComponent。

为什么它们以字母“T”开头?

“T”是什么意思?

delphi c++builder

4
推荐指数
1
解决办法
332
查看次数

C++ Builder 12.0 不显示 Android、iOS 或 MacOS 目标平台

这是一个IDE问题。

当我为 C++Builder 选择New -> Multi-Device Application项目时,目标平台仅提供 Windows 32 位和 Windows 64 位编译选项。

C++ Builder 可用平台

但是,当我New -> Multi-Device Application为 Delphi 选择项目时,目标平台的所有其他编译选项都可用,例如 Android 32/64 位、iOS(设备和 Sim)和 MacOS(ARM、64)

Delphi可用平台

在安装过程中,我一开始也选择了所有可用的目标平台。

(在安装RAD Studio 12.0之前,我的电脑上安装了RAD Studio 11.3,我先卸载了11.3,然后安装了较新的12.0版本)

“添加平台”弹出窗口也呈灰色。

图像

操作系统是Windows 11。

知道如何解决这个问题吗?

我尝试卸载整个IDE并重新安装3次,但问题仍然存在。

C:\ProgramData\Embarcadero再次重新启动安装时,我还删除了 Embarcadero 文件夹中的所有内容。

delphi c++builder rad-studio c++builder-12-athens

4
推荐指数
1
解决办法
669
查看次数

在Codegear 2009 IDE中从命令行构建

是否可以从Codegear 2009 IDE自动生成MAKEFILE?或者从命令行构建项目?

makefile c++builder

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