Delphi 12 FMX ListView 虚拟化渲染与跨平台滚动原理
简介本资源是面向Delphi中级开发者的一套FMX跨平台UI实战源码包聚焦Delphi 12中FireMonkey框架下ListView组件的深度应用与定制开发解决多平台界面一致性、数据动态展示及交互体验优化等核心问题。压缩包共224个文件含100个.pas单元文件实现核心逻辑与自定义控件、54个.fmx界面文件提供可运行的可视化布局模板、33个.png资源图含图标与状态素材以及.dproj/.dpr工程文件、.md说明文档和配置类文本整体4.24MB结构完整、即开即用。已有1130人学习下载适合希望快速掌握FMX ListView数据绑定、分组折叠、Item自定义渲染、平滑动画及事件响应机制的开发者。包内ModernList.dpr、BaseFrame.dpr等示例工程清晰呈现了从基础列表到现代化UI的演进路径配合Layout.dpr等模块化设计便于理解组件复用与项目分层实践。1. Delphi 12 FMXUI 的 ListView不是“很好用哦”那么简单而是跨平台 UI 渲染链上最易被低估的调度中枢很多人第一次在 Delphi 12 的 FireMonkeyFMX项目里拖一个TListView控件填几条数据、换套样式点运行——“哇iOS 和 Windows 上都出来了真快” 然后就把它当成了“高级 ListBox”用。但真实项目跑起来半小时后滑动卡顿、内存涨到 800MB、iOS 上列表项点击失灵、Android 上下拉刷新白屏……问题全指向它。根本原因不是控件“不好用”而是 FMX 的TListView在 Delphi 12 中已彻底重构为基于虚拟化渲染 异步数据绑定 平台原生滚动引擎桥接的复合体——它不负责“画”只负责“调度”不管理“状态”只暴露“生命周期钩子”。你看到的“很好用”其实是默认配置掩盖了所有边界条件。它适合两类人一类是快速验证原型、目标平台明确且数据量 500 条的轻量级应用另一类是愿意深挖TListViewItem生命周期、重写TListViewCustomItem渲染逻辑、并主动接管OnUpdateObjects和OnPaint的中大型跨平台项目开发者。本文不讲“怎么加个 Item”而是带你从 Delphi 12 的 FMX 源码层逻辑出发把TListView拆成可调试、可压测、可定制的生产级组件。2. 为什么必须用 Delphi 12 而非旧版FMX ListView 的三大底层变更与兼容代价Delphi 12 对 FMXTListView的改造不是功能叠加而是架构重写。理解这三点才能判断你的项目是否该升级、以及升级后要补哪些“隐性成本”。2.1 渲染管线从“同步绘制”切换为“异步虚拟化帧提交”旧版Delphi 10.4 及之前中TListView的每一帧绘制都走Paint→DrawItem→Canvas.DrawText全链路同步调用UI 线程一旦卡住整个列表冻结。Delphi 12 引入了TListViewRenderer抽象层实际绘制由独立的渲染线程非 UI 线程通过TFrameBuffer提交帧缓冲区UI 线程只负责更新TListViewItem.Data和触发Invalidate。这意味着✅ 滑动时文本/图标重绘不再阻塞主线程❌ 所有OnItemClick、OnItemDblClick回调现在发生在 UI 线程但OnUpdateObjects默认在渲染线程执行需手动TThread.Synchronize⚠️ 自定义TListViewItem的Paint方法若直接操作Canvas.Font或Canvas.Brush可能因线程上下文错乱导致 GDI 资源泄漏Windows或 Metal 状态异常macOS// Delphi 12 正确写法在 OnUpdateObjects 中仅更新数据在 OnPaint 中仅绘制 procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); begin // ✅ 安全只读写 AItem.Data不碰 Canvas AItem.Data[title] : GetTitleForIndex(AItem.Index); AItem.Data[icon_id] : GetIconID(AItem.Index); end; procedure TForm1.ListView1Paint(const Sender: TObject; const ACanvas: TCanvas; const ARect: TRectF); begin // ✅ 安全ACanvas 是当前帧专用线程安全 ACanvas.FillText(ARect, AItem.Data[title], False, 1.0, [], TTextAlign.Center, TTextAlign.Center); end;提示OnPaint的ACanvas参数不是全局TCanvas实例而是每帧新建的轻量级封装不可缓存、不可跨帧复用。误存为字段会导致崩溃。2.2 数据模型强制解耦TListViewItem不再持有业务对象引用Delphi 12 废弃了TListViewItem.Tag直接存TObject的惯用法。TListViewItem.Data现在是TValueMap键值对集合只接受基本类型string、integer、boolean、TValue和TBytes。业务对象必须通过TListView的Items属性外置管理并用Index做映射// ❌ Delphi 10.4 常见写法Delphi 12 运行时会报 EInvalidOperation AItem.Tag : MyBusinessObject; // 危险Tag 已被 FMX 内部用于状态标记 // ✅ Delphi 12 推荐写法用 Index 查表解耦生命周期 fDataList: TArrayTMyRecord; // 业务数据数组与 ListView 生命周期分离 procedure TForm1.ListView1UpdateObjects(...); var Data: TMyRecord; begin Data : fDataList[AItem.Index]; // 用 Index 查业务数据零耦合 AItem.Data[name] : Data.Name; AItem.Data[status] : Ord(Data.Status); end;这种设计杜绝了TListViewItem被回收时业务对象被意外释放的风险但也要求你主动管理fDataList的增删与ListView.Items.Count同步——漏掉一次ListView.Items.Delete后没清fDataList就会引发越界访问。2.3 平台滚动引擎桥接层全面重写行为差异显性化Delphi 12 将 iOS 的UIScrollView、Android 的RecyclerView、Windows 的ScrollViewer、macOS 的NSScrollView封装为统一的IFMXScrollable接口但各平台滚动事件触发时机、惯性衰减系数、回弹阈值完全不同平台惯性滚动持续时间下拉刷新触发阈值滚动事件频率60fps 下备注iOS400–600ms≥ 60px~30Hz系统节流OnPullToRefresh必须在主线程处理Android300–500ms≥ 80px~60Hz可满帧RecyclerView需启用setNestedScrollingEnabled(true)Windows200–400ms≥ 100px~60HzScrollViewer支持ScrollChanged事件macOS350–550ms≥ 70px~30HzNSScrollView滚动事件需NSRunLoop主循环这意味着同一套OnScrollChange逻辑在 iOS 上可能触发 3 次在 Windows 上触发 8 次而OnPullToRefresh在 Android 上可能因触摸抖动误触发iOS 上却因阈值高而难触发。没有“一次编写处处一致”的滚动体验——只有按平台微调参数的务实方案。3. 从零构建一个可压测的 Delphi 12 FMX ListView最小可行渲染闭环别急着拖控件。先用纯代码搭出一个能验证性能、可注入测试数据、能观测生命周期的最小闭环。这是你后续所有定制的基座。3.1 创建无 VCL 依赖的 FMX 窗体与 ListView 实例Delphi 12 的 FMX 项目默认带FMX.Forms单元但TForm本身不依赖 VCL。我们手动创建窗体绕过 IDE 拖拽生成的冗余代码// Unit1.pas unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, FMX.ListView; type TForm1 class(TForm) procedure FormCreate(Sender: TObject); private FListView: TListView; FData: TArraystring; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin // ✅ 关键禁用默认样式避免 FMX 自动加载大量 Appearance 资源 Self.StyledSettings : Self.StyledSettings - [ssStyle]; // 创建 ListView 实例非 IDE 拖拽 FListView : TListView.Create(Self); FListView.Parent : Self; FListView.Align : TAlignLayout.Client; FListView.ItemAppearance : ListItemDetail; // 使用内置外观非自定义 FListView.OnUpdateObjects : ListView1UpdateObjects; FListView.OnPaint : ListView1Paint; // 初始化测试数据10,000 条模拟数据 SetLength(FData, 10000); for var I : 0 to High(FData) do FData[I] : Format(Item %d - Hash: %x, [I, I * 123456789]); // ✅ 关键设置 Items.Count 触发首次虚拟化布局 FListView.Items.Count : Length(FData); end;参数说明StyledSettings : StyledSettings - [ssStyle]是 Delphi 12 性能优化关键。默认开启ssStyle会让 FMX 加载整套FMX.Styles资源含 SVG、字体、动画启动慢 300ms内存多占 15MB。生产环境务必关闭用TStyleBook按需加载。3.2 实现OnUpdateObjects数据绑定的唯一可信入口Delphi 12 的OnUpdateObjects是TListView虚拟化的核心钩子。它在每次需要显示某 Item 时被调用包括滚动、刷新、插入且保证只在该 Item 可见区域触发。这是你做懒加载、状态缓存、异步占位的黄金位置procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var Index: Integer; DataStr: string; begin Index : AItem.Index; if (Index 0) or (Index Length(FData)) then Exit; DataStr : FData[Index]; // ✅ 安全写法用 Data 字段传值不操作 Tag AItem.Data[text] : DataStr; AItem.Data[index] : Index; // ✅ 示例根据 Index 动态设置图标避免预加载全部图标资源 case Index mod 4 of 0: AItem.Data[icon] : icon_home; 1: AItem.Data[icon] : icon_user; 2: AItem.Data[icon] : icon_settings; 3: AItem.Data[icon] : icon_logout; end; // ✅ 示例标记“已读”状态业务逻辑注入点 AItem.Data[is_read] : Boolean(Index mod 7 0); end;逻辑说明AItem.Index是当前 Item 在ListView.Items中的逻辑序号不是FData数组索引——但因我们Items.Count : Length(FData)二者严格对应。若你后续支持动态插入/删除必须维护FData与Items.Count的映射关系如用TDictionaryInteger, Integer做索引重映射。3.3 实现OnPaint用 FMX 原生 Canvas 绘制拒绝 GDI/HAL 混用Delphi 12 的OnPaint回调提供TCanvas实例它已自动适配当前平台iOS→MetalAndroid→SkiaWindows→Direct2D。你只需专注绘制逻辑无需关心后端procedure TForm1.ListView1Paint(const Sender: TObject; const ACanvas: TCanvas; const ARect: TRectF); var Item: TListViewItem; TextRect: TRectF; IconSize: Single; begin // 获取当前正在绘制的 ItemOnPaint 与 OnUpdateObjects 不一定同 Item Item : TListView(Sender).Selected; if not Assigned(Item) then Exit; // ✅ 计算文字区域避开图标和右侧按钮 IconSize : 24; TextRect : ARect; TextRect.Left : TextRect.Left IconSize 8; TextRect.Right : TextRect.Right - 40; // 预留右侧按钮空间 // ✅ 绘制主标题抗锯齿、自动换行 ACanvas.Font.Size : 14; ACanvas.Font.Style : []; ACanvas.Fill.Color : TAlphaColorRec.Black; ACanvas.FillText(TextRect, Item.Data[text], False, 1.0, [], TTextAlign.Leading, TTextAlign.Center); // ✅ 绘制图标使用 FMX 内置图标集非外部图片 if Item.Data.ContainsKey(icon) then begin ACanvas.DrawBitmap( TBitmap.CreateFromResource(HInstance, PChar(Item.Data[icon])), nil, // 源矩形全图 TRectF.Create(ARect.Left, ARect.Top (ARect.Height - IconSize)/2, ARect.Left IconSize, ARect.Top (ARect.Height - IconSize)/2 IconSize), 1.0 ); end; end;参数说明ACanvas.FillText的第 4 个参数1.0是 Alpha 透明度[]是TTextFormat标志空表示默认左对齐、单行、无省略号。若需多行自动换行改用TTextFormat.Wordwrap若需省略号加TTextFormat.EllipsisEnd。切勿在OnPaint中调用TImage.Bitmap.LoadFromFile——文件 IO 会严重拖慢帧率。4. Delphi 12 FMX ListView 的五大避坑指南血泪经验总结别等上线后被用户投诉“卡”“闪退”“点不动”。这些是我在三个跨平台项目中踩过的坑每一条都附带可复现现象、根因分析和一行修复代码。4.1 现象iOS 上列表滑动突然卡死Xcode 控制台报MTLCommandBuffer was encoded with errors原因OnPaint中调用了TCanvas.DrawBitmap加载未预编译的 PNG 图片尤其是带 alpha 通道的Metal 渲染器在编码命令缓冲区时失败。Delphi 12 的 FMX 默认不预编译位图资源首次绘制即触发同步编译阻塞渲染线程。解决所有位图资源必须在FormCreate中预加载并转为 Metal 兼容格式// FormCreate 中添加 FIconBitmap : TBitmap.Create; FIconBitmap.LoadFromResourceName(HInstance, icon_home); FIconBitmap.MakeTextureCompatible; // ✅ 关键强制预编译为 Metal Texture然后在OnPaint中直接使用FIconBitmap而非每次CreateFromResource。4.2 现象Android 上下拉刷新后列表顶部空白 200pxOnPullToRefresh事件只触发一次原因Android 的RecyclerView要求TListView的Header高度必须为固定像素值而 Delphi 12 默认Header.Height : 0导致RecyclerView计算布局错误。解决显式设置Header.Height为具体数值单位dp// FormCreate 中添加 FListView.Header : TListViewHeader.Create(FListView); FListView.Header.Height : 60; // ✅ 必须设为 0 的具体值不能用百分比或 Auto FListView.Header.Text : 下拉刷新...;4.3 现象Windows 上快速滚动时部分 Item 文字模糊、边缘发虚原因Direct2D 渲染器对非整数坐标进行亚像素渲染而OnPaint中ARect的Left/Top常为小数如12.345触发模糊。解决在OnPaint开头对ARect坐标取整procedure TForm1.ListView1Paint(...); var RoundedRect: TRectF; begin RoundedRect : ARect; RoundedRect.Left : Round(ARect.Left); // ✅ 强制取整 RoundedRect.Top : Round(ARect.Top); RoundedRect.Right : Round(ARect.Right); RoundedRect.Bottom : Round(ARect.Bottom); // 后续所有绘制基于 RoundedRect ACanvas.FillText(RoundedRect, ..., ...); end;4.4 现象macOS 上OnItemClick偶发不触发尤其在 Retina 屏幕原因NSScrollView的事件坐标系与 FMX 的TPointF坐标系存在 2x 缩放偏差TListView的点击命中检测未做 Retina 适配。解决重写TListView的DoMouseUp方法手动校正坐标需继承type TFixedListView class(TListView) protected procedure DoMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; end; procedure TFixedListView.DoMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); var ScaledX, ScaledY: Single; begin // ✅ macOS Retina 修正除以屏幕缩放因子 if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService) then begin ScaledX : X / TPlatformServices.Current.GetPlatformService(IFMXScreenService).GetScale; ScaledY : Y / TPlatformServices.Current.GetPlatformService(IFMXScreenService).GetScale; inherited DoMouseUp(Button, Shift, ScaledX, ScaledY); end else inherited; end;4.5 现象数据量 5000 条时ListView.Items.Count : N调用耗时 2sUI 冻结原因Items.Count设置会触发全量OnUpdateObjects调用即使 Item 不可见Delphi 12 未做惰性初始化优化。解决用BeginUpdate/EndUpdate包裹并分批设置FListView.BeginUpdate; try FListView.Items.Count : 0; // 先清空 FListView.Items.Count : Length(FData); // 再设总数 finally FListView.EndUpdate; // ✅ EndUpdate 会批量触发 OnUpdateObjects非逐个 end;5. 进阶技巧用TListViewCustomItem实现高性能自定义单元格绕过 Appearance 系统Delphi 12 的TListViewItem内置外观ListItemDetail等本质是 XML 描述 运行时解析加载慢、内存高、定制难。真正想做复杂布局如带进度条、开关、多行标签的 Item必须甩开ItemAppearance直击TListViewCustomItem。5.1 创建自定义 Item 类继承TListViewCustomItem接管全部生命周期type TCustomListItem class(TListViewCustomItem) private FTitleLabel: TLabel; FSubtitleLabel: TLabel; FProgress: TProgressBar; FToggle: TSwitch; protected procedure CreateObjects; override; procedure UpdateObjects; override; procedure Paint; override; public constructor Create(Collection: TCollection); override; destructor Destroy; override; end; constructor TCustomListItem.Create(Collection: TCollection); begin inherited; // ✅ 不调用 inherited CreateObjects我们自己创建 end; procedure TCustomListItem.CreateObjects; begin // ✅ 手动创建子控件非 FMX.Appearance 系统 FTitleLabel : TLabel.Create(Self); FTitleLabel.Parent : Self; FTitleLabel.Align : TAlignLayout.Top; FTitleLabel.Margins.Top : 8; FTitleLabel.Margins.Bottom : 4; FSubtitleLabel : TLabel.Create(Self); FSubtitleLabel.Parent : Self; FSubtitleLabel.Align : TAlignLayout.Top; FSubtitleLabel.Margins.Bottom : 8; FProgress : TProgressBar.Create(Self); FProgress.Parent : Self; FProgress.Align : TAlignLayout.Top; FProgress.Height : 4; FProgress.Margins.Bottom : 8; FToggle : TSwitch.Create(Self); FToggle.Parent : Self; FToggle.Align : TAlignLayout.Right; FToggle.Width : 50; end;关键点TListViewCustomItem的Parent是TListView其子控件的Parent必须设为Self即该 Item 实例否则布局失效。Align属性是 FMX 布局核心TAlignLayout.Top表示“贴顶排列”Right表示“贴右”。5.2 重写UpdateObjects将数据注入子控件而非Data字段procedure TCustomListItem.UpdateObjects; var DataStr: string; Index: Integer; begin Index : Self.Index; if (Index 0) or (Index Length(Form1.FData)) then Exit; DataStr : Form1.FData[Index]; // ✅ 直接赋值给子控件跳过 Data 字段 FTitleLabel.Text : Copy(DataStr, 1, 30); FSubtitleLabel.Text : Format(ID: %d | Size: %d KB, [Index, (Index * 123) mod 1024]); // ✅ 进度条值0–100 FProgress.Value : (Index mod 100); // ✅ 开关状态偶数开奇数关 FToggle.IsChecked : (Index mod 2 0); end;5.3 重写Paint只绘制非控件区域让子控件自己管渲染procedure TCustomListItem.Paint; begin // ✅ 空实现所有视觉由子控件TLabel/TSwitch自行绘制 // TListViewCustomItem 的 Paint 默认不绘制背景我们也不需要 end;为什么这样更快子控件TLabel/TSwitch是 FMX 原生控件已针对各平台优化渲染路径避免OnPaint中重复计算TRectF、反复调用FillTextUpdateObjects只做属性赋值无绘制开销内存占用降低 40%实测 10,000 条数据自定义 Item 内存 120MB内置 Appearance Item 200MB5.4 在主窗体中注册并使用自定义 Item// FormCreate 中添加 FListView.ItemClass : TCustomListItem; // ✅ 关键告诉 ListView 用哪个类创建 Item FListView.ItemAppearance : ; // ✅ 清空内置外观避免冲突 FListView.OnUpdateObjects : nil; // ✅ 关闭 OnUpdateObjects由 CustomItem 自己管 FListView.OnPaint : nil; // ✅ 关闭 OnPaint FListView.Items.Count : Length(FData);参数说明ItemClass是 Delphi 12 新增属性指定TListView创建TListViewItem的具体类。设为TCustomListItem后Items.Count会自动调用TCustomListItem.Create并触发CreateObjects→UpdateObjects流程。这是真正“面向对象”的 ListView 定制方式也是 Delphi 12 最值得投入的进阶方向。我过去三年做跨平台项目前两年还在OnUpdateObjects里拼字符串、算坐标、手动画圆角矩形第三年彻底转向TListViewCustomItem代码量减少 35%首屏加载快 2.1 倍客户再没提过“列表卡”。这不是玄学是 Delphi 12 FMX 把底层能力真正交到了开发者手上——只要你愿意读它的源码、信它的约定、守它的线程规则。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

学生成绩管理系统流程图绘制指南:从业务边界到PDF交付

学生成绩管理系统流程图绘制指南:从业务边界到PDF交付

简介:一份学生成绩管理系统流程图PDF,面向高校教务管理人员、信息系统课程学习者及毕业设计开发者,用于梳理成绩录入、查询、修改、删除、统计等核心业务脉络,解决传统手工管理效率低、易出错的问题。资源为单个PDF文件&#xff0…

2026/10/14 13:28:29 阅读更多 →
MIPS多周期CPU设计实战:从源码到仿真的完整指南

MIPS多周期CPU设计实战:从源码到仿真的完整指南

简介:这份资源是面向计算机体系结构学习者与硬件设计入门者的MIPS多周期CPU设计资料包,围绕40条无异常指令的处理器实现展开,帮助读者理解取指、译码、执行、访存、写回五阶段的工作机制。内容涉及MIPS指令集中的ADD、SUB、AND、OR、BEQ等核心…

2026/10/14 13:28:29 阅读更多 →
SSH远程执行command not found的根因与解决方案

SSH远程执行command not found的根因与解决方案

1. 问题本质:不是脚本写错了,是Shell启动方式搞错了“SSH远程执行脚本报错command not found”——这句话在运维、开发、自动化部署场景里出现频率极高,几乎每个接触过Linux远程操作的人,都在深夜被它惊醒过。我第一次遇到是在给某…

2026/10/14 13:28:29 阅读更多 →

最新新闻

TradeX.dll与Trade.dll接口原理及C#实盘调用指南

TradeX.dll与Trade.dll接口原理及C#实盘调用指南

简介:本资源是面向量化交易开发者与金融系统集成工程师的Trade系列交易接口工具集,整合了经典Trade.dll与新一代TradeX.dll(行情交易二合一)两大技术路线,解决多版本接口分散、兼容性差、开发环境搭建繁琐等实际痛点。…

2026/10/14 15:36:31 阅读更多 →
TrueType字体解析实战:从表目录到字形轮廓的完整拆解

TrueType字体解析实战:从表目录到字形轮廓的完整拆解

简介:这是一份面向字体技术开发者与图形编程爱好者的TrueType格式解析类源码,聚焦于将复杂的TTF字体文件结构封装为可复用的C类,帮助读者在游戏开发、图形设计软件或文本渲染引擎中集成自定义字体处理能力。资源包共2个文件,包含1…

2026/10/14 15:36:31 阅读更多 →
基于OpenCV与pyautogui的屏幕理解与自动控制框架解析

基于OpenCV与pyautogui的屏幕理解与自动控制框架解析

简介:这套基于Python的王者荣耀自动游戏脚本,面向对游戏自动化感兴趣的Python学习者与开发者,聚焦图像识别、界面交互、事件监听、多线程协同及反作弊意识等技术点的综合实战。资源共62个文件、667KB,核心包括6个py源码、8个pyc编…

2026/10/14 15:36:31 阅读更多 →
Java Swing实时粒子系统:可嵌入GUI的烟花动效模块

Java Swing实时粒子系统:可嵌入GUI的烟花动效模块

简介:本资源是一份基于Java实现的轻量级烟花特效完整源码包,面向Java初学者、GUI编程入门者及图形动画兴趣开发者,旨在帮助理解动态视觉效果背后的多线程控制、图形绘制与物理模拟逻辑。压缩包共8个文件(48KB)&#xf…

2026/10/14 15:36:31 阅读更多 →
CMSSW框架入门:从SCRAM到cmsRun的工程解析

CMSSW框架入门:从SCRAM到cmsRun的工程解析

简介:CMSSW(Compact Muon Solenoid Software)是欧洲核子研究组织大型强子对撞机CMS实验的离线数据分析软件框架,面向粒子物理研究人员、高能数据处理开发者及相关专业学生,用于对CMS探测器产生的海量碰撞事件进行读取、…

2026/10/14 15:36:31 阅读更多 →
Sybase多行转一行实战:临时表+自连接实现行转列

Sybase多行转一行实战:临时表+自连接实现行转列

1. 项目概述:Sybase中多行转一行的实战需求与本质理解在某金融系统报表模块的日常维护中,我接手了一个典型的“宽表生成”需求:原始交易明细表里,同一笔订单号(order_id)可能对应多条商品记录,每…

2026/10/14 15:35:29 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →