打开Delphi操作时出现“Out of System Resources”错误求助
Delphi点击操作弹出“Out of system resources.”错误的排查与解决
问题描述
本周初起,打开Delphi并执行点击操作时,会弹出错误弹窗提示Out of system resources.,错误堆栈信息如下:
[79F73147]{vcl280.bpl } Vcl.Graphics.OutOfResources (Line 4432, "Vcl.Graphics.pas" + 1) + $1C [79F731EE]{vcl280.bpl } Vcl.Graphics.GDIError (Line 4458, "Vcl.Graphics.pas" + 13) + $0 [79F73223]{vcl280.bpl } Vcl.Graphics.GDICheck (Line 4463, "Vcl.Graphics.pas" + 1) + $4 [79F78C73]{vcl280.bpl } Vcl.Graphics.CopyBitmap (Line 7871, "Vcl.Graphics.pas" + 27) + $17 [79F796B3]{vcl280.bpl } Vcl.Graphics.TBitmap.CopyImage (Line 8232, "Vcl.Graphics.pas" + 13) + $F [79F7B8D7]{vcl280.bpl } Vcl.Graphics.TBitmap.SetSize (Line 10012, "Vcl.Graphics.pas" + 10) + $9 [7A0A6C6C]{vcl280.bpl } Vcl.Themes.TStyleHook.WMPaint (Line 7539, "Vcl.Themes.pas" + 17) + $14 [7A0A70E5]{vcl280.bpl } Vcl.Themes.TStyleHook.WndProc (Line 7713, "Vcl.Themes.pas" + 38) + $6 [7A0A72C6]{vcl280.bpl } Vcl.Themes.TMouseTrackControlStyleHook.WndProc (Line 7812, "Vcl.Themes.pas" + 1) + $4 [7A03A63A]{vcl280.bpl } Vcl.ComCtrls.TToolBarStyleHook.WndProc (Line 34652, "Vcl.ComCtrls.pas" + 6) + $4 [7A0A690A]{vcl280.bpl } Vcl.Themes.TStyleHook.HandleMessage (Line 7418, "Vcl.Themes.pas" + 20) + $6 [7A1CAE92]{vcl280.bpl } Vcl.Styles.TStyleEngine.HandleMessage (Line 3610, "Vcl.Styles.pas" + 22) + $7 [7A0A3338]{vcl280.bpl } Vcl.Themes.TStyleManager.HandleMessage (Line 5872, "Vcl.Themes.pas" + 11) + $11 [79F9B1D3]{vcl280.bpl } Vcl.Controls.TWinControl.DoHandleStyleMessage (Line 9462, "Vcl.Controls.pas" + 0) + $F [79F9CBE8]{vcl280.bpl } Vcl.Controls.TWinControl.WndProc (Line 10475, "Vcl.Controls.pas" + 1) + $4A [7A02A1BE]{vcl280.bpl } Vcl.ComCtrls.TToolBar.WndProc (Line 25701, "Vcl.ComCtrls.pas" + 104) + $6 [79F9C700]{vcl280.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 10321, "Vcl.Controls.pas" + 3) + $6 [7B285C1C]{rtl280.bpl } System.Classes.StdWndProc (Line 18517, "System.Classes.pas" + 8) + $0 [7A0E5263]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 11488, "Vcl.Forms.pas" + 23) + $1 [7A0E528E]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessages (Line 11510, "Vcl.Forms.pas" + 1) + $4 [00D777FF]{bds.exe } AppMain.TAppBuilder.ApplicationActivated (Line 2750, "AppMain.pas" + 0) + $7 [7A13F0EB]{vcl280.bpl } Vcl.AppEvnts.TCustomApplicationEvents.DoActivate (Line 210, "Vcl.AppEvnts.pas" + 1) + $12 [7A13F78D]{vcl280.bpl } Vcl.AppEvnts.TMultiCaster.DoActivate (Line 438, "Vcl.AppEvnts.pas" + 5) + $C [7A0E4713]{vcl280.bpl } Vcl.Forms.TApplication.WndProc (Line 11063, "Vcl.Forms.pas" + 140) + $C [7B170E36]{rtl280.bpl } System.TMonitor.Exit (Line 20101, "System.pas" + 2) + $7 [7B281724]{rtl280.bpl } System.Classes.CheckSynchronize (Line 15817, "System.Classes.pas" + 66) + $5 [06146E97]{fmx280.bpl } FMX.Platform.Win.TPlatformWin.ThreadSync (Line 3503, "FMX.Platform.Win.pas" + 3) + $2 [7B285C1C]{rtl280.bpl } System.Classes.StdWndProc (Line 18517, "System.Classes.pas" + 8) + $0 [7A0A3338]{vcl280.bpl } Vcl.Themes.TStyleManager.HandleMessage (Line 5872, "Vcl.Themes.pas" + 11) + $11 [7A0E5263]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 11488, "Vcl.Forms.pas" + 23) + $1 [7A0E528E]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessages (Line 11510, "Vcl.Forms.pas" + 1) + $4 [00D777FF]{bds.exe } AppMain.TAppBuilder.ApplicationActivated (Line 2750, "AppMain.pas" + 0) + $7 [7A13F0EB]{vcl280.bpl } Vcl.AppEvnts.TCustomApplicationEvents.DoActivate (Line 210, "Vcl.AppEvnts.pas" + 1) + $12 [7A13F78D]{vcl280.bpl } Vcl.AppEvnts.TMultiCaster.DoActivate (Line 438, "Vcl.AppEvnts.pas" + 5) + $C [7A0E4713]{vcl280.bpl } Vcl.Forms.TApplication.WndProc (Line 11063, "Vcl.Forms.pas" + 140) + $C [7B285C1C]{rtl280.bpl } System.Classes.StdWndProc (Line 18517, "System.Classes.pas" + 8) + $0 [7A0E5263]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 11488, "Vcl.Forms.pas" + 23) + $1 [7A0E528E]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessages (Line 11510, "Vcl.Forms.pas" + 1) + $4 [00DC8090]{bds.exe } bds.bds (Line 224, "" + 13) + $2
已尝试卸载并重新安装组件,且电脑内存、CPU资源充足,但问题仍未解决。
原因分析
从错误堆栈可以看出,错误触发于VCL样式渲染流程中:当Toolbar控件绘制时,TStyleHook尝试复制位图、设置位图尺寸,最终触发GDI资源耗尽报错。这里的「系统资源」并非指常规的内存或CPU,而是Windows GDI对象(如位图、画笔、设备上下文等)——每个Windows进程的GDI对象数量有默认上限(通常为10000),当进程占用的GDI对象接近或达到该上限时,就会抛出此类错误。
可能的触发场景:
- VCL样式渲染逻辑存在GDI对象泄漏,或单次渲染申请过多GDI资源;
- 第三方IDE插件/组件存在GDI对象泄漏,随操作次数累积导致资源耗尽;
- IDE配置损坏,导致样式渲染逻辑异常。
解决步骤
- 禁用VCL样式:打开Delphi,依次进入「工具」→「选项」→「用户界面」→「外观」,取消勾选「使用Windows主题」,重启IDE后测试。由于错误直接关联Vcl.Themes模块,禁用样式可快速验证是否为样式渲染导致的问题。
- 排查第三方插件:启动Delphi时按住
Shift键,跳过所有第三方插件加载。若此时错误消失,说明问题源于某个插件,可逐个启用插件排查具体组件,找到后更新或卸载该插件。 - 重置IDE配置:备份
C:\Users\<你的用户名>\AppData\Roaming\Embarcadero\BDS\<你的Delphi版本号>文件夹,然后删除该文件夹,重启IDE让其生成默认配置,验证问题是否解决。 - 监控GDI对象数量:打开任务管理器,右键点击列头勾选「GDI对象」,观察bds.exe进程的GDI对象数量。若操作时数量快速增长至接近10000,说明存在GDI泄漏,需针对性排查插件或组件。
- 更新Delphi:若为IDE自身Bug,安装对应版本的最新更新补丁,Embarcadero可能已修复此类GDI资源相关问题。
内容的提问来源于stack exchange,提问作者Martin Kakhuis
相关产品推荐
相关产品推荐

