标签: firemonkey-fm3

如何检测控件的父表单?

需要在Delphi中检测父表单(FireMonkey 3)以获取此表单上的任何控件.

最简单的方法是什么?

delphi firemonkey-fm3

4
推荐指数
1
解决办法
1310
查看次数

如何使用FireMonkey for Delphi XE5检测/处理屏幕旋转

首先 - 我是Android和FireMonkey编程的初学者,所以请记住这一点:-).

我已经制作了一个FireMonkey/Android应用程序,可以根据屏幕大小和方向调整其控件的大小/重排,但是当用户旋转屏幕时,我无法弄清楚如何设置我的应用程序.如果我在其中运行Firemonkey/Win32并显示执行以下操作的按钮:

PROCEDURE TMainForm.FlipForm;
  VAR
    W,H : INTEGER;

  BEGIN
    W:=Width; H:=Height; Width:=H; Height:=W
  END;
Run Code Online (Sandbox Code Playgroud)

然后陷阱FormResize事件,我的表单调整大小/回流它应该.我想在Android上运行时也这样做,但似乎在屏幕旋转时不会调用FormResize事件,因此我的按钮等不会重排并最终在屏幕外.

所以我的问题是,如何检测屏幕已旋转,以便我可以让我的应用程序在横向和纵向模式下工作?

delphi android firemonkey firemonkey-fm3 delphi-xe5

4
推荐指数
3
解决办法
9323
查看次数

在FireMonkey3下检测本地IP地址

需要在FireMonkey3下检测本地IP地址.在VCL版本中,我一直在使用单元WinSock和它的方法

WSAStartup(...)
gethostname(...)
Run Code Online (Sandbox Code Playgroud)

一个限制:不需要使用任何第三方库.我正在将ASTA组件移植到FireMonkey3平台,并且不希望在组件之间进行依赖关系.

delphi firemonkey-fm3 wsastartup

3
推荐指数
1
解决办法
2592
查看次数

Firemonkey 旋转文本

我想在画布上绘制文本。为了进行轮换,我使用了https://forums.embarcadero.com/thread.jspa?messageID=440010 中的以下代码

//bm is a TImage    
a := 45;
c:= bm.Canvas;
CurrentM := c.Matrix;
a:=-radian(a);
m.m11:= cos(a); m.m12:=sin(a); m.m13:=0;
m.m21:=-sin(a); m.m22:=cos(a); m.m23:=0;
m.m31:=0;       m.m32:=0;      m.m33:=1;
c.setmatrix(M);

c.BeginScene;
    c.filltext(rectf(100,100,5000,5000), 'test rotated string', false,1,[],ttextalign.taLeading,ttextalign.taLeading);
c.EndScene;
Run Code Online (Sandbox Code Playgroud)

这工作正常。我已将矩形的右侧和底部设置为 5000,这样我就不必担心矩形太小了。

问题是我现在想更改我的 TextAlignment 属性。所以要从右到左绘制文本,我必须调整我的矩形,然后按以下方式绘制它:

c.BeginScene;
    c.filltext(rectf((100 - 5000),100,100,5000), 'test rotated string', false,1,[],ttextalign.taTrailing,ttextalign.taLeading);
c.EndScene;
Run Code Online (Sandbox Code Playgroud)

所以基本上我移动了矩形 TopLeft 的 x 值并将其移回 5000(我再次使用 5000 来确保我的文本适合)。然后,我将矩形右下角的 x 值设置为 x 值在上一个示例矩形的 TopLeft 中的位置。这适用于 0 度旋转,但是一旦我更改了度数,我就不会在正确的位置绘制文本。我认为这是因为文本将围绕矩形的 TopLeft 位置旋转(更改为使文本从右向左书写)。

delphi firemonkey delphi-xe4 firemonkey-fm3

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

生活绑定JSON对象和数组

晚上好.

我目前正试图掌握Delphi中的实时绑定,因为我想刷新我当前的一个项目(从基础完成返工,以便推送到其他平台,优化性能和最小化代码).我正在使用返回JSON数据的Web API.一个示例调用返回的JSON格式如下所示;

{
  "response": {
    "ips": [
      {
        "ip": "111.222.333.444",
        "classification": "regular",
        "hits": 134,
        "latitude": 0.0000,
        "longitude": 0.0000,
        "zone_name": "example.com"
      },
      {
        "ip": "555.666.777.888",
        "classification": "regular",
        "hits": 134,
        "latitude": 50.0000,
        "longitude: 50.0000,
        "zone_name": "example-2.com"
      },
    ]
},
"result": "success",
"msg": null
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它是一个带有数组的JSON对象和一些不同类型的数据字段(字符串,浮点数,整数等).

在我的应用程序中,我有TRESTClient,TRESTRequest,TRESTResponse,TRESTResponseDataSetAdapter,TClientDataSet和TBindSourceDB组件.我还有一个TButton,一个TMemo和一个TListView.我已经设法通过livebindings挂起所有组件,当我单击按钮(执行请求)时,通过调用返回的整个数据显示在备忘录中.

我正在努力的是将数据链接到ListView.我创建了FieldDefs用于TClientDataSource本身(这是相对于字面树视图ChildDefs);

  • | --result(类型:ftString)
  • | --response(类型:ftObject)
  • | - | --ips(类型:ftArray,大小:6)
  • | - | - | - ip(类型:ftString)
  • | - | - | - 分类(类型:ftString)
  • | - | - | - …

delphi firemonkey livebindings firemonkey-fm3 delphi-xe5

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

Firemonkey designide.dcp 64位

有没有人使用designide.dcp为64位操作系统在Firemonkey中成功构建自定义组件?我正在尝试将设计编辑器添加到自定义组件.我按照http://docwiki.embarcadero.com/RADStudio/XE3/en/Creating_a_Component_Editor_and_a_Property_Editor_for_FireMonkey_Components上的教程进行操作.这在编译为32位时工作正常,但我得到以下64位错误:[dcc64致命错误] ComponentEditor.pas(10):E2213错误的打包单位格式:c:\ program files(x86)\ embarcadero\rad studio\11.0\lib\win32\release\designide.dcp.DesignEditors - 预期版本:25.0,Windows Unicode(x64)发现版本:25.0,Windows Unicode(x86)

查看路径,这有意义,因为文件引用了lib\win32.但是,在lib\win64下没有这样的文件.

我一直试图在互联网上找到一个没有运气的解决方案.看起来好像很多人都没有尝试过这个.

delphi 64-bit delphi-xe4 firemonkey-fm3

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

如何使用 C++ builder (Firemonkey) 获取屏幕尺寸

我知道这是一个愚蠢的问题,但是在更改视觉库时,我发现 FMX 存在“麻烦”...我的问题是:我需要做自己的边框,所以我将属性设置为边框样式:“无”,但是该应用程序全屏运行,也覆盖了 Windows 工具栏,所以我想要一种根据屏幕调整申请表大小的方法,例如:

mainForm->Height = Screen->Height - 10;
Run Code Online (Sandbox Code Playgroud)

可以使用 VCL,但是有没有办法使用 FMX 库来做到这一点?我用 FMX 征服的最大值是(我不知道它是如何返回值的,以及值的类型):

Screen->Size(); // TSize
Run Code Online (Sandbox Code Playgroud)

我现在也征服了它,但我有编译器错误:

TSize* Tamanho = new TSize;
Tamanho = Screen->Size();
frmPrincipal->Width = Tamanho->Width;
frmPrincipal->Height = Tamanho->Height - 10;
Run Code Online (Sandbox Code Playgroud)

错误:“E2034 无法将 'TSize' 转换为 'TSize*'”

最后我试着把它放在 frmPrincipal.h 上,但同样的错误:

TSize *Tamanho;
Run Code Online (Sandbox Code Playgroud)

PS。:解决“主要问题”的其他可能的解决方案是可以接受的......

多谢!

c++ c++builder firemonkey-fm3 c++builder-xe6

0
推荐指数
1
解决办法
2143
查看次数

Delphi XE5 - 等待TForm.OnCreate()完成组件的填充

我想检查Form1.OnCreate事件处理程序过程,如果Form1构造函数Create完成作业,填充Form1上的所有组件.然后想使用Form1循环遍历组件并更改Text属性.我试过了:

WHILE NOT Assigned(Form1) DO 
  Sleep(100); 
Run Code Online (Sandbox Code Playgroud)

......但它没有用.

现在,当我尝试使用Form1时,出现访问冲突错误.

delphi firemonkey firemonkey-fm3 delphi-xe5

-4
推荐指数
2
解决办法
671
查看次数