问题标签 [c++builder-xe8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Firemonkey:缩小文本字体以适应 TLabel
TLabel
如果 a 的文本太大以适合标签的范围,我正在尝试降低它的字体大小。我没有看到我可以在标签上设置任何属性来实现这一点,所以我尝试编写自己的方法。我的方法是使用TCanvas.TextWidth来测量标签中文本的宽度,然后缩小字体,直到文本的宽度适合标签的宽度。
这在某些时候有效,但在其他时候它不会将字体缩小得足够近。似乎我从调用Canvas->TextWidth
中获得的值很多次,远小于标签实际需要的像素宽度以适合文本。
我使用Canvas->TextWidth
不正确吗?有没有更好的方法来计算字符串的宽度,或者重新调整 a 的字体大小TLabel
以使其文本适合其尺寸?
编辑:
在这种情况下,我将传入我的函数,TCanvas
即我的标签所在的函数。我尝试过使用它TCanvas
以及Label->Canvas
. 两者都给了我相同的文本宽度数字,并且两者都缺少显示整个字符串所需的实际像素值。
c++ - Embarcadero TThread:在 C++ 中传递 TThreadMethod
编辑:现在我对正在发生的事情有了更好的了解,我想我可以更好地表达这个问题,这样它就更有用了。
我正在尝试在 C++ 中复制以下 delphi 代码
代码的目的是调用一个TMemo
以线程安全方式更新表单的方法。这是我尝试调用的方法的 C++ 版本Thread.Queue
因为我使用的是没有 CLANG 增强功能的 BCC32 编译器,所以不能选择使用 Lambda。相反,根据本文档,我需要创建一个继承自该类的类,该类TThreadProcedure
会覆盖该Invoke()
方法来完成我需要完成的工作。然后我可以将该类的一个实例传递给TThread::Queue
.
我创建了以下类,它继承TThreadProcuedure
并包含一个调用方法。
但是,由于TThreadProcedure
是一个抽象类,我不能简单地创建它的一个实例来传递给TThread::Queue
. TThreadProcedure
当我将类的实例传递给时,继承和定义要调用的函数的正确方法是什么TThread::Queue
?
c++ - 模态对话框打开时无法聚焦 Firemonkey 应用程序,除非单击模态对话框本身
我有一个应用程序,用户在登录时会收到一个模态对话框提示,他们必须在其中选择他们希望工作的设施。在这个阶段,应用程序如下所示:
通过调用此方法显示模态对话框:
在这种情况下,TFacChoiceForm
继承自TForm
所以ShowFacChoiceForm()
函数调用此处记录的标准TForm.ShowModal
方法。
我遇到的问题是,如果我的应用程序失去焦点,除非单击模式对话框本身,否则它不能再次成为活动窗口。为了更好地说明这一点,我将展示以下场景:
假设现在是星期五下午,我决定放纵一下并阅读一些网络漫画。打开我的应用程序后,我会在其顶部打开另一个窗口,如下所示:
然后,我的老板不知从何而来进行绩效评估,我试图通过单击主窗体上的某个位置来重新调整我的应用程序。例如,在下一个图像中这个红色 X 的位置。
在上图中,我点击了红色 X 的位置。现在,包含网络漫画的表单和我的应用程序都处于非活动状态。因此,我的应用程序不会出现在屏幕前面。
但是,如果我能够单击模态对话框中的某个位置,例如下图中的红色 X...
...然后我的申请就会像人们期望的那样出现在前面。
为了解决这个问题,我已经研究过使用 Windows API 中的SetForegroundWindow之类的东西,但我无法找到触发事件的方法,因为我的主窗体在打开模式对话框时不会触发事件。
我的问题是,我如何确保如果用户单击我的应用程序上的任何位置,它会被带到前面?我可以在我的表单中编辑一个属性来执行此操作吗?
c++ - Firemonkey:如何使用 TScreen.Forms 遍历应用程序中的所有表单
我正在尝试遍历我在应用程序中打开的表单。我找到了FMX.Forms.TScreen.Forms的文档,看起来它可以用来实现我的目标。但是,我对应该如何使用它感到困惑。
起初我在表单的 CPP 文件中的一个函数中尝试了这个:
这产生了错误'Member TScreen::FormCount cannot be used without an object'
我认为这意味着我需要尝试从我的表单或全局Application
变量中访问此属性。我都试过了
和
然而,它们既不存在Forms
也不TScreen
存在于这些对象中。
我该如何访问Forms.TScreen.Forms
?
c++ - 在鼠标钩子代码中调用方法会导致访问冲突
我有一个低级鼠标钩子,我试图用它来处理全局左键单击事件。我在一个基本的主窗体类中定义了钩子,如下所示:
我的鼠标钩子可以很好地检测到左键单击,但是当我尝试获取我的句柄时,我MainForm
遇到了访问冲突。
我最初认为这可能是因为我试图在TMainForm
类中检索句柄,而实际上在运行时,继承自的表单TMainForm
将处于活动状态。为此,我编写了一个名为GetHandle()
.
这个函数在TMainForm
头文件中定义如下:
在继承类中是这样的:
但是,当我打电话时GetHandle()
,TMainForm
我仍然会遇到访问冲突。此外,在尝试了更多的事情之后,我意识到从内部调用任何虚函数都会MouseHook
导致访问冲突。
为什么我无法使用 Platform::Win::WindowHandleToPlatform(this->Handle)->Wnd;
inside of检索我的表单句柄MouseHook
?为什么在内部调用虚函数MouseHook
会导致访问冲突?
编辑:
为了测试 Remy 提出的 MainForm 指针无效的答案,我在TMainForm
构造函数中添加了一段代码来测试指针是否有效。TMainForm
此外,我向继承自并在启动我的应用程序时加载的类的构造函数添加了一段代码,以测试其全局指针。我班级中的全局MainForm
指针TMainForm
实际上是无效的。但是,继承类的全局指针是有效的,因为它是实际被实例化的类。
c++ - Firedac:如何使用数据集读取器/写入器设置 TFDBatchMove?
我正在尝试设置一个使用读取器和写入器数据集TFDBatchMove
调用的对象。FDBatchMove
根据这个文档
应用程序应将所需的读取器和写入器分配给属性,然后调用 Execute 方法。
根据一个应该的文件TFDBatchMoveDataSetReader
使用 TFDBatchMoveDataSetReader 定义源数据集,使用 TFDBatchMove 从中加载信息。
设置 DataSet 属性以选择数据集。
选择 TFDBatchMoveDataSetReader 作为 TFDBatchMove 的 Reader 属性。
的文档包含TFDBatchMoveDataSetWriter
相同的步骤。
因此,我创建了一个TFDBatchMoveDataSetReader
和一个TFDBatchMoveDataSetWriter
对象,并像这样设置它们的数据集值:
但是,当我尝试设置TFDBatchMove
对象的读取器和写入器属性时(即文档中的第三步),我遇到了一个问题。
编码...
...给我以下错误:
我尝试显式创建一个新_di_IFDBatchMoveReader
对象,但是该对象不允许我访问 Dataset 属性。我应该如何TFDBatchMove
使用数据集阅读器和数据集编写器设置我的对象?
c++ - 如何访问单个 TListViewItem 上的文本按钮
我有一个 Firemonkey TListView组件,我已经对其进行了定制,以在每个项目上包含一个Text
和组件。TextButton
为了自定义我的组件,我遵循了本文档TListView
的“使用自定义值”部分。
我需要TextButton
在我的列表中隐藏某些项目。我已经想出了如何TextButton
使用以下方法一次隐藏列表中的所有组件:
MyListView->ItemAppearanceObjects->ItemObjects->TextButton->Visible = false;
但是我无法弄清楚如何访问TextButton
单个行的,以隐藏我需要隐藏的特定按钮。我如何才能访问TextButton
我的列表中的单个行?
c++ - How to override on click event of custom Firemonkey control
I am attempting to create a custom Firemonkey control which inheirts from the TListView
control. I want to add some functionality to the control which is automatically executed when a user clicks on the control. Therefore, my goal is NOT to specify an OnItemClick
method on my control's form, but rather add functionality directly into the control itself.
I am struggling to comprehend what I need to do in order to tap into the on click handler for TListView
. In my head, I imagine my solution would look something similar to this pseudo code:
However, I cant seem to find anything in the documentation about what method I should attempt to override, or how I should be going about this at all.
I did find this information about calling the 'Click-event' handler. I set up a simple example like so:
This works fine, however according to the documentation:
If the user has assigned a handler to a control's OnClick event, clicking the control results in that method being called.
Therefore, any additional logic I placed in the Click()
method of the control would be lost if one of the control's on click event properties was set.
What is the proper way to go about extending the functionality of what happens when a custom control is clicked?
c++ - Firemonkey:在运行时将子控件添加到 TListViewItem
我试图在运行时TEdit
向控件添加控件。TListView
我想将控件设置为属于 myTEdit
的所选控件,但是,我找不到执行此操作的方法。 TListViewItem
TListView
最初,我试过这个:
但是,这给了我以下错误:
[bcc32 错误] E2034 无法将 'TListViewItem *' 转换为 'TFmxObject *'
一时兴起,我试图在我的列表视图中对选定的项目进行类型转换,TFmxObject
如下所示:
在编译时,这会在运行时导致访问冲突。
我搜索了很多文档和论坛帖子,但找不到很多关于在代码中动态添加控件到列表视图项的信息。我已经看到建议使用样式编辑器的解决方案,但我想尽可能避免这种情况。
如何将控件的父级设置为我的项目TListView
?有没有更好/更合适的方法在运行时向 a 添加控件TListViewItem
?
c++ - Firemonkey:尽管 autosize 属性为 true,但 TLabel 文本仍被截断
我的 Firemonkey 应用程序遇到了一个奇怪的问题。这是我的应用程序在本地 Windows 8.1 机器上运行时的屏幕截图。在蓝色面板内,是一个自动调整大小的标签,带有特意较长的描述,以确保调整工作正常。
一切似乎都很好,直到我在特定的远程机器上运行相同的应用程序。这是在远程 Windows Server 2008 R2 机器上运行的同一应用程序的屏幕截图。
如您所见,蓝色面板内的标签现在被截断,尽管它的自动大小属性设置为 true。此外,“显示日志”按钮的文本也被截断。
除了验证标签的自动大小属性之外,我还尝试以不同的窗口大小运行远程计算机,以查看问题是否与屏幕分辨率有关。但是,标签继续被截断。
Firemonkey 是否存在任何已知问题,即在不同操作系统之间以不同方式绘制事物?远程计算机上是否有任何可能导致应用程序无法正确呈现的显示设置?还有什么我应该考虑尝试缩小/解决问题的吗?