标签: delphi-10.4-sydney

Android 的 TMemo (Firemonkey) 问题和奇怪的行为

在我的应用程序中使用 Tmemo,允许用户输入笔记,我发现在编辑文本或使用退格键时,会发生非常奇怪的事情。

例如,无法将光标移动到文本的末尾,或者删除单词的某些字母,在这种情况下,文本将完全被其他意想不到的单词替换。我发布了一段视频,展示了这种奇怪的行为。

不知道有没有相关性,但是当文本来自键盘提供的语音听写,或者文本是由软键盘的预测建议选择的单词组成时,问题似乎更明显.

这个问题在旧版本的 Delphi (Xe 10.1) 中已经存在,但是通过修改一些 pas 文件并将 calssex 文件替换为在网上找到的新 classex.dex 来解决。

现在我正在使用 Delphi 10.4 Sydney patch3

经过测试

  • 平板电脑联想 tb-x606x 安卓 9
  • 小米笔记 7 安卓 10
  • 华为 p20 pro 安卓 10
  • 三星 S7 安卓 8
  • 三星 A40 安卓 10

无论如何,我也附上了一个测试的来源,在那里可以看到Tmemo的奇怪行为。

我还在 Embarcadero 质量支持 ( RSP-31362 )上开了一张票

视频(链接在这里

源代码(链接在这里

我在 Embarcadero 质量支持RSP-31134 的另一张票中发现了同样的问题

delphi android firemonkey delphi-10.4-sydney

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

Delphi 记录分配错误

我遇到了 delphi XE3 编译器的一些奇怪行为(我为 x86 架构编译)。

想象一下,我有一个包含一个字段的类 - 具有多个简单类型字段的自定义记录:

  TPage = class
  type
    TParagraph = record
    public
      FOwner:  TPage;

      FFirst:  Integer;
      FSecond: Integer;

      procedure Select;
    end;
  public
    FSelected: TParagraph;
  end;

procedure TPage.TParagraph.Select;
begin
  FOwner.FSelected:=Self;
end;
Run Code Online (Sandbox Code Playgroud)

逻辑是我的页面可以包含多个段落,在某些时候我希望选择其中一个段落(以便能够在程序的其他部分中使用它执行一些操作):

procedure TMainForm.Button1Click(Sender: TObject);
var
  lcPage:      TPage;
  lcParagraph: TPage.TParagraph;
begin
  lcPage:=TPage.Create;
  try
    <...>

    lcParagraph.FOwner:=lcPage;
    lcParagraph.FFirst:=1;
    lcParagraph.FSecond:=2;

    lcParagraph.Select;

    <...>
  finally
    lcPage.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

当我的记录不超过一定大小时,一切都可以。一个引用和两个整数就可以了,在这种情况下,我得到如下汇编指令:

MainUnit.pas.350: FOwner.FSelected:=Self;
00C117B3 8B45FC           mov eax,[ebp-$04]
00C117B6 8B00             mov eax,[eax]
00C117B8 8B55FC           mov edx,[ebp-$04]
00C117BB 8B0A             mov ecx,[edx]
00C117BD 894804           mov [eax+$04],ecx
00C117C0 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe3 delphi-10.4-sydney

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

Delphi - 启动时出现套接字错误 10038。怎么解决呢?

我在启动时收到套接字错误 10038。

在此输入图像描述

如何解决这个错误?

delphi delphi-10.4-sydney

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

Delphi 源代码中可以使用哪些 Unicode 字符?

我注意到 Delphi 中支持一些表情符号和特殊字符作为变量名称,例如

\n\n
var\n  \xe2\x9d\xa4 : string;\n  \xe2\x85\x96 : double;\nbegin\n  \xe2\x9d\xa4 := 'My heart';\n  ShowMessage(\xe2\x9d\xa4);\n  \xe2\x85\x96 := 0.4;\n  ShowMessage(\xe2\x85\x96.ToString);\nend;\n
Run Code Online (Sandbox Code Playgroud)\n\n

有谁知道可以使用的有趣字符的完整列表吗?\n可以通过Win+[.](Windows 键加点)在 Win10 中调出表情符号字符。

\n

delphi delphi-10.4-sydney

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

为什么在 VCL 控件上调用 TRttiContext.GetType 时某些属性会重复?

当在 VCL 控件上调用 TRttiContext.GetType 时,为什么某些属性会重复(例如ActionAlign),而其他属性则不会 ( AlignWithMargins)?

uses
  System.RTTI,
  System.Generics.Collections,
  System.Generics.Defaults;

//....

procedure TForm11.btnShowPropertiesClick(Sender: TObject);
var
  R: TRttiContext;
  Props: TArray<TRttiProperty>;
  Prop : TRttiProperty;
begin
  memo1.Clear;
  R := TRttiContext.Create;
  Props := R.GetType(Sender.ClassType).GetProperties;

  //Sort properties by name
  TArray.Sort<TRttiProperty>(props,
    TComparer<TRttiProperty>.Construct(
      function(const Left, Right: TRttiProperty): Integer
      begin
        result := CompareText(Left.Name, Right.Name);
      end
    )
  );

  for prop in Props do
  begin
    try
      Memo1.Lines.Add(
         Prop.Name + ' : ' +
         Prop.PropertyType.ToString + ' = ' +
         Prop.GetValue(Sender).ToString);
    except
      Memo1.Lines.Add(Prop.Name + ' …
Run Code Online (Sandbox Code Playgroud)

delphi rtti delphi-10.4-sydney

6
推荐指数
2
解决办法
192
查看次数

在 Delphi 应用程序的图标上动态插入数字

我在 Delphi 10.4 上。

我正在寻找一种在任务栏上的应用程序图标上动态插入数字的方法,以便用户可以知道到目前为止应用程序完成了多少任务。这将是动态的,只要应用程序执行新任务,它就会增加图标的数量。

类似于下图。

这可能吗 ?

我没有任何代码可以在这里发布,因为我不知道如何做到这一点。

在此处输入图片说明

windows delphi icons delphi-10.4-sydney

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

“引用”在 Delphi 中究竟做了什么?

在阅读Delphi匿名方法的文档时我开始怀疑。我一直使用这样的东西:

type TMathFn = Function(A, B: Integer): Integer;
var fn: TMathFn;
Run Code Online (Sandbox Code Playgroud)

一直为我工作。但是这个文件告诉我改用这个:

type TMathFn = Reference to Function(A, B: Integer): Integer;
var fn: TMathFn;
Run Code Online (Sandbox Code Playgroud)

因为我从 1994 年到 2010 年一直在 Delphi 中进行开发,所以我对这个“参考”部分有点陌生。尽管如此,这两个选项似乎工作相同。所以……
它们是一样的吗?

delphi anonymous-types delphi-10.4-sydney

5
推荐指数
2
解决办法
211
查看次数

如何在我自己的组件中实现主题支持?

我正在尝试制作自己的组件,其主题与应用程序的其余部分相同(主题在 中设置Project > Options > Application > Appearance)。

该控件源自TWinControl(下图红框中)。如何将应用程序主题应用到我的组件?我将在上面使用很多标准控件,如按钮、编辑等。

图像

我试图在谷歌中找到一些东西,但也许我的英语是问正确问题的问题:)

delphi vcl delphi-10.4-sydney

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

Winapi.ShLwApi.StrFormatByteSize64 将我的应用程序视为 DLL

在 Delphi 10.4 中,当尝试使用Winapi.ShLwApi.StrFormatByteSize64Int64文件大小值转换为格式化字符串时,出现运行时错误:

var
  ThisSize: Int64;
  pszBuf: PWideChar;
  cchBuf: Cardinal;

Winapi.ShLwApi.StrFormatByteSize64(ThisSize, pszBuf, cchBuf);
Run Code Online (Sandbox Code Playgroud)

错误信息:

--------------------------- MyApp.exe - 未找到入口点
--------------- ------------ 在 DLL "C:\DELPHI\MyApp\Win32\Debug\MyApp.exe" 中找不到过程入口点 "StrFormatByteSize64W"。
- - - - - - - - - - - - - - 好的


如何解决这个问题呢?

delphi winapi filesize delphi-10.4-sydney

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

以编程方式为 DELETE 键创建快捷方式字符串?

在 Windows 10 x64 中的 Delphi 10.4.2 Win32 VCL 应用程序中,我使用此代码以编程方式为弹出菜单项上的 DELETE 键创建快捷方式字符串:

mGalleryDeleteSelected.Caption := mGalleryDeleteSelected.Caption + #9 + MyShortcutToString(VK_DELETE, []) + ' ';
Run Code Online (Sandbox Code Playgroud)

这是源代码:

function MyGetKeyName(AKey: Integer): string;
var
  name: array[0..128] of Char;
begin
  FillChar(name, SizeOf(name), 0);
  GetKeyNameText(MapVirtualKey(AKey, 0) shl 16, @name[0], Length(name));
  Result := name;
end;

function MyModifierVirtualKey(AModifier: Integer): Integer;
begin
  case AModifier of
    Ord(ssShift):
      Result := VK_SHIFT;
    Ord(ssCtrl):
      Result := VK_CONTROL;
    Ord(ssAlt):
      Result := VK_MENU;
  else
    Result := 0;
  end;
end;

function MyShortcutToString(AKey: Integer; AShiftState: TShiftState = []): …
Run Code Online (Sandbox Code Playgroud)

delphi keyboard-shortcuts delphi-10.4-sydney

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