在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 "表单?
我的开发系统(Codegear C++ Builder)的一个变幻莫测是,一些自动生成的头文件坚持要...
using namespace xyzzy
Run Code Online (Sandbox Code Playgroud)
...中的语句,当我最不想要或期望它时,它会对我的代码产生影响.
有没有办法可以以某种方式取消/覆盖以前的"使用"语句来避免这种情况.
也许...
unusing namespace xyzzy;
Run Code Online (Sandbox Code Playgroud) 我一直在使用C++ Builder 2010更新旧的遗留项目构建代码,以便使用C++ Builder 10 Seattle进行编译.我主要不得不改变路径,很多dupIgnore来TDuplicates::dupIgnore,重新导入像一些组件MSXML和MSMQ等.
首先是主要项目以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) 我的团队目前正在考虑将现有的基于MDI的应用程序转移到更现代的基于对接的方法.我们仍在思考,但我们想把它转移到VS2010的对接和视觉外观上:

这具有以下功能:
我无法找到与RAD Studio 2010一起使用的高质量对接库,并且正在寻找关于我没有找到的库或者如何使用我发现的库来实现这样的建议的建议.
我找到了以下库.这是一个概述:
这允许表单停靠在其他表单或TWinControls上,但看起来非常基本.使用XOR绘制的轮廓进行拖动,这在Vista和Win7上非常糟糕.有一个用于标签式停靠表单的TTabDockSet控件,但我无法弄清楚如何控制停靠表单的标题在停靠后呈现的方式.我认为并行实施对接必须手动完成,即时创建新的docksite面板.RAD Studio IDE的对接窗口比这个(例如,拖动表单时的透明矩形)有点光滑,这是奇怪的,因为我认为它使用了VCL对接支持.
这看起来更像是内置VCL对接的一个不错的解决方案.它支持在任何边缘或客户端上对接,并显示表单将停靠的alphablended矩形.

它似乎是非常错误的(允许在第一个表单之上删除第二个表单,但冻结程序)并且没有内置的选项卡式底座支持或任何类型的drop-location小部件.
这看起来很有希望:虽然它似乎没有直接停靠表格,但它有对接面板和控件/框架.现有表单可以迁移到框架.它还有一个对接小部件和标签式底座支持.
但是,该演示似乎非常不可靠.我已经安装了最新的评估版本,并创建了一个带有停靠站点和多个面板的新项目,并按下Run会导致以下情况:

这在表单组件流中崩溃.目视检查DFM文件没有显示任何错误,但是有一个不透明的二进制blob用于可能导致它的布局信息.在评估版本中,这并不是特别令人鼓舞.
我对此寄予厚望:我以前从未使用任何DevExpress控件,但他们有良好的声誉.但他们的演示程序确实令人失望:

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

我经常使用AQTime,这是一个出色的分析器,似乎是使用自己的对接库编写的,而且效果很好.但是,最新版本的停靠库试用版下载适用于RAD Studio 2009,并且安装到2010年的建议是它不受支持,您应该重新编译源代码.该演示没有源代码,我们没有RS2009,安装程序拒绝安装,除非我们这样做,即使我们管理它安装我们也无法使用它,因为我们需要重新编译不存在的来源.
我一直与他们的支持团队保持联系,他们向我指出了这个主题.我还发现了另一个与客户提出相同问题的主题.我回复并希望听到更好的消息.我并不热衷于建议购买我无法评估的产品,特别是当我们的IDE不支持它时.
更新:我最终购买了这个库.尽管有评估问题(它在D2007中工作,我有一个副本),但似乎最容易使用所有库,也是最强大的 - 例如,为它编写主题很容易.如果你还需要选择一个停靠库,我肯定会推荐它.
2011年7月更新: 此库不再销售,但可能很快就会开源.
这就是我到目前为止所发现的一切.现在怎么办?
感谢您的输入 :)
我刚下载了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++应用程序,用于科学数据处理和可视化.它的代码库可以追溯到12年或13年,虽然我们已经将工作投入到升级和维护中(使用STL和Boost - 当我加入大多数容器时都是自定义的,例如 - 完全升级到Unicode和2010 VCL等)还有一个非常重要的问题:它是完全单线程的.鉴于它是一个数据处理和可视化程序,这越来越成为一个障碍.
我既是开发人员又是下一个版本的项目经理,我们希望解决这个问题,这对于这两个领域来说都是一项艰巨的任务.我正在寻求有关如何解决问题的具体,实用和建筑建议.
程序的数据流可能是这样的:
即,绘制消息处理程序将在处理完成时阻止,如果数据尚未计算和缓存,则可能需要很长时间.有时这是几分钟.执行冗长处理操作的程序的其他部分也会出现类似的路径 - 程序在整个时间(有时是几小时)内没有响应.
我正在寻求如何改变这一点的建议.实用的想法.也许这样的事情:
自从几年前我的Uni时代以来,我没有做任何多线程编程,我认为我团队的其他成员处于类似的位置.我所知道的是学术上的,而不是实际的,并且远远不足以让人有信心接近这一点.
最终目标是拥有一个完全响应的程序,其中所有计算和数据生成都在其他线程中完成,并且UI始终响应.我们可能无法在一个开发周期中到达那里:)
编辑:我想我应该添加一些关于该应用程序的更多细节:
编辑#2:感谢您的回复!
我还没有为这个问题找到答案 - 这不是因为答案的质量,这很好(而且比你还要好),但仅仅是因为我的范围,我希望得到更多的答案或讨论.谢谢那些已经回复的人!
突然,突然之间,我得到了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,该项目已经运行了一年多.我试过了:
我还能做些什么来解决这个问题?
编辑
我试图重建其他几个运行良好多年的项目,现在我的所有项目都出现了LME288错误.
我拥有一家软件开发公司.我们为其他以其名称/头衔命名的公司开发软件.我们在会计/ 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来发现它之前的许多缺点已经消失?
寻找"去过那里,做过那些"的建议.
我目前正在将一个大型RAD Studio 2010项目迁移到XE4.作为其中的一部分,我正在重新创建许多项目文件.我想借此机会确保我们使用最佳的预编译头文件机制,因为似乎有几种方法可以做到这一点.
现在我们只编译32位,但将来会使用64位编译器.
以下是我们目前在2010年所做的工作,以及为什么我不确定在XE4中要做什么:
我们有一个文件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)
然后,我们在项目选项的预编译标题部分中进行以下设置:

编译起来并不是特别快(大约350,000行代码需要12分钟.)我不确定:
换句话说,我不确定这些是正确的还是最佳的设置,但是从阅读文档中我同样不确定什么会更好.我知道我不太了解所有选项 - 这个问题的一个原因:)
XE4 32位编译器的选项对话框是相同的,但有两件事让我感到困惑和/或让我不确定当前的2010方法是最好的.
1.默认行为
在创建新的VCL Forms项目时,IDE会创建一个默认名为Project1PCH1.h的标头,该标头旨在作为项目的预编译标头. 此标头包含<vcl.h>和<tchar.h>,并在项目管理器中显示为节点.它不包含在默认的Form1.cpp中,但#include <vcl.h>后面#pragma hdrstop是Form1.cpp的最顶层,后跟其他标题.
使用此标题的新项目的默认XE4设置对话框是:

我(天真地?)正在假设默认值实际上是最佳/最佳设置.有些事情困扰我:
Project1PCH1.h在任何地方的预编译头设置中都没有提到项目的假定预编译头.Project1PCH1.h?)Project1PCH1.h …有没有办法在Delphi或C++ Builder中指定应用程序出现在哪个监视器上?
我正在为一个客户开发一个简单的程序,它在一个二级监视器上显示厨房订单,由一个酒店系统生成.目前,他们需要在启动后手动将窗口拖动到第二个监视器上.
c++builder ×10
delphi ×4
c++ ×3
architecture ×1
delphi-xe2 ×1
dock ×1
firemonkey ×1
macos ×1
namespaces ×1
vcl ×1