问题标签 [firemonkey-fm2]

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.

0 投票
0 回答
1034 浏览

delphi - Firemonkey TImageControl 缩放

我想修改 Firemonkey 中的 TImageViewer 处理缩放的方式。当我滚动鼠标滚轮时,图像应该缩放,但图像不应该居中。相反,缩放前位于鼠标位置的像素必须在缩放后仍位于鼠标位置。因此,它应该与 Windows 照片查看器一样工作。

我正在使用 XE3 并在 Delphi 中编程。

0 投票
1 回答
1384 浏览

delphi - TImageviewer 最大尺寸

有谁知道 FireMonkey TImageViewer 中位图的最大宽度和高度是多少?我在 TImageViewer 中绘制矢量图形。我只能放大到某个值,然后我得到一个内存异常。

0 投票
0 回答
251 浏览

delphi - 如何启用通过选项卡导航并在网格中输入键?

我使用了一个 TGrid 并用 TLabels 填充一列,另一列用 TEdits 填充数据输入功能。我想通过 Tabs 和 Enter 导航。与 VCL 不同,我发现在 firemonkey 网格中没有暴露这样的选项。

有人可以帮忙吗?

0 投票
0 回答
764 浏览

delphi - BeginUpdate - EndUpdate 导致表单位于所有打开的窗口后面

我已经在 firemonkey 中移植了一个控制繁重的应用程序,我已经使用 DXScene 进行了 2 年多的工作。每次 UI 更改时更新的视觉控件的绝对数量保证了 BeginUpdate-EndUpdate 方法分别在所有 UI 更新方法中的前缀和后缀。

移植后,firemonkey 引擎对这些方法的行为不正常。

  1. 有时,新控件已构建但未更新内容。
  2. 有时它们甚至不显示,强制形式最小化-最大化使它们显示。
  3. 并且表单总是落后于所有其他打开的窗口。

是否仍然建议使用这些或在 FMX 中引入了替代方案?

0 投票
0 回答
1157 浏览

delphi - 可见设置为 true 时不显示部分表单

我的程序处于发布后状态,所以请多多包涵。

设想

我的程序基于办公数据管理系统(面向车辆维护)的不同功能的不同页面的多种布局。这些功能的一个主要类别显然是数据输入。我使用不同的风格来适应不同的受众。

言归正传,其中一个界面具有 excel 样式的网格和 3 个用于打印/保存/重置功能的按钮。我使用 FastReports 打印表单。

我正在为网格列开发一个自定义类,以使它们适应预定义的控件列表而不是动态的单元格,但现在我只是在代码中创建了所需的单元格子控件。

该页面有 3 个部分(布局);

  • 顶部是一种特定于所有页面的目的(添加/修改/添加部分)选择器,在不需要的地方可能不可见。

  • 中间一个是一个控件,用于接收要修改的表单的收据编号,它们的信息嵌入到其他表单中等。它主要在每一页上,但不是全部。

  • 最后一个具有页面内容,即前面提到的网格和 3 个按钮。

代码

这是用于显示其中一个有问题的页面的代码片段。它在所有数据处理完成并且服务器 OK 转换时执行。

传奇

  • AState : 状态机状态变量;表示显示页面的当前状态。

  • AMode : 状态机状态枚举器;表示整个应用程序的模式,例如预订(数据输入)等。我跳过了涉及此的代码,因为它在 AState 转换期间被跳过以发生此问题。

  • fMode:与上面相同,但它是表单的主要字段。

  • UI_CA_Controls1:包含预订模式的目的选择器(组合列表框)的布局。

  • EV_Mode:为方便起见的变量;它存储目的选择器的项目索引。

  • UI_CA_Grid:包含在 UI_CA_Content 中的布局本身包含 UI_CA_FieldGrid (TGrid)。

  • fEditColumn:具有 TEdits 的网格的第二列。

  • fGridDataset:网格关联的 TStringList。

//

问题

问题是,无论何时显示收据部分,内容部分都不会在现场显示。行为是这样的,当我将鼠标悬停在应该显示这些子控件和 3 个按钮的位置时,当我单击它时才显示网格。

这个问题本身就出现了,UI 代码没有变化,这让我困惑了 3 天。我只对网络端的协议和数据处理(独立数据模块)进行了优化。

序列

  • 用户想要修改已经预订的车辆数据。

  • 用户输入预订收据编号。(AState = 0,AMode = UIM_Booking)

  • 客户端查询的服务器和服务器回复完整的数据集(如果存在)。

  • 客户端获取数据并将其复制到 Grid 关联的 TStringlist 和子字段的字符串中。

  • 客户端不显示带有数据和 3 个按钮的网格。(AState = 1,AMode = UIM_Booking)

到目前为止我尝试了什么

  • 使用了 BeginUpdate/EndUpdate,这使得对齐工件变得更糟。

  • 在网格和按钮上使用 SetFocus 会导致其中一些随机显示,有时会完整显示,但并非每次都显示。

  • 使用 Application.ProcessMessages 没有任何变化,而不是 UI 线程有时只是卡在其中永远不会返回。在单独的线程中使用它,每秒调用一次,没有任何变化。

  • 为该方法使用了单独的线程,但问题更多。

  • 回溯和恢复旧的工作代码,没有任何变化(让我很生气)。

  • 更新 1:我试图使网格不可见,然后在代码末尾可见。现在网格的一些单元格随机显示。

解决方法 1

  • 当为它们中的每一个调用 SetFocus 方法时,可以显示网格和按钮。
  • 按钮的调用顺序是不稳定的。就像我必须先调用重置然后打印并保存 SetFocus 方法,否则只有其中一个被显示。
  • 有一个瞬间的重新对齐故障,显示控件正在调整大小,但我认为这是可以忽略的。

解决方法 2

因此,如果你们有任何建议,我将不胜感激。

0 投票
0 回答
1084 浏览

delphi - 如何自动调整 Firemonkey 表单的大小

VCL 表单有一个 AutoSize 属性,可以根据其内容自动调整表单的大小。我没有看到 Firemonkey 的类似机制。手动计算大小和设置高度和宽度的短,有没有办法?

0 投票
1 回答
525 浏览

delphi-xe2 - FireMonkey2:为什么原始组件不响应填充属性

我从 Embarcadero 网站上的示例中创建了一个名为:TRegularPolygon 的新组件。该组件在 FM1 (XE2) 上运行良好,但在 XE3 及更高版本上,Fill.Color 属性没有响应。在 XE4 和 XE5 的设计时,组件被填充为黑色,而在运行时,组件被填充为白色。如果我们在正在运行的程序中以编程方式更改 fill.color 属性,则 fill.color 属性会起作用。该组件源自 TShape。我尝试与 TRectangular 和 TCircle 等其他 Tshape 组件进行比较,这些组件在所有 XEx 版本中都运行良好。

这是组件的代码(对于 XE5)-->

0 投票
1 回答
2571 浏览

delphi - 处理硬按钮 vkHardwareBack

在我的应用程序中,我使用带有 3 个选项卡的 TTabControl:带有 3 个按钮的主选项卡 (TabItem1):Button1 将带我到 TabItem2,Button2 到 TabItem3,按钮 3 到 TabItem3。

我处理 FormKeyUp 事件来控制导航和:

如果按下的键是 vkHardwareBack,那么如果 ActiveTab 是 TabItem1,我会弹出一条消息,询问用户是否要退出应用程序。如果答案是肯定的,我会关闭应用程序,如果不是,则什么也不会发生。这部分工作得很好!

但是,如果 ActiveTab 是 TabItem2 或 TabItem3,那么我希望应用程序通过触发具有属性的 TTabChangeItem 标准操作返回到主选项卡 (TabItem1):

  • 标签:TabItem1
  • 方向:tdReversed
  • 交易:ttSlide

但这并没有发生。当用户在 ActiveTab 为 TabItem2 或 TabItem3 时按下 vkHardwareBack 时,应用程序将进入后台并显示主屏幕。

任何想法我做错了什么?

这是一个 FormKeyUp 程序:

0 投票
2 回答
1880 浏览

delphi - 用字符串移动的奇怪行为

我正在测试一些增强的字符串相关函数,我试图使用 move 作为一种复制字符串的方法,以便更快、更有效地使用,而无需深入研究指针。

在测试从 TStringList 生成分隔字符串的函数时,我遇到了一个奇怪的问题。编译器在索引为空时引用通过索引包含的字节,并且当通过移动将字符串添加到其中时,索引引用包含的字符。

这是一个小型缩小的准系统代码示例:-

请设计一个解决方案,如果可能的话,一些解释。也欢迎替代品。

0 投票
1 回答
86 浏览

delphi - 哪些设置或场景会使动画的触发器无法触发?

我正在尝试通过样式书为复选框设置动画;

  • 制作布局并将其命名为“ch_style1”
  • 添加另一个布局,将其命名为“布局”(对齐 = 左)
    • 添加 TRectangle ( Align = Left; HitTest = False )
    • 通过 TColorAnimation 将填充颜色设置为动画
    • TColorAnimation(启用 = True;Inverse = True;Trigger = IsMouseOver=true;InverseTrigger = IsMouseOver=false)
  • 添加 TText 和 TShadowEffect

这个问题只出现在我的主应用程序中,虽然隐藏了很多控件。每个视图最多可以包含 30-40 个控件。根本没有性能问题。样式设计器 IDE 甚至在控件上显示动画,但运行应用程序会提示好像 IsMouseOver 触发器没有触发。只有当我为新表单上的控件执行此操作时,我才会成功。

由于它全部在 IDE 中,我无法提供任何代码来帮助我的情况,dfm 甚至超过 600KB...所以请用你的经验和我可能寻找解决方案的任何可能领域来启发我。谢谢你。