刚刚开始测试FireMonkey,无法找到制作动态大小/定位组件的方法.
VCL有Anchor属性,FM没有.
有人看到我错过的东西
更新:
FM中没有简单的锚定功能.您必须创建TLayouts并对齐它们,然后将控件放在面板中以使它们"粘住".如果您使用的是旧版本的Builder或Delphi,这将与我们以前与TPanels相同.
根据Delphi XE2的发行说明.FireMonkey可以创建高清应用程序.HD代表高清晰度.为何选择HD?VCL应用程序无法像FireMonkey一样创建高清应用程序吗?
刚刚玩了一些FireMonkey.
如果我创建一个高清应用程序,那么我可以正常添加按钮等.
如果我创建一个3D应用程序,当我向表单添加按钮/备忘录时,它们不会显示.
这是在VMWare Fusion下运行Windows 7的XE2(启用了3D图形).
是否有任何理由让应用程序使用高清表格,如果不是图形/游戏,它只是一个带有按钮/编辑/备忘录的"商业"应用程序?
它们之间有什么区别,为什么重要?阅读Delphi XE2:为什么FireMonkey应用程序是高清?没有帮助.
我创建了一个带有3个半透明tImage3D的FireMonkey应用程序.这是代码和屏幕.一切似乎都很好.
procedure TForm1.Form3DCreate(Sender: TObject);
// create a new semi-transparent timage3d
// object with color and Z position.
procedure NewImage ( const nColor : tColor;
const nZ : integer );
begin
// create the image
with tImage3D . Create ( self ) do
begin
// put it on the screen
Parent := self;
// set the size
Width := 10;
Height := 10;
// set the image to a single pixel.
Bitmap . Width := 1;
Bitmap . Height := 1; …Run Code Online (Sandbox Code Playgroud) 我想知道是否已在任何目标之外释放拖动的控件.
有人会认为应该使用OnDragEnd,但该事件不起作用(他们忘记调用FMX.Types单元中的DragEnd过程).
作为替代方案,我尝试使用OnMouseUp进行拖动控制.不行.DragMode = dmAutomatic时不会触发.
作为最后的手段,我试图覆盖表单本身的MouseUp过程(因为所有鼠标事件在传递给相应的控件之前都会通过表单).惊喜:当控件的DragMode = dmAutomatic时,不会调用MouseUp过程.
令人惊讶的是,这非常简单,这是非常难以实现的,但我希望有人可能找到了一个有效的解决方案.
我正在寻找建议的解决方案来设置由OnGetValue调用绘制的TGrid单元格(称为在视图中绘制单元格).对于背景,Mike的出色反应展示了如何在创建单元格时简单地应用tAlign属性; 但我的下一个挑战是着色细胞内容.
目标是更改我将要返回的值的单元格属性(字体,样式,颜色等...)作为单元格"值".在下面的例子中; 它将一个样式应用于正在返回的OnGetValue"值".很可能我们必须通过FM样式表来做到这一点; 或者我们可以直接获得TText属性吗?理想情况下,两种情况都很棒 - 但在这个阶段我会采取任何解决方案......(; - >
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Grid,
FMX.Layouts, FMX.Edit;
type
TForm1 = class(TForm)
Grid1: TGrid;
Button1: TButton;
StyleBook1: TStyleBook;
procedure Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: Variant);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TStringColNum = class(TStringColumn)
private
function CreateCellControl: TStyledControl; override;
published
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
function TStringColNum.CreateCellControl: TStyledControl; …Run Code Online (Sandbox Code Playgroud) 我需要在我的Delphi XE5 FireMonkey(Android)移动应用程序中存储一些自定义的静态数据.我在网上看过'RC_DATA'解决方案,但它是特定于Windows的.我需要一个跨平台的解决方案.
这是我发现的RC_DATA解决方案:http://delphidabbler.com/articles?article = 2
代码示例中的注释读取://资源类型 - RT_RCDATA(来自Windows单元)
我从这篇评论中得出结论,Windows单元中的代码是特定于Windows的.如果不是这样,我道歉.
既然Chris说它实际上是跨平台的,我会尝试一下.谢谢克里斯.
关于要求组件或库,我已阅读并重新阅读我的问题,我只是没有看到它.我猜一个'解决方案'可能会包含一个组件或库,但这在我看来并不存在.如果我做错了,我再次道歉.
我想在Memo for Android中列出所有可用的原始传感器数据.
以下代码在过去几年中起作用,但它不适用于XE8.可能存在内部编译器错误.我有什么办法可以让它再次运作,还是有替代解决方案?
uses
TypInfo;
type
TOrientationSensorAccessor = class(TCustomOrientationSensor);
TLocationSensorAccessor = class(TCustomLocationSensor);
procedure TForm2.Button1Click(Sender: TObject);
var
p_location: TCustomLocationSensor.TProperty;
p_orientation: TCustomOrientationSensor.TProperty;
n, v: string;
begin
Memo1.Lines.Clear;
if Assigned(OrientationSensor1.Sensor) then
begin
if not OrientationSensor1.Sensor.Started then OrientationSensor1.Sensor.Start;
// Error (only in XE8): Incompatible types 'TCustomLocationSensor.TProperty' and 'TCustomOrientationSensor.TProperty'
// In XE7 it works.
for p_orientation in OrientationSensor1.Sensor.AvailableProperties do
begin
n := 'OrientationSensor.'+GetEnumName(TypeInfo(TCustomOrientationSensor.TProperty), integer(p_orientation)) ;
v := FloatToStr(TOrientationSensorAccessor(OrientationSensor1.Sensor).GetDoubleProperty(p_orientation));
Memo1.Lines.Values[n] := v;
end;
end;
if Assigned(LocationSensor1.Sensor) then
begin
if not LocationSensor1.Sensor.Started then LocationSensor1.Sensor.Start;
for p_location …Run Code Online (Sandbox Code Playgroud) XE8中的表单自动添加使用System.ImageList.就像在embarcadero网站上说:
System.ImageList包含实现图像列表最基本的设备无关功能的FireMonkey和VCL代码的通用代码.System.ImageList包含支持图像列表中的图像之间的交互并使用它们组件(如控件,菜单项等)的代码.
但我的同事们大多仍在使用XE7.现在,他们需要在我提交后不断删除该用途.当我删除它时,我的XE8会自动添加此用途.在我提交另一个编辑器之前,我可以删除用途.但是当我阻止XE8添加这部分代码时,它会更有效率.或者Firemonkey和VCL会不能正常工作?
所以我的问题是:我可以阻止XE8将System.ImageList添加到我在表单中的使用吗?
从2018年8月起,Google Play上的所有新应用都必须定位到Android 8(API级别26)或更高级别,从2018年11月起,Google Play上的所有应用更新都必须使用Google Play上的相同应用.
现在,你必须上传一个面向Android 8的新应用程序的唯一方法是编辑文件AndroidManifest.template.xml并将targetSdkVersion ="%targetSdkVersion%"替换为:Android:targetSdkVersion ="26"
问题是,从那一刻起,应用程序就有了Android O引入的限制.被认为是危险的权限(相机,位置,短信......)不会被仅仅通过将它们包含在AndroidManifest中的事实授予应用程序文件.再见相机,GPS,......
在此Web中,您可以按照几个简单的步骤开始向用户请求权限:http: //delphiworlds.com/2018/05/targeting-android-8-and-higher/
但是,目标Android 8有更多的含义.我的应用程序,因为仅将应用程序未运行(或在后台运行)时将targetSDKVersion从25更改为26的事实不会收到推送通知.
我的测试很简单:我更改了targetSDK,它不再起作用了.我回放它再次运行,无论是应用程序运行还是应用程序在后台或关闭.
关键是TARGETSDKVERSION的更改,因为我一直尝试在SDK Manager中选择SDK 24.3.3.
我认为其中一个主要原因是Android O中背景服务的消失,正如他们在https://blog.klinkerapps.com/android-o-background-services/中解释的那样但我不确定.
我的大问题.
我刚刚将Google 7(Level 25)应用程序上传到Google Play.问题是,截至2018年11月,如果我没有将TARGETSDKVERSION更改为26级,我将无法上传更新.但如果我这样做...我将停止接收PUSH通知,并且没有PUSH通知,我的应用程序不工作为了任何东西.
我承认我对此有点害怕
对不起我的英语.
非常感谢你.
delphi ×10
firemonkey ×10
delphi-xe2 ×5
android ×2
delphi-xe8 ×2
c++builder ×1
drag ×1
grid ×1
vcl ×1