标签: c++builder

如何在单个表单中获取多个TActionMainMenuBar对象的快捷方式?

我有一个主表单的应用程序.在这种形式中,我放置了三个TActionMainMenuBars,因为应用程序基本上以三种不同的模式运行.

菜单栏全部由在主窗体上的TActionManager中存储(代理)的动作构成.ActionManager实际上引用了各种其他形式的动作列表.

然后显示菜单栏+启用并隐藏+禁用,以便一次只能看到一个菜单栏.这样做效果很好,如果点击操作或者使用ALT导航操作,然后使用箭头键或标题中带下划线的字符.

但问题是,操作似乎没有响应任何快捷键按下.

有谁知道什么可能导致行动不发射?

如果需要,我将很乐意提供更多信息,我正在使用WinXP SP3中的C++ Builder 2007 RAD Studio进行编程.

感谢任何阅读此内容的人,或者甚至阅读本文并提出解决方案!

PeterMJ

更新:我没有说明不同菜单中的快捷方式重叠,因为不同菜单中的相同快捷方式用于不同的操作,但所有快捷方式在自己的菜单中都是唯一的.

我还简化了测试应用程序中的问题,使用了两个TActionMainMenuBars,并且所有操作共享了一个操作管理器.在这种情况下,我有两个具有相同快捷方式的操作.它们放在不同的菜单上.然后一次启用一个菜单.在这种情况下,快捷方式可以正常工作,但是当使用公共快捷方式时,即使禁用了保留菜单,只触发第一个菜单中的操作.

这稍微好于我的实际问题,因为某些操作会触发,但突出显示操作未被正确触发.有没有人没有解决方案?

delphi c++builder

5
推荐指数
1
解决办法
1963
查看次数

如何将Borland C++构建器的代码移植到Linux?

我有一个用C++编写的Windows DLL的源代码,并使用Visual Component Library.现在我的任务是将其移植到Linux,但我没有VCL本身的源代码或任何类型的文档(我从未使用过Borland C++;在我的Windows时代,我使用过MFC).

这应该不是那么难,因为我的DLL没有任何GUI:据我所知,它主要使用VCL进行多线程处理.我遇到了一个继承自TThread的类,这就是我遇到的问题.我在互联网上做了一些搜索,但到目前为止还没有找到VCL的文档.我想避免购买一本关于Borland C++ Builder的书,因为我没有时间等待它从亚马逊到达.我不能考虑购买Windows的软件包,因为在工作中我只有一个Linux盒子.

有什么建议?

vcl c++builder tthread

5
推荐指数
3
解决办法
6665
查看次数

Delphi C++ Builder到VisualStudio

我们可以"轻松地"(以某种方式)将C++ Builder项目编译成VisualStudio 2005 C++.C++中的新功能我正在寻找这方面的参考文献(CBuilder vs VS).谢谢.

visual-studio-2005 c++builder

5
推荐指数
1
解决办法
584
查看次数

如何在C++ Builder中直观地设计组件?

我已经离开C++几年了,正在做AS3/Flex工作.我已经习惯了能够创建一个组件并将其置于设计模式中,并且非常小心翼翼.我正在努力让我的头脑围绕C++ Builder做同样的事情.

我以前为C++ Builder编写了许多组件,但它们都没有可视化.我现在想做的是为客户搜索创建一个组件,为订单处理创建另一个组件,因为我希望能够动态创建这些组件的新实例.我不想做的是必须在代码中手动放置每个组件,如dbgrid和搜索字段.我想在设计模式下执行此操作(以及设置其属性).

我该怎么做?我浏览了其他Delphi组件的源代码,我注意到它们有dfm文件,这似乎是我需要的.我如何在C++ Builder中执行此操作?我看到的唯一选择是添加一个新表单,如果我想要一个dfm,但这不是我想要的,因为我的组件将基于TPanel.

有没有办法做到这一点,还是我必须在没有视觉参考的代码中使用它?

追求DFM的想法我今天早上做了一个测试,在那里我创建了一个基于TPanel的组件,并添加了一个新的表单,我在组件的构造函数中创建并使用它.在设计模式下,我将表单边框设置为none,并在其上放置一个网格.这一切看起来都很好,直到我将组件放在我的应用程序中,此时它看起来像一个带有标准外观的面板,并且缺少网格.如果我运行应用程序,面板会按预期显示,无边框和网格.出于某种原因,DFM似乎在设计模式中被忽略.

如果您知道比使用组件更好的方法,那么请给我一些指示.

任何帮助和建议将不胜感激

c++ delphi components c++builder

5
推荐指数
1
解决办法
2100
查看次数

如何构建数据库以进行快速节点访问

我正在寻找一种方法来构建数据库与VirtualTreeView和SQLite数据库,以便快速检索数据.使用VirtualTreeView有一个OnNodeInit事件,但它并不总是适用于此目的.

数据从Usenet新闻组中获取,需要进行线程化.对线程有用的数据是post id(int64,也是主键),引用(引用线程中先前帖子的字符串).

程序在引用中搜索字符串并确定它应该在哪个postid.因此,例如post id = 1234,则下一篇文章可能是1235,然后1236可能是对1234的回复.

这是一个可能的数据库示例:

post id    references    parent id
  1234      .... ....       0
  1235      .... ....       0
  1236      .... ....      1234
Run Code Online (Sandbox Code Playgroud)

所以现在这就是它现在的样子.

现在,问题是如何构建此数据以加快检索速度.如果只有一个根节点,我可以根据数据库条目分配RootNodeCount,然后在OnNodeInit中按要求逐个读取它们.当有子节点时,我需要以某种方式重新排列数据库,以便它知道如何更快地获取子节点,具体取决于打开哪个节点.

我正在考虑分配附加字段"has_subnodes",其中包含以下子节点的ID.单击节点时,它将读取该节点和每个链接节点.

你将如何组织这个数据库,以便在OnNodeInit中很好地阅读它,或者你会使用那个事件吗?也可以使用AddChildNoInit()方法启动节点.欢迎任何想法或指示.

更新(以及我如何解决)

这里提供了一些非虚拟视图相关信息: 在数据库中实现分层数据结构

我最终做的是使用Modified Preorder Tree Traversal在数据库中存储有关节点的信息,并且每次首先请求某个节点时:

a)在内部缓存中查找它基本上与VirtualTreeView结构保持相同的结构.

b)如果在缓存中找到,则删除此缓存条目(它永远不会超过100个项目)

c)如果未找到,则在缓存中添加额外的100个项目(从请求的节点向上50个,向下50个).如果需要,此课程数可以修改为500或1000个项目.还有一些额外的检查可以查看需要读取多少上/下来以避免读取过多的重复条目.

d)如果我需要更高的速度,我可以应用额外的技术 - 根据用户滚动虚拟视图的数量从数据库加载节点 - 类似于std :: vector如何分配内存 - 首先我只加载100个节点,然后如果用户滚动了很多,我加载200,然后400等...越多的用户滚动加载整个树的速度越快,但如果他/她从不滚动,仍然不加载它.

这样,永远不会从数据库加载从未见过的节点.(当它经过点高速缓存为空,从盘需要更多的数据,偶尔短的延迟)和用于与箭头按钮/键滚动它工作正常用于与鼠标滚轮滚动.将滚动条拖动到某个位置(例如从底部到中间)时速度会慢一些,但由于无法立即从磁盘中获取数据,因此可以预期.

最好是我在加载之前预先确定要用于缓存/项目的内存量,滚动速度越快但当然如果数据从未显示则会占用更多内存.

delphi sqlite c++builder hierarchical-data virtualtreeview

5
推荐指数
1
解决办法
2650
查看次数

DBLookupComboBox - 如何清除所选项目?

我试图实现的就像将ItemIndex设置为-1,就像在普通的ComboBox中一样,这样就可以清除所选的项目.

DBLookupComboBox没有ItemIndex,Text属性是只读的.那么如何清除所选项目?请帮忙.提前谢谢了.

PS:关闭并重新打开DBLookupComboBox-> ListSource DataSet没有帮助.

delphi vcl c++builder

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

为动态创建的TComponent派生类实例传递一个NULL Owner参数好吗?

我非常喜欢使用C++ RAD Studio和Builder 6,并且经常在编写非可视代码时动态创建表单或动态创建非可视组件.在设计表单时,自动设置放在该表单上的组件的Owner属性,所以我从不担心它.但是,当创建TComponent动态派生的任何东西时,我总是NULL作为Owner参数传递,因为我总是负责以后释放内存.

Borland/Embarcadero文档并没有真正涵盖动态创建事物所需的内容(或者我可能没有在正确的位置查找),而且似乎只涉及基于设计时间表的场景.

我想知道为动态创建的组件传递NULL所有者是否正确,或者它是否会导致内部问题,这些问题将在以后显现出来.代码编译并正常工作,但我想知道它是否是原因或可能导致任何幕后问题.

c++ c++builder tcomponent

5
推荐指数
1
解决办法
362
查看次数

OpenGL上基于矢量的字体

我开始在这家公司工作,使用2D OpenGL实现来显示我们系统的数据(在Windows上运行.)整个系统是用C++构建的(使用C++ Builder 2007).事实是,当你放大时,他们在那里打印的所有文字都是像素化的,我认为这是因为文本是位图:

视图示例

据我所知,他们使用与Windows相同的字体文件.我在这里询问为什么会发生这种情况,我得到的答案是实现它的人(在公司不再工作)说OpenGL上的字体很难,这是他能做的最好的事情或类似的东西.

我的问题是:是否有任何简单有效的方法使文本也成为一个矢量(与图片中的那些线相同的方式是什么?)所以当我缩放相机时,这种情况发生了很多,它们没有像素化.我对OpenGL知之甚少,如果你有一些与此相关的指南和/或教程指向正确的方向,我会非常感激.基本上任何材料都会很棒.

c++ opengl c++builder

5
推荐指数
1
解决办法
4749
查看次数

5
推荐指数
1
解决办法
7372
查看次数

CMake,VTK8和Embarcaderos Clang编译器

目前Embarcadero版本的C++ Builder(10.2.3)附带了Clang 32和64位C/C++编译器.据称Clang版本为3.3,(http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Win32_Clang-enhanced_Compilers).

我正在研究使用这些编译器和CMake编译VTK 8.0和其他库.

但是,CMake附带的"系统"CMake文件(Windows-Embarcadero.cmake)没有为Clang配置,而是为较旧的bcc32编译器配置.

Embarcadero建议将他们发布的"Windows-Embarcadero.cmake"文件(http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_CMake_with_C%2B%2B_Builder)复制到CMakes Modules/Platform文件夹,并覆盖Windows-随CMake一起提供的Embarcadero.cmake文件.我正在使用CMake 3.10.

但是,遵循Embarcaderos的建议不允许编译太多.除了不能正常工作之外,新的.cmake文件还断开了对旧bcc32编译器(!)的支持.

尝试使用CMake和bcc32x(clang32)编译器配置VTK8源时的第一个错误是:

CMake Error at CMake/vtkModuleMacros.cmake:586 (target_compile_features):
target_compile_features no known features for CXX compiler

"Embarcadero"

version 7.30.36015.
Call Stack (most recent call first):
CMake/vtkModuleMacros.cmake:660 (vtk_add_library)
Common/Core/CMakeLists.txt:399 (vtk_module_library)
Run Code Online (Sandbox Code Playgroud)

在第586行深入了解CMake/vtkModuleMacros可显示错误发生的位置:

  function(vtk_add_library name)
  add_library(${name} ${ARGN} ${headers})
  # We use compile features to specify that VTK requires C++11.
  # We request a series of C++11 features that will conform to VTK's
  # desired minimum requirements.
  # - cxx_override …
Run Code Online (Sandbox Code Playgroud)

c++ c++builder cmake clang

5
推荐指数
1
解决办法
362
查看次数