You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Builder中VCL应用FormCreate事件绘图不显示问题求助

问题原因分析
  • FormCreate阶段窗口未完全就绪:FormCreate触发时,窗体句柄还没完全创建好,这时候用Canvas画的内容会被后续窗体初始化的重绘操作彻底覆盖。哪怕你手动调用Invalidate和Update,也拦不住默认重绘清掉图形。
  • 绘图时机不对:VCL的绘图逻辑必须放在OnPaint事件里执行,这是VCL专门处理窗体重绘的事件,不管是首次显示、窗口变样还是被遮挡后恢复,都会触发这个事件,能保证你画的图形一直显示。
解决步骤
  1. 打开窗体设计器,选中Form1,在Object Inspector的Events面板找到OnPaint,双击生成FormPaint函数。
  2. 把原来FormCreate里的DrawShapes()调用移到FormPaint里。
  3. 下拉框的LoadCombos()继续留在FormCreate里,这部分初始化逻辑没问题。
  4. 要是想确保窗体一显示就触发绘图,可以在FormCreate最后加一句Form1.Invalidate;。
额外提醒
  • 确认DrawShapes()里用的是窗体自带的Canvas对象,而且绘制坐标要在窗体的ClientRect范围内,别画到看不见的地方。
  • 如果DrawShapes()里有和窗体尺寸相关的计算,要用当前的ClientWidth和ClientHeight,别写死固定值,不然窗口大小一变图形就错位了。

内容的提问来源于stack exchange,提问作者Skypilot65

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:59:58