标签: delphi-10.1-berlin

如何在 Delphi 上最小化 Android 应用程序?

我试过:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
if Key = vkHardwareBack then begin
Key := 0;
Form1.WindowState := TWindowState.wsMinimized; // Also tried Application.MainForm
end;
end;
Run Code Online (Sandbox Code Playgroud)

但是,当您第一次点击时,屏幕会变黑,当您第二次点击时,应用程序将关闭。如何避免这种情况?

delphi android firemonkey delphi-10.1-berlin

2
推荐指数
1
解决办法
1047
查看次数

FireMonkey Android加速度传感器使用率高

当我尝试在Android中使用加速度传感器时,它会导致高CPU使用率 - 即使我尝试通过代码停止传感器并停用它.

我只需要在我的应用程序中读取一次加速度传感器,但看起来FireMonkey没有响应并且无法停止传感器.

这是代码:

var
  Sensor: TCustomSensor;
begin
   { attempt to get and activate the sensor manager }
  FSensorManager := TSensorManager.Current;
  FSensorManager.Activate;

  { attempt to get an orientation sensor }
  FSensors := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Motion);

  FSensor := nil;
  for Sensor in FSensors do
    if TCustomMotionSensor(Sensor).SensorType = TMotionSensorType.Accelerometer3D then
    begin
      FSensor := TCustomMotionSensor(Sensor);
      Break;
    end;

  if not Assigned(FSensor) then
  begin
    Exit; { no orientation sensor is available }
  end;

  { start the sensor if it is not started }
  if not FSensor.Started …
Run Code Online (Sandbox Code Playgroud)

delphi sensor firemonkey delphi-10.1-berlin

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

如何在FMX画布上的Delphi中画一条线

这是与Delphi Berlin 10.1 Update 2一起使用的

以下作品(画线):

brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Lightgray);
brush.Thickness := 2;
with Canvas do
begin
    BeginUpdate;
    DrawLine(PointF(10, 10), PointF(100, 10), 1, brush);
    EndUpdate;
end;
Run Code Online (Sandbox Code Playgroud)

以下内容不起作用:

with Canvas do
begin
    BeginUpdate;
    Stroke.Color := TAlphaColors.Black;
    Stroke.Thickness := 2.0;
    DrawLine(PointF(10, 10), PointF(100, 10), 1);
    EndUpdate;
end;
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用第二个?如何使它工作,还是应该像第一个示例一样坚持创建描边画笔?

我提供了一个最小的应用程序:

主目录

unit main;

interface

uses
    System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects;

type
    TMainForm = class(TForm)
        PaintBox: TPaintBox;
        procedure OnPaint(Sender: TObject; Canvas: TCanvas);
    private
        { Private declarations }
    public …
Run Code Online (Sandbox Code Playgroud)

delphi canvas paintbox firemonkey delphi-10.1-berlin

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

如何从XML文件中独立于区域设置正确读取浮点值?

我正在从XML文件中的节点读取浮点属性值TXMLDocument:

<MyApp_Favorites version="1.0">
Run Code Online (Sandbox Code Playgroud)

......发表声明:

var
  ThisRootNode: IXMLNode;
  ThisVersion: Single;

// ...

ThisVersion := ThisRootNode.Attributes['version'];
CodeSite.Send('ThisVersion', ThisVersion);
Run Code Online (Sandbox Code Playgroud)

但是,在我的德语系统上,我得到了这个版本值:

ThisVersion = 10,00

...在我的区域设置中,逗号","被定义为小数分隔符,而不是点"." 就像在XML文件中一样.但是使用英语区域设置 - 其中点最可能被定义为小数分隔符设置 - 结果将正确为"1.0".

那么如何确保独立于区域设置,1.0的读取值将始终相同?(将版本值读取为字符串,然后将其转换为float似乎不是一个非常优雅的方法).

xml delphi txmldocument regional-settings delphi-10.1-berlin

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

具有自动执行过程的对象

有没有办法用自动执行程序创建对象?例如,如果此对象中的变量已更改,则私有过程启动并开始执行某些操作?

delphi delphi-10.1-berlin

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

如何在我的窗体上的RadioGroup中禁用三个RadioButton中的一个

在我的表格上有一个TRadioGroup。在此TRadioGroup,我添加了3个项目。现在我想禁用一个项目在三个的TRadioGroup

我该怎么做呢?我写代码...

TRadioButton(rgbLoadSurveyTypes.Controls[1]).Enabled := True;
Run Code Online (Sandbox Code Playgroud)

...但它给错误“访问冲突”。出现此错误的原因是

rgbLoadSurveyTypes.Controls[1]赋予null价值并
rgbLoadSurveyTypes展示ControlCount = 0
Item Count = 3

delphi delphi-10.1-berlin

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

如何使用HTTP post方法发送位图

我想用HTTP POST方法发送位图图像.如何将其发送到URL?

我使用的是Indy 10和Delphi 10.1.在一个过程中,我创建了一个TStringList包含所有参数值,但我不知道如何传递位图数据.

这是我的代码:

procedure TuDm_Athlos.AddComandaInsertLogo(workList: TStringList;
  imageStream: TStream);
var
  image : TBitmap;
begin
  try
    image := TBitmap.Create;
    imageStream := TStream.Create;
    image.LoadFromFile('D:\\COFEE.BMP');
    image.SaveToStream(imageStream);
    workList.Add('db=titles');
    workList.Add('line_1=');
    worklist.Add('line_2=');
    workList.Add('line_3=');
    workList.Add('line_4=');
    workList.Add('line_5=');
    workList.Add('line_6=');
    workList.Add('store=&DB=PRN_UDG');
    workList.Add('code=1');
    workList.Add('width=' + IntToStr(image.Width));
    workList.Add('height=' + IntToStr(image.Height));
    workList.Add('length=576');
    workList.Add('store=');
  finally
    FreeAndNil(imageStream);
  end;
end;

function TuDm_Athlos.InsertLogo(imageStream: TStream;
  isFullResponse: Boolean): Boolean;
var
  StrResult     : UTF8String;
  workList      : TStringList;
  ContentStream : TStream;
  image         : TBitmap;
begin
  //Setup;
  Result := False;
  try
    try
      workList          := TStringList.Create;
      ContentStream     := …
Run Code Online (Sandbox Code Playgroud)

delphi indy http-post indy10 delphi-10.1-berlin

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

如何使用TArc制作Google加载微调器?

我正在考虑在一个对象中添加加载动画和进度弧(比如加载记录时的WhatsApp),所以我认为最好使用TArc和TFloatAnimation,因为我可以控制笔画的StartAngle和EndAngle.我试图让谷歌加载微调器逻辑,但我很困惑,看起来有一个FloatAnimation具有控制其中一个角度的"线性"插值属性,另一个看起来具有指数或正弦插值的开始/结束非常快,我看不到它,有人已经尝试重现它吗?谢谢.

来自网络的图片: 在此输入图像描述

delphi android android-animation delphi-10.1-berlin c++builder-10.1-berlin

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

将C标头转换为Delphi - 不透明数据类型

在转换过程中,我遇到了以下C代码:

/** Opaque data type for the error object.
*/
typedef struct kError * KErrorRef;
Run Code Online (Sandbox Code Playgroud)

在哪里kError申报?

Rudy Velthuis提供的转换工具生成以下代码:

type
  {$EXTERNALSYM KErrorRef}
  KErrorRef = ^kError;
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我收到此错误消息:

[dcc32 Error] ukError.pas(50): E2003 Undeclared identifier: 'kError'
Run Code Online (Sandbox Code Playgroud)

转换C代码的适当方法是什么?

delphi delphi-10.1-berlin

1
推荐指数
2
解决办法
115
查看次数

客户端连接到TIdTCPServer时线程数增加

我有一个使用Delphi 10.1创建的64位服务器应用程序,在此应用程序中我有一个TIdTCPServer组件。

当客户端连接时,线程数增加,而当客户端断开连接时,线程数没有减少。Windows Server计算机上会发生此问题。我没有处理OnConnectOnDisconnect事件中的任何代码。下面是我的OnExecute方法:

  try
      if not AContext.Connection.IOHandler.InputBufferIsEmpty then
      begin
        AContext.Connection.IOHandler.InputBuffer.ExtractToBytes(ReceivedIDBytes.PointerMessage.tyTIDBytes) ;
        ReceivedIDBytes.ClientSocket := AContext.Connection;
        MessageProcessorThread.ProcessMessageQueue.Enqueue(ReceivedIDBytes);
        IndySleep(50);
      end;
      IndySleep(5);
  except
  end;
Run Code Online (Sandbox Code Playgroud)

我应该使用它Application.ProcessMessages()来解决此问题吗?

由于线程数增加,我需要定期重新启动Server应用程序。

delphi indy tcpserver indy10 delphi-10.1-berlin

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