如何使用Delphi XE2访问iOS中的加速度计?
我尝试通过IDE查找,但没有找到组件.
我在Delphi XE2中创建了一个简单的测试平台应用程序,并编译了该应用程序的Win32和OSX版本.
我压缩了OSX版本,以及libcgunwind dylib运行时文件的副本,并将此文件复制到我有权访问的Mac.
当我解压缩文件时,mac识别我的OSX应用程序,然后双击它.
反过来,这会打开一个终端窗口,出于某种未知的原因以及我的简单应用程序的形式.
应用程序本身运行并表现得很好,但我很好奇为什么终端窗口会在Mac上打开?
背景
我使用一些FireMonkey控件创建了一个GUI.
问题
与用户控件的交互可防止更新动画控件,从而导致不稳定的不连续动画.
上面视频中的动画控件由TTimer组件驱动.使用FireMonkey的动画组件时问题仍然存在.
调查
滑块控件在调整时调用Repaint().平滑调整滑块将生成密集的Repaint()调用流,阻止其他控件更新.
该怎么办?
在一个控件不断更新时冻结动画不适合我的应用程序.我的第一个想法是交换Repaint()调用类似于VCL Invalidate()方法,但FireMonkey没有任何可比的AFAIK.
这个问题有一个很好的解决方法吗?
我能想到的有四种实现能够将SVG图形加载到Delphi应用程序中.
其中一个由Mattias Andersson(他是FMX.Canvas.VPR 的作者)与FireMonkey合作,但他还没有准备好发布代码.
第二个是由Martin Walter与VCL合作,但是开发人员退出Delphi并且没有计划转换为FireMonkey.
第三个是AGGPAS框架的一部分,与VCL一起工作,但没有FireMonkey.
Jason Southwell正在开发第四个,但尚未确定日期.
所以我的问题是:如果我今天想要一个SVG组件,而不是试图重新发明第五个(可能更多)的时间,那么我们要走哪条路?
对于Delphi VCL,有TWebBrowser一些第三方组件TEmbeddedWebBrowser可用于浏览网页.
是否有类似的Web浏览器组件,但对于Delphi XE2中的Firemonkey框架(理想情况下支持Windows和Mac)?
晚上好!
在当前的项目中,我遇到了一个相当令人担忧的内存泄漏,我似乎无法插入.
我让应用程序在标准使用情况下一夜之间运行,当我8小时后醒来时,它耗尽了大约750MB的内存,而它的起始速度却达到了50MB左右.Windows任务管理器不适合检查泄漏,除了允许您首先发现存在泄漏.
我已经清理了一些其他的内存泄漏,主要的一个与Firemonkeys有关TGlowEffect.它没有被检测到,ReportLeaksOnShutdown但是它的内存使用量在动态修改的对象上变得极其过度(例如旋转或缩放变化).
我已经将它跟踪到一个计时器(并且禁用它可以完全阻止泄漏),如果可能的话我需要帮助修复它.
说明:此代码使用Firemonkey MakeScreenshot函数将a的视觉外观保存TPanel (SigPanel)到a TMemoryStream.然后使用标准代码将此流数据上载到远程FTP服务器(见下文).在里面SigPanel,有4个TLabel孩子,1个TRectangle孩子和6个TImage孩子.
注意:CfId是一个全局字符串,它是根据随机extended浮点值生成的,随后浮点值将与格式化的DateTime一起进行哈希处理yyyymmdd_hhnnsszzz.这一代在创建表单时完成,并且一直重复直到它变为有效CfId(即不包含在Windows文件名中使用的非法字符).一旦它获得有效CfId,它就不会再次运行(因为我不再需要生成新的ID).这使我几乎可以完全消除重复的可能性CfId.
计时器中的代码如下;
var
i : Integer;
SigStream : TMemoryStream;
begin
SigStream := TMemoryStream.Create;
SigPanel.MakeScreenshot.SaveToStream(SigStream);
SigPanel.MakeScreenshot.Free;
if VT2SigUp.Connected then
begin
VT2SigUp.Put(SigStream,'Sig_'+CfId+'.png',False);
end else
begin
VT2SigUp.Connect;
VT2SigUp.Put(SigStream,'Sig_'+CfId+'.png',False);
end;
SigStream.Free;
end;
Run Code Online (Sandbox Code Playgroud)
与定时器NOT完全运行,则代码功能而不泄漏和ReportMemoryLeaksOnShutdown不NOT生成的消息.启用定时器并允许至少"运行"一次,我得到大量泄漏,这会增加计时器运行的次数.报告的泄漏情况如下;
Small Block Leaks
1 - 12 …Run Code Online (Sandbox Code Playgroud) 目前我有一个TCube阵列
CreateCube : array[1..1000] of tcube;
Run Code Online (Sandbox Code Playgroud)
目前使用它们作为地图,因此您可能有30个立方体宽,20个立方体高,从而形成一个大网格.但是1000个立方体并不足以满足我的需要,我需要更多像10,000个立方体.
有这样大小的阵列会导致问题吗?还有其他选择吗?
在VCL,我可以从资源加载一个字体而不保存它我可以从内存中使用它.
这是我使用的代码,它适用于VCL:
procedure TForm1.Button1Click(Sender: TObject);
var
ResStream : tResourceStream;
FontsCount : DWORD;
begin
ResStream := tResourceStream.Create(hInstance, 'MyResourceName', RT_RCDATA);
winapi.windows.AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount);
ResStream.Free();
button1.Font.name := 'MySavedFontNameInResource';
end;
Run Code Online (Sandbox Code Playgroud)
在Firemonkey我刚改变button1.Font.name,button1.Font.family但不幸的是字体没有改变.所以我认为这段代码与firemonkey不兼容.
那么在Firemonkey中,如何从资源加载字体并将其临时保存到内存并直接从那里使用?
我看到这些页面:在firemonkey中安装字体,如何使用外部字体?
根据Ed先生的回答,似乎FMX中没有解决这个问题的方法.但也许我们可以加载字体,如果我们在运行应用程序之前安装它.我几乎尝试了一切,但我仍然无法加载字体.
我一直在设计FireMonkey控件,但有一个问题我遇到了一些实际问题,那就是如何使用FireMonkey样式设计器(特别是Bitmap样式设计器)将位图合并到FireMonkey样式中.某些样式对象(例如,TButtonStyleObject)具有BitmapLink属性,但我无法看到它们如何在为FireMonkey控件生成的新自定义样式中工作.
让我试着让问题尽可能透明.我添加了一个样书并将其资源设置为Delphi样式目录中的MetropolisUIGreen.Style(在XE7中,它位于C:\ Users\Public\Documents\Embarcadero\Studio\16.0\Styles中).然后我打开FireMonkey样式设计器并找到按钮式样式,它由TButtonStyleObject和TButtonStyleTextObject组成,两者都是TLayout的父级.TButtonStyleObject的SourceLookup属性值为MetroGreenstyle.png,它是一个StyleName,与加载了MetropolisUIGreen.png图像的TImage相关联.
选择TButtonStyleObject(其StyleName为背景),我检查NormalLink属性,它是TBitmapLinks的集合.据我所知,我在NormalLink中定义的BitmapLink包含有关应该用于按钮的位图的信息,包括与MetroGreenstyle.png文件的矩形区域对应的坐标(SourceRect).
我的假设似乎是错误的,因为当我使用图形程序检查MetroGreenstyle.png时,这些坐标没有什么有趣的.我已经研究过的许多其他风格的BitmapLinks,有太多我发现,与sourceRect坐标似乎并不实际定义stylelookup png文件的有意义的区域.
我显然有这个错误.BitmapLink的SourceRect坐标如何定义FireMonkey在渲染控件时应使用的位图.
- 编辑我实际问了四个问题.我已将此问题更新为仅包含一个问题.我将在其他帖子中包含其他问题. -
我想动态地将一个TEditButton放在ListView的搜索框中,所以我这样做了:
ListView := TListView.Create(Self);
ListView.Parent := Self;
ListView.Name := 'hello';
ListView.Height := 369;
ListView.Width := 369;
ListView.Align := TAlignLayout.Bottom;
ListView.SearchVisible := True;
ListView.BeginUpdate;
for i := 0 to ListView.controls.Count - 1 do
begin
if ListView.controls[i].ClassType = TSearchBox then
begin
SearchBox := TSearchBox(ListView.controls[i]);
end;
end;
OKbtn := TEditButton.Create(SearchBox);
OKbtn.Parent := SearchBox;
OKbtn.Text := 'OK';
OKbtn.Width := 30;
SearchBox.AddObject(OKbtn);
ListView.EndUpdate;
Run Code Online (Sandbox Code Playgroud)
但问题是clear button在编辑搜索框时也会出现问题.如何删除搜索框右侧的清除按钮(X)?
delphi ×10
firemonkey ×10
delphi-xe2 ×5
android ×1
delphi-xe5 ×1
fonts ×1
ios ×1
listview ×1
macos ×1
memory-leaks ×1
svg ×1