惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
博客园 - Franky
MyScale Blog
MyScale Blog
L
LangChain Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
量子位
A
About on SuperTechFans
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
V
Visual Studio Blog
Vercel News
Vercel News
B
Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
U
Unit 42

博客园 - 秋·风

修复lazarus datetimepicker控件在linux下拉不能选择日期的bug 用fpc trunk编译lazarus控件找不到TTimeZone 在银河麒麟v10操作系统应用程序执行遇到“权限不够”的提示 修复pl_cindy的Panel系列控件在gtk3出错的bug 龙芯 3A4000工具链的编译(mingw64) lazarus 4.8及之前的版本QT5中文输入多字词组时只输入前2个中文 修正lazarus在GTK3下的Synedit只能输入2个中文字符的Bug lazarus trunk linux从2026.07.02开始,LCLWidgetType默认使用gtk3,怎样改回gtk2 【aarch64-win64】DonAlfredo终于修复fpc将TSmallPoint赋值为一个负数,并将TSmallPoint赋值给TPoint时得到一个655xx的数值的bug lazarus编译时提示链接出错的处理方法 mORMot2两个BUG 【aarch64-win64】发现fpc aarch64-win64 将TSmallPoint赋值为一个负数,并赋值给TPoint时得到一个655xx的数值的bug 修复aarch64 win64下lazarus不弹出SourceTabPopUpMenu fpc aarch64-win64版编译应用时遇到一个奇怪的bug 在windows 11 on arm64系统编译lazarus出错的处理方法 修复TDBMemo只读不能使用Ctrl+C复制文字的Bug freepascal打补丁后已支持windows 11 on arm64(lazarus aarch64 windows版也可以运行了) 查看libc.so.6的版本号 Lazarus移动版启动程序 fpc 3.2.2交叉编译i386-linux链接出错 lazarus鸿蒙开发13:使用鸿蒙原生API画图--lazarus侧关键代码 lazarus鸿蒙开发12:使用鸿蒙原生API画图--鸿蒙侧关键代码 lazarus鸿蒙开发11:使用鸿蒙原生接口画图 lazarus鸿蒙开发10:lazarus一键编译、打包助手 lazarus鸿蒙开发9:使用命令行编译DevEco Studio应用 lazarus鸿蒙开发8:在DevEco Studio的日志窗口显示日志信息 lazarus鸿蒙开发7:在 Windows 上为 OpenHarmony (LoongArch64) 编译 Qt 5.15.12 SDK 指南 lazarus鸿蒙开发6:鸿蒙project配置 lazarus鸿蒙开发5:编译ohos_hap_project lazarus鸿蒙开发4:编译OHOS_QT_Lazarus
fastreport报表编辑器在aarch64等非x86_64 CPU第一次打开慢的...
秋·风 · 2026-05-26 · via 博客园 - 秋·风

fastreport报表编辑器在aarch64等非x86_64 CPU第一次打开慢的解决方案,这个方案是由“安全生产监管QQ 327846439”提供的,非常感谢“安全生产监管”的无私分享!
在aarch64慢主要是解压gzip资源非常耗时,他将设计器用到的500多个资源图片,从fr的资源提前处理并解压出来,经处理后,第一次打开报表编辑器从10多秒提升到2秒左右。
1、打开Sources/FastReport/FPC/Sources/frxRes.pas

  TfrxImageResources = class(TfrImageResources)
  private
    FDisabledButtonImages: TImageList;
    FMainButtonImages: TImageList;
    FPreviewButtonImages: TImageList;
    FObjectImages: TImageList;
    FWizardImages: TImageList;
    function GetDisabledButtonImages: TImageList;
    function GetMainButtonImages: TImageList;
    function GetPreviewButtonImages: TImageList;
    function GetObjectImages: TImageList;
    function GetWizardImages: TImageList;
  protected
    procedure ClearFields; override;
  public
    procedure SetButtonImages(Images: TBitmap; Clear: Boolean = False);
    procedure SetObjectImages(Images: TBitmap; Clear: Boolean = False);
    procedure SetPreviewButtonImages(Images: TBitmap; Clear: Boolean = False);
    procedure SetSpeedButtonGlyph(AButton: TSpeedButton; AIndex: Integer);  //delete fix for Transperent when WinLaz fix it.
    procedure SetWizardImages(Images: TBitmap; Clear: Boolean = False);
    procedure PreloadImages; virtual;//<---添加这行

    property DisabledButtonImages: TImageList read GetDisabledButtonImages;
    property MainButtonImages: TImageList read GetMainButtonImages;
    property PreviewButtonImages: TImageList read GetPreviewButtonImages;
    property ObjectImages: TImageList read GetObjectImages;
    property WizardImages: TImageList read GetWizardImages;
    property ImagesPPI;
  end;

在适当位置添加以下代码:

procedure TfrxImageResources.PreloadImages;
{$IFDEF Linux}
var
 BaseDir: string;
 Ok: Boolean;
{$ENDIF}
begin
  {$IFDEF Linux}
  BaseDir := ExtractFilePath(ParamStr(0)) + 'frx_images' + PathDelim;
  if DirectoryExists(BaseDir) then
  begin
    Ok := LoadImageListFromPngFiles(BaseDir + 'MainButtonImages' + PathDelim, FMainButtonImages, 16, 16);
    if Ok then
    begin
      Ok := LoadImageListFromPngFiles(BaseDir + 'ObjectImages' + PathDelim, FObjectImages, 16, 16);
      if Ok then
      begin
        Ok := LoadImageListFromPngFiles(BaseDir + 'PreviewButtonImages' + PathDelim, FPreviewButtonImages, 16, 16);
        if Ok then
        begin
          Ok := LoadImageListFromPngFiles(BaseDir + 'DisabledButtonImages' + PathDelim, FDisabledButtonImages, 16, 16);
          if Ok then
          begin
            Ok := LoadImageListFromPngFiles(BaseDir + 'WizardImages' + PathDelim, FWizardImages, 32, 32);
          end;
        end;
      end;
    end;
  end;
{$endif}
  FDisabledButtonImages := GetDisabledButtonImages;
  FMainButtonImages := GetMainButtonImages;
  FPreviewButtonImages := GetPreviewButtonImages;
  FObjectImages := GetObjectImages;
  FWizardImages := GetWizardImages;
end;

2、打开/Sources/FastReport/FPC/Sources/frxClass.pas
在initialization后面添加红色代码:

initialization

{$IFDEF Linux}
  if DirectoryExists(ExtractFilePath(ParamStr(0)) + 'frx_images') then
    frxImages.PreloadImages;
{$endif}

{$IFDEF DELPHI16}
  StartClassGroup(TControl);

3、下载frx_images.zip(http://sgamer.oicp.net:8888/%E5%85%B6%E5%AE%83%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6/frx_images.zip
1)将这个压缩包解压到用到fr的主程序相同的目录

image

 2)将这个目标拷贝到lazarus这个目录

image

 4、重新编译fr控件及重构lazarus,打开报表编辑器从之前要10多秒,现在只需2秒左右,速度提升十分明显。
注意:
如果没frx_images目录,第一次打开报表编辑器时速度和原来没修改是一样的。