标签: c++builder

如何在Firemonkey中创建"No Activate"表单

在XCode中,通过将这些方法添加到NSView子类可以防止窗口在单击时变为活动状态:

- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
    return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
    return YES; 
}
- (void)mouseDown:(NSEvent )theEvent {
    [[[NSApp]] preventWindowOrdering]; 
}
Run Code Online (Sandbox Code Playgroud)

在Windows平台中,这是通过以下简单代码完成的:

HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(), 
    fmxForm->Caption.c_str());

SetWindowLong(hWnd, GWL_EXSTYLE,
    GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Run Code Online (Sandbox Code Playgroud)

我怎样才能将NSView子类化以防止我的FMX TForm在点击时变为活动状态?

如何在firemonkey中创建" No Activate "表单?

delphi macos c++builder delphi-xe2 firemonkey

147
推荐指数
1
解决办法
7234
查看次数

如何"取消使用"命名空间?

我的开发系统(Codegear C++ Builder)的一个变幻莫测是,一些自动生成的头文件坚持要...

using namespace xyzzy
Run Code Online (Sandbox Code Playgroud)

...中的语句,当我最不想要或期望它时,它会对我的代码产生影响.

有没有办法可以以某种方式取消/覆盖以前的"使用"语句来避免这种情况.

也许...

unusing namespace xyzzy;
Run Code Online (Sandbox Code Playgroud)

c++ namespaces c++builder

77
推荐指数
5
解决办法
4万
查看次数

链接失败[ilink32错误]致命:无法打开文件'TYPES.OBJ'

我一直在使用C++ Builder 2010更新旧的遗留项目构建代码,以便使用C++ Builder 10 Seattle进行编译.我主要不得不改变路径,很多dupIgnoreTDuplicates::dupIgnore,重新导入像一些组件MSXMLMSMQ等.

首先是主要项目以bpl和dll的形式使用的一堆子项目,最后是主项目的代码编译.

但是......它没有链接:P

[ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ'
Run Code Online (Sandbox Code Playgroud)

我试图找到有关潜在问题的信息,许多提及确保在Delphi编译器设置下的单元范围System提供.但这已经存在于这个项目中.还有什么可能导致这个?

有关信息.现在使用"经典"bcc32编译器编译.

包含路径:

$(BDSINCLUDE)\windows\vcl;$(BDSINCLUDE)\dinkumware;

图书馆路径:

$(BDSLIB)\$(PLATFORM)\$(Config);$(BDSLIB)\$(PLATFORM)\Release\psdk;
Run Code Online (Sandbox Code Playgroud)

vcl c++builder c++builder-10-seattle

55
推荐指数
1
解决办法
4586
查看次数

针对Delphi/C++ Builder的停靠库的建议?

我的团队目前正在考虑将现有的基于MDI的应用程序转移到更现代的基于对接的方法.我们仍在思考,但我们想把它转移到VS2010的对接和视觉外观上:

VS2010 UI和对接截图

这具有以下功能:

  • 显示窗口将停靠的混合轮廓
  • 划入标签,并排并排
  • 允许通过拖动和释放显示停靠位置的图像进行对接(我将其称为"停靠小部件")
  • 看起来也不错(主题/ UI方式)

我无法找到与RAD Studio 2010一起使用的高质量对接库,并且正在寻找关于我没有找到的库或者如何使用我发现的库来实现这样的建议的建议.

  • 更新:我最终购买了AutomatedQA的对接库.我认为这是最好的.有关它的部分,请参阅以下详细信息.

  • 更新2,2011年7月:这个问题考察了Delphi/C++ Builder可用的每个对接库,所以我试图让它保持最新.我知道的两个变化:
    • SmartBear现在拥有AutomatedQA,拥有终结的AutomatedQA对接库.这是我建议买的一个.他们正在考虑开源.
    • 我与DevExpress对接的一个问题(这使它不值得购买)是它缺乏对VS2008/10式对接的支持,具有对接小部件,拖动时的透明覆盖等等. 他们现在正在实现它.因此,由于AQDocking不再被出售,如果我现在问这个问题,我接受的答案就是购买DevExpress Docking.

我找到了以下库.这是一个概述:

内置VCL对接

这允许表单停靠在其他表单或TWinControls上,但看起来非常基本.使用XOR绘制的轮廓进行拖动,这在Vista和Win7上非常糟糕.有一个用于标签式停靠表单的TTabDockSet控件,但我无法弄清楚如何控制停靠表单的标题在停靠后呈现的方式.我认为并行实施对接必须手动完成,即时创建新的docksite面板.RAD Studio IDE的对接窗口比这个(例如,拖动表单时的透明矩形)有点光滑,这是奇怪的,因为我认为它使用了VCL对接支持.

JVCL对接

这看起来更像是内置VCL对接的一个不错的解决方案.它支持在任何边缘或客户端上对接,并显示表单将停靠的alphablended矩形.

JVCL对接测试程序

它似乎是非常错误的(允许在第一个表单之上删除第二个表单,但冻结程序)并且没有内置的选项卡式底座支持或任何类型的drop-location小部件.

LMD对接包

这看起来很有希望:虽然它似乎没有直接停靠表格,但它有对接面板和控件/框架.现有表单可以迁移到框架.它还有一个对接小部件和标签式底座支持.

但是,该演示似乎非常不可靠.我已经安装了最新的评估版本,并创建了一个带有停靠站点和多个面板的新项目,并按下Run会导致以下情况:

LMD对接

这在表单组件流中崩溃.目视检查DFM文件没有显示任何错误,但是有一个不透明的二进制blob用于可能导致它的布局信息.在评估版本中,这并不是特别令人鼓舞.

DevExpress ExpressDocking

我对此寄予厚望:我以前从未使用任何DevExpress控件,但他们有良好的声誉.但他们的演示程序确实令人失望:

DevExpress对接

控件很闪亮,即使使用XP风格也不太适合Windows.它确实有标签对接,但它使用XOR-ed轮廓 - 这在XP或Vista上不能很好地工作.它也没有任何类型的对接小部件.坦率地说,看起来自Windows XP时代以来它还没有更新.2011年7月更新: 这项工作正在改进中.

AutomatedQA/SmartBear对接库

到目前为止,这是所有图书馆中最有前途的.

AutomatedQA对接库

我经常使用AQTime,这是一个出色的分析器,似乎是使用自己的对接库编写的,而且效果很好.但是,最新版本的停靠库试用版下载适用于RAD Studio 2009,并且安装到2010年的建议是它不受支持,您应该重新编译源代码.该演示没有源代码,我们没有RS2009,安装程序拒绝安装,除非我们这样做,即使我们管理它安装我们也无法使用它,因为我们需要重新编译不存在的来源.

我一直与他们的支持团队保持联系,他们向我指出了这个主题.我还发现了另一个与客户提出相同问题的主题.我回复并希望听到更好的消息.我并不热衷于建议购买我无法评估的产品,特别是当我们的IDE不支持它时.

  • 更新:我最终购买了这个库.尽管有评估问题(它在D2007中工作,我有一个副本),但似乎最容易使用所有库,也是最强大的 - 例如,为它编写主题很容易.如果你还需要选择一个停靠库,我肯定会推荐它.

  • 2011年7月更新: 此库不再销售,但可能很快就会开源.

我错过了什么?

这就是我到目前为止所发现的一切.现在怎么办?

  • 我是否错过了Delphi/C++ Builder/RAD Studio 2010的任何好的对接库?
  • 我错过了目前为止我看过的图书馆的任何功能吗?答案如"你错过了FooBar"或"JVCL确实有一个对接小部件,你可以像这样使用它......"听起来真是太棒了.
  • 你下一步会推荐什么?

感谢您的输入 :)

delphi dock c++builder dockpanel-suite

47
推荐指数
2
解决办法
7706
查看次数

'无法找到或打开pdb文件'Visual Studio C++ 2013

我刚下载了VS 2013社区版,我编写了我的第一个应用程序.当我运行它时,它显示在输出部分:

'ConsoleApplication1.exe' (Win32): Loaded 'C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe'. Symbols loaded.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\msvcp120d.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\msvcr120d.dll'. Cannot find or open the PDB file.
The program '[11196] ConsoleApplication1.exe' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)

问题是什么?我在许多网站上检查了我的代码,所以我知道问题不在我的代码中.谁能帮我?

c++builder visual-studio visual-studio-2013

47
推荐指数
4
解决办法
19万
查看次数

将大型单片单线程应用程序转换为多线程架构的建议?

我公司的主要产品是大型单片C++应用程序,用于科学数据处理和可视化.它的代码库可以追溯到12年或13年,虽然我们已经将工作投入到升级和维护中(使用STL和Boost - 当我加入大多数容器时都是自定义的,例如 - 完全升级到Unicode和2010 VCL等)还有一个非常重要的问题:它是完全单线程的.鉴于它是一个数据处理和可视化程序,这越来越成为一个障碍.

我既是开发人员下一个版本的项目经理,我们希望解决这个问题,这对于这两个领域来说都是一项艰巨的任务.我正在寻求有关如何解决问题的具体,实用和建筑建议.

程序的数据流可能是这样的:

  • 窗口需要绘制数据
  • 在paint方法中,它将调用GetData方法,通常在一次绘制操作中为数百位数据调用数百次
  • 这将从文件或其他任何需要的计算或读取(通常非常复杂的数据流 - 将此视为流经复杂图形的数据,每个节点执行操作)

即,绘制消息处理程序将在处理完成时阻止,如果数据尚未计算和缓存,则可能需要很长时间.有时这是几分钟.执行冗长处理操作的程序的其他部分也会出现类似的路径 - 程序在整个时间(有时是几小时)内没有响应.

我正在寻求如何改变这一点的建议.实用的想法.也许这样的事情:

  • 设计用于异步请求数据的模式?
  • 存储大量对象,以便线程可以安全地读写?
  • 在某些东西试图读取时处理数据集的失效?
  • 有这种问题的模式和技术吗?
  • 我应该问什么,我没有想到?

自从几年前我的Uni时代以来,我没有做任何多线程编程,我认为我团队的其他成员处于类似的位置.我所知道的是学术上的,而不是实际的,并且远远不足以让人有信心接近这一点.

最终目标是拥有一个完全响应的程序,其中所有计算和数据生成都在其他线程中完成,并且UI始终响应.我们可能无法在一个开发周期中到达那里:)


编辑:我想我应该添加一些关于该应用程序的更多细节:

  • 它是适用于Windows的32位桌面应用程序.每个副本都是许可的.我们计划将其作为桌面本地运行的应用程序
  • 我们使用Embarcadero(以前的Borland)C++ Builder 2010进行开发.这会影响我们可以使用的并行库,因为大多数似乎(?)只为GCC或MSVC编写.幸运的是,他们正在积极开发它,它的C++标准支持比以前好多了.编译器支持这些Boost组件.
  • 它的架构并不像应该的那样干净,而且组件通常耦合得太紧.这是另一个问题:)

编辑#2:感谢您的回复!

  • 令我感到惊讶的是,很多人推荐了一个多进程架构(这是目前最受欢迎的答案),而不是多线程.我的印象是,这是一个非常Unix的程序结构,我对它的设计或工作方式一无所知.Windows上有关于它的可用资源吗?它在Windows上真的很常见吗?
  • 就一些多线程建议的具体方法而言,是否存在异步请求和消费数据,线程软件或异步MVP系统的设计模式,或者如何设计面向任务的系统,或者文章和书籍以及发布后的解构说明工作的东西和不起作用的东西?当然,我们可以自己开发所有这些架构,但是与其他人之前的工作一起工作并知道要避免哪些错误和陷阱是很好的.
  • 任何答案中没有涉及的一个方面是项目管理.我的印象是估计这需要多长时间,并在做一些不确定的事情时保持对项目的良好控制,因为这可能很难.这就是为什么我会在配方或实际编码建议之后,尽可能地引导和限制编码方向.

我还没有为这个问题找到答案 - 这不是因为答案的质量,这很好(而且比你还要好),但仅仅是因为我的范围,我希望得到更多的答案或讨论.谢谢那些已经回复的人!

c++ architecture delphi multithreading c++builder

32
推荐指数
5
解决办法
3914
查看次数

C++ Builder XE7 LME288错误

突然,突然之间,我得到了LME288链接器错误.

[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ilc: 0x00010000 / 0x08000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ild: 0x00010000 / 0x08000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ilf: 0x00010000 / 0x0a000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ils: 0x0003b000 / 0x08000000
[ilink32 Warning] Warning: unknown heap name   : 0x08000000 / 0x08000000
[ilink32 Warning] Warning: Error detected (LME288)
[ilink32 Error] Error: Unable to perform link
Run Code Online (Sandbox Code Playgroud)

我没有安装AV,该项目已经运行了一年多.我试过了:

  • 增量链接器禁用/启用,没有区别......
  • 手动删除/ debug中的所有文件,仍然没有变化......
  • 完全构建,没有区别......
  • 重启电脑,没有变化......

这已经在之前提出过,但没有提出真正的解释或解决方案.

我还能做些什么来解决这个问题?

编辑
我试图重建其他几个运行良好多年的项目,现在我的所有项目都出现了LME288错误.

c++builder linker-errors windows-7-x64 c++builder-xe7

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

C++ Builder或Visual Studio

我拥有一家软件开发公司.我们为其他以其名称/头衔命名的公司开发软件.我们在会计/ ERP市场上也有一些自有品牌的头衔.我们的会计软件大约占我们业务的60%,并使用C++ Builder编写.

那些知道,实现C++ Builder的人在从Borland,CodeGear到Embarcadero的转手方面走的路很艰难,可能还有几次.C++ Builder在我们的会计软件上多次搞砸了我们.众所周知,QuickReports是错误的,他们的XML构建描述并没有与GUI紧密耦合,导致构建不起作用 - 通常是错误的界面.

在过去的8年中,我们已经稳步取消了对VCL和有缺陷的组件的依赖,但是,一些第三方VCL组件仍然不易更换.我们使用Developer Express的GRID包 - 很棒的产品.

我只是处于十字路口并且市场上有最新版本的C++ Builder XE,当你看到这款产品的糟糕历史时,我很难证明价格合理.

因此,我正在寻找可能处于类似情况并成功切换到Visual Studio的其他任何人的建议或步骤.

除了Developer Express工具之外,我们已经将大部分应用程序慢慢移动到wxWidgets.我们编写了自己的TSQL抽象,我们也可以移植.

有什么想法或建议吗?您是否已将项目移至Visual Studio,或者您是否已使用新的Builder XE来发现它之前的许多缺点已经消失?

寻找"去过那里,做过那些"的建议.

c++ c++builder visual-studio

28
推荐指数
5
解决办法
4万
查看次数

在现代C++ Builder应用程序中使用预编译头文件的最佳实践是什么?

我目前正在将一个大型RAD Studio 2010项目迁移到XE4.作为其中的一部分,我正在重新创建许多项目文件.我想借此机会确保我们使用最佳的预编译头文件机制,因为似乎有几种方法可以做到这一点.

现在我们只编译32位,但将来会使用64位编译器.

以下是我们目前在2010年所做的工作,以及为什么我不确定在XE4中要做什么:

在RAD Studio 2010中

我们有一个文件PchApp.h,其中包含<vcl.h>许多其他常用的头文件,主要是项目中各种常用核心类的头文件.此标头包含在每个CPP文件的顶部,后跟#pragma hdrstop如下所示:

// Top of .cpp file
#include "PchApp.h"
#pragma hdrstop

// Normal includes here
#include "other.h"
#include "other2.h"
// etc
Run Code Online (Sandbox Code Playgroud)

然后,我们在项目选项的预编译标题部分中进行以下设置:

当前RS2010预编译头设置

编译起来并不是特别快(大约350,000行代码需要12分钟.)我不确定:

  • "注入预编译头文件":这应该注入PchApp.h吗?
  • "缓存预编译头文件(必须与-H或-H"一起使用"xxx")": - H选项是"PCH文件名",因此我们正在使用它,但是预编译头的确定点是它"缓存"或每次编译预编译一次.这有什么额外的区别?
  • 我们应该在.cpp文件中包含两行包含PchApp.h和pragma hdrstop吗?有没有办法在项目选项中执行此操作,而不是在每个文件中复制这两行?他们有必要吗?

换句话说,我不确定这些是正确的还是最佳的设置,但是从阅读文档中我同样不确定什么会更好.我知道我不太了解所有选项 - 这个问题的一个原因:)

在RAD Studio XE4中

XE4 32位编译器的选项对话框是相同的,但有两件事让我感到困惑和/或让我不确定当前的2010方法是最好的.

1.默认行为

在创建新的VCL Forms项目时,IDE会创建一个默认名为Project1PCH1.h的标头,该标头旨在作为项目的预编译标头. 此标头包含<vcl.h><tchar.h>,并在项目管理器中显示为节点.它不包含在默认的Form1.cpp中,但#include <vcl.h>后面#pragma hdrstop是Form1.cpp的最顶层,后跟其他标题.

使用此标题的新项目的默认XE4设置对话框是: XE4默认预编译头设置

我(天真地?)正在假设默认值实际上是最佳/最佳设置.有些事情困扰我:

  • Project1PCH1.h在任何地方的预编译头设置中都没有提到项目的假定预编译头.
  • 标头不会被缓存
  • 未指定PCH文件名(这应该是Project1PCH1.h?)
  • .cpp文件也不包括Project1PCH1.h …

c++builder precompiled-headers c++builder-xe4

23
推荐指数
1
解决办法
1451
查看次数

在第二台显示器上启动程序?

有没有办法在Delphi或C++ Builder中指定应用程序出现在哪个监视器上?

我正在为一个客户开发一个简单的程序,它在一个二级监视器上显示厨房订单,由一个酒店系统生成.目前,他们需要在启动后手动将窗口拖动到第二个监视器上.

delphi multiple-monitors c++builder point-of-sale

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