需要在Delphi中检测父表单(FireMonkey 3)以获取此表单上的任何控件.
最简单的方法是什么?
首先 - 我是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事件,因此我的按钮等不会重排并最终在屏幕外.
所以我的问题是,如何检测屏幕已旋转,以便我可以让我的应用程序在横向和纵向模式下工作?
需要在FireMonkey3下检测本地IP地址.在VCL版本中,我一直在使用单元WinSock和它的方法
WSAStartup(...)
gethostname(...)
Run Code Online (Sandbox Code Playgroud)
一个限制:不需要使用任何第三方库.我正在将ASTA组件移植到FireMonkey3平台,并且不希望在组件之间进行依赖关系.
我想在画布上绘制文本。为了进行轮换,我使用了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中的实时绑定,因为我想刷新我当前的一个项目(从基础完成返工,以便推送到其他平台,优化性能和最小化代码).我正在使用返回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);
有没有人使用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下没有这样的文件.
我一直试图在互联网上找到一个没有运气的解决方案.看起来好像很多人都没有尝试过这个.
我知道这是一个愚蠢的问题,但是在更改视觉库时,我发现 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。:解决“主要问题”的其他可能的解决方案是可以接受的......
多谢!
我想检查Form1.OnCreate事件处理程序过程,如果Form1构造函数Create完成作业,填充Form1上的所有组件.然后想使用Form1循环遍历组件并更改Text属性.我试过了:
WHILE NOT Assigned(Form1) DO
Sleep(100);
Run Code Online (Sandbox Code Playgroud)
......但它没有用.
现在,当我尝试使用Form1时,出现访问冲突错误.
delphi ×7
firemonkey ×4
delphi-xe5 ×3
delphi-xe4 ×2
64-bit ×1
android ×1
c++ ×1
c++builder ×1
livebindings ×1
wsastartup ×1