标签: firemonkey

在FireMonkey中锚定GUI组件

刚刚开始测试FireMonkey,无法找到制作动态大小/定位组件的方法.

VCL有Anchor属性,FM没有.

有人看到我错过的东西

更新:

FM中没有简单的锚定功能.您必须创建TLayouts并对齐它们,然后将控件放在面板中以使它们"粘住".如果您使用的是旧版本的Builder或Delphi,这将与我们以前与TPanels相同.

delphi c++builder delphi-xe2 firemonkey c++builder-xe2

7
推荐指数
3
解决办法
3535
查看次数

Delphi XE2:为什么FireMonkey应用程序是高清?

根据Delphi XE2的发行说明.FireMonkey可以创建高清应用程序.HD代表高清晰度.为何选择HD?VCL应用程序无法像FireMonkey一样创建高清应用程序吗?

delphi delphi-xe2 firemonkey

7
推荐指数
3
解决办法
2849
查看次数

Firemonkey - 使用HD还是3D?

刚刚玩了一些FireMonkey.

如果我创建一个高清应用程序,那么我可以正常添加按钮等.

如果我创建一个3D应用程序,当我向表单添加按钮/备忘录时,它们不会显示.

这是在VMWare Fusion下运行Windows 7的XE2(启用了3D图形).

是否有任何理由让应用程序使用高清表格,如果不是图形/游戏,它只是一个带有按钮/编辑/备忘录的"商业"应用程序?

它们之间有什么区别,为什么重要?阅读Delphi XE2:为什么FireMonkey应用程序是高清?没有帮助.

delphi delphi-xe2 firemonkey

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

Firemonkey半透明Image3D有时是不透明的

我创建了一个带有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)

delphi firemonkey

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

如何确定拖动操作是否已在FireMonkey中结束?

我想知道是否已在任何目标之外释放拖动的控件.

有人会认为应该使用OnDragEnd,但该事件不起作用(他们忘记调用FMX.Types单元中的DragEnd过程).

作为替代方案,我尝试使用OnMouseUp进行拖动控制.不行.DragMode = dmAutomatic时不会触发.

作为最后的手段,我试图覆盖表单本身的MouseUp过程(因为所有鼠标事件在传递给相应的控件之前都会通过表单).惊喜:当控件的DragMode = dmAutomatic时,不会调用MouseUp过程.

令人惊讶的是,这非常简单,这是非常难以实现的,但我希望有人可能找到了一个有效的解决方案.

delphi drag delphi-xe2 firemonkey

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

Firemonkey网格控件 - 根据值设置单元格样式(通过OnGetValue函数调用)

我正在寻找建议的解决方案来设置由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 grid delphi-xe2 firemonkey

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

Delphi FireMonkey在应用程序中存储数据

我需要在我的Delphi XE5 FireMonkey(Android)移动应用程序中存储一些自定义的静态数据.我在网上看过'RC_DATA'解决方案,但它是特定于Windows的.我需要一个跨平台的解决方案.

这是我发现的RC_DATA解决方案:http://delphidabbler.com/articles?article = 2

代码示例中的注释读取://资源类型 - RT_RCDATA(来自Windows单元)

我从这篇评论中得出结论,Windows单元中的代码是特定于Windows的.如果不是这样,我道歉.

既然Chris说它实际上是跨平台的,我会尝试一下.谢谢克里斯.

关于要求组件或库,我已阅读并重新阅读我的问题,我只是没有看到它.我猜一个'解决方案'可能会包含一个组件或库,但这在我看来并不存在.如果我做错了,我再次道歉.

delphi firemonkey

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

在备忘录中列出原始传感器数据

我想在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)

delphi android firemonkey delphi-xe8

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

我可以阻止XE8添加System.ImageList吗?

XE8中的表单自动添加使用System.ImageList.就像在embarcadero网站上说:

System.ImageList包含实现图像列表最基本的设备无关功能的FireMonkey和VCL代码的通用代码.System.ImageList包含支持图像列表中的图像之间的交互并使用它们组件(如控件,菜单项等)的代码.

但我的同事们大多仍在使用XE7.现在,他们需要在我提交后不断删除该用途.当我删除它时,我的XE8会自动添加此用途.在我提交另一个编辑器之前,我可以删除用途.但是当我阻止XE8添加这部分代码时,它会更有效率.或者Firemonkey和VCL会不能正常工作?

所以我的问题是:我可以阻止XE8将System.ImageList添加到我在表单中的使用吗?

delphi vcl firemonkey delphi-xe8

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

Delphi - Google Play上的新应用必须定位到Android 8(API级别26) - 后台的PUSH通知

从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 android firemonkey targetsdkversion

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