4I必须将字符串写入二进制MIDI文件.该标准要求人们知道字符串的长度(以字节为单位).因为我想为移动设备写作,所以我不能使用AnsiString,这是确保字符串是一个单字节字符串的好方法.这简化了事情.我测试了以下代码:
TByte = array of Byte;
function TForm3.convertSB (arg: string): TByte;
var
i: Int32;
begin
Label1.Text := (SizeOf (Char));
for i := Low (arg) to High (arg) do
begin
label1.Text := label1.Text + ' ' + IntToStr (Ord (arg [i]));
end;
end; // convert SB //
convertSB ('MThd');
Run Code Online (Sandbox Code Playgroud)
它在Windows和Android中返回2 77 84 104 100(作为标签文本).这是否意味着Delphi默认将字符串视为UTF-8?这将大大简化一些事情,但我无法在帮助中找到它.将此转换为字节数组的最佳方法是什么?读取每个字符并测试它是1,2或4字节并在数组中分配此空间?要转换回字符:只读取字节数,直到遇到一个字节<128?
我正在编写一个需要看起来像老式终端会话的备忘录组件.这应该非常简单,但FireMonkey样式的工作方式似乎令人难以置信的复杂.
在非移动FireMonkey应用程序中,我可以右键单击一个控件并选择"编辑自定义样式".此选项在移动应用中不可用.以下是其中一位FireMonkey开发人员给出的原因.
它支持iOS和Android上的不同风格.我们无法在iOS风格的Android上运行应用程序.但是当您尝试更改平台样式时,我们将自动在每个目标平台上使用它.如果要更改fm控件的默认样式,则应该在表单样式书中添加样式,或者加载到样式表平台样式并对其进行更改.
同样非常重要的是,当您在样式簿中加载平台样式时,您可能希望该应用程序实例不具有两个平台样式副本(一个 - fmx包中的系统和样式簿中的其他副本).为此,您应该在TStylebook.UseStyleManager中设置标志true.在这种情况下,样式书中的样式将取代平台样式.
好的,所以我想我需要创建一个自定义样式.如何创建自定义样式以仅覆盖字体和背景属性?
我想我可以覆盖这样的ApplyStyle过程.
procedure TMyMemo.ApplyStyle;
var
BackgroundObject: TFmxObject;
begin
inherited;
BackgroundObject := FindStyleResource('content');
if Assigned(BackgroundObject) then
begin
// Change the background color of the background
end;
end;
Run Code Online (Sandbox Code Playgroud)
我如何知道背景对象的类型以及需要更改的属性?
当然,改变一个控件的背景颜色不是这么难!我错过了FM风格的基本内容吗?
有没有人想出如何在FireMonkey应用程序,HD或3D中显示流畅的视频(即一系列位图)?在VCL中,您可以从一个线程写入画布,这将完美地工作,但这在FMX中不起作用.更糟糕的是,显然唯一可靠的方法是使用TImage,这似乎是从主线程更新(打开菜单和视频暂时冻结).我可以找到的所有EMB示例都可以从主线程写入TImage,或者使用Synchronize().这些限制使FMX无法用于体面的视频显示,因此我正在寻找黑客或可能绕过FMX.我使用XE5/C++但欢迎任何建议.目标操作系统是Windows 7+和OS X.谢谢!
我想用固定的StringGrid创建一个iOS应用程序.这个东西的每个单元格都应该只接受数值.为此,我想将KeyboardType设置为vktNumberPad ...但到目前为止还没有找到一个入口点.这里有没有人知道如何做到这一点?
好的,所以跟随Mikes提示我开始使用我自己的列类.
TNumEditCell = class(TEdit)
end;
TNumberColum = class(TStringcolumn)
private
function CreateCellControl: TStyledControl; override;
end;
Run Code Online (Sandbox Code Playgroud)
这里有令人困惑的部分:
function TNumberColum.CreateCellControl: TStyledControl;
begin
result := TNumEditCell.Create(Self);
TNumEditCell(result).KeyboardType := vktNumberPad; // <- is undeclared!! What?!
TNumEditCell(result).OnChange := DoTextChanged;
end;
Run Code Online (Sandbox Code Playgroud)
我们的好朋友编译器不知道是什么vktNumberPad.即使我用电线杆指着他FMX.Types.TVirtualKeyboardType(vktNumberPad).我想我做错了什么:(
最终编辑:正如彼得指出的那样,我确实做错了什么.所以使用上面的代码和Peters暗示一切正常.嗯......我怎么完成这个问题?
我在Delphi XE4 for iOS中创建了一个小应用程序.我有7个表格.一切都很好.
但我对文件大小有点震惊!它在模拟器上44MB.我为android制作的应用程序几乎是2MB.它的背景图像是jpg格式的320kb我还没有在iPhone设备上测试它!
如果您在XCode上使用表单上的ListBox,文本,按钮创建,那么正常大小的应用程序是什么?
有没有办法通过更改Delphi中的任何设置来减少文件大小?
当我TLabel在表单上放置时,我可以通过更改FontColor属性来更改其文本的颜色.但是,当我在我的程序中执行此操作时
Label1.FontColor := TAlphaColors.Aquamarine;
Run Code Online (Sandbox Code Playgroud)
这不起作用.知道什么是错的吗?
目前,项目名称用作设备主屏幕图标下的标题(标题)。不幸的是,这不允许我使用空格。
VCL 应用程序具有应用程序“标题”属性。您可以从选项表单(应用程序 | 外观 | 标题)访问它。您设置的值显示为任务栏中的标题。
如何使用FiremonkeyFM³获得屏幕尺寸?以下代码:
var
Size: TPointF;
begin
Size := FMX.Platform.IFMXScreenService.GetScreenSize;
...
end;
Run Code Online (Sandbox Code Playgroud)
导致此编译器错误:
[dcc32 Error] Unit1.pas(46): E2018 Record, object or class type required
Run Code Online (Sandbox Code Playgroud)
我该如何使用IFMXScreenService界面来获取屏幕尺寸?
我试图从TLayout控件生成位图.要做到这一点,我正在使用TControl.Makescreenshot功能.在Windows上测试应用程序时,一切都按预期工作:

但是,运行在iOS,安卓(包括模拟器和真实设备)的应用程序时,结果是这样的(图像周围的红色边框绘制只是位图的边界内):

在移动版本中,图像是一半大小并且边框被裁剪.
这是我使用的代码:
(.PAS)
unit Unit15;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Objects, FMX.Layouts, FMX.Edit;
type
TForm15 = class(TForm)
Layout1: TLayout;
Image1: TImage;
Button1: TButton;
CheckBox1: TCheckBox;
Label1: TLabel;
Switch1: TSwitch;
ArcDial1: TArcDial;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form15: TForm15;
implementation
{$R *.fmx}
procedure TForm15.Button1Click(Sender: TObject);
begin
Image1.Bitmap := Layout1.MakeScreenshot;
Image1.Bitmap.Canvas.BeginScene;
try
Image1.Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Red; …Run Code Online (Sandbox Code Playgroud) 是否有任何演示可用于显示如何在移动应用程序中处理多分辨率图像,例如按钮图像,闪屏和背景?我正在尝试制作一个在许多分辨率上看起来不错的应用程序,但我在执行它时遇到了问题.
例如,如果我在三星Galaxy Tab 2.0 7中加载我的应用程序,它将自动加载我所拥有的1.0的比例,但如果我在三星galaxy s4中加载我的应用程序,那么它将加载1.5比率的图像.现在......如果我使用480x800的比例1的图像,对于Galaxy Tab 2.0的屏幕而言,它有点小,如果我再次在具有较小屏幕的移动设备中加载应用程序,其将使用比率1.0,图像尺寸为好.
由于我不能指定两个不同的分辨率图像到一个特定的比例我应该如何正确使用TImage的MultiResolution属性?
firemonkey-fm3 ×10
delphi ×9
delphi-xe5 ×6
firemonkey ×5
delphi-xe4 ×3
ios ×2
android ×1
c++ ×1
colors ×1
label ×1
string ×1
styles ×1
timage ×1
video ×1