• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi解决点击主屏左侧图片按钮图片闪烁厉害的问题。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

交流QQ:2609715119

加上锁屏控制就会好点:

   lockwindowupdate(form1.handle);
  Notebook1.ActivePage := '3';
  lockwindowupdate(0); 

 在主窗口resize 事件里开头和结尾加上:
  SendMessage(Form1.Handle, RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT + WM_SETREDRAW, 0, 0);
中间是控制控件位置的代码行
  SendMessage(Form1.Handle, RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT + WM_SETREDRAW, 1, 0);

代码含义解释:

 MDI窗体,样子像Windows的Explorer资源管理器,侧边栏里的条目用于切换各个MDI子窗体,因显示时出现花屏现象(不能一次全部完整显示),曾采取如下方案进行优化:

1. 把切换时动态创建、释放的窗体资源修改成全局的,用Form.Show()、Form.Hide()取代。 

    效果不明显。

  

2. 使用Windows API 中的LockWindowUpdate函数:  

1 frmChild1.Hide( );              // 隐藏当前显示的子窗体
2 
3 LockWindowUpdate(this.Handle);  // 锁定父窗体
4 frmChild2.Show( );              // 显示窗体等其他需要再显示前做的事
5 LockWindowUpdate (IntPtr.Zero); // 解锁父窗体
6 RedrawWindow (this.Handle, IntPtr.Zero, IntPtr.Zero, 
  	RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); // (0x04 | 0x01 | 0x80)立即强制重绘父窗体及其所有子窗体

    效果好转,但人眼还能看到一些花屏现象,仍不能一次全部完整显示。

  

3. 使用Windows API中的SendMessage函数: 

1 frmChild1.Hide( );
2 
3 SendMessage(this.Handle, WM_SETDRAW, false, null);  // 禁止窗体中的绘制操作 ----- 1
4 frmChild2.Show( );                                  // 显示窗体等其他需要再显示前做的事
5 SendMessage(this.Handle, WM_SETDRAW, true, null);   // 解除禁止绘制操作     ----- 2
6 RedrawWindow (this.Handle, IntPtr.Zero, IntPtr.Zero, 
  	RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); // (0x04 | 0x01 | 0x80)立即强制重绘父窗体及其所有子窗体

几乎可以全部显示完整,达到了显示要求。但是,鼠标点击切换子窗体时,如果在窗体切换没有完成 (frmChild2未显示出来frmChild1未消失时) 时再次点击窗体任意区域,就会**隐藏在父窗体后的其他应用程序的窗体,然后屏幕就花了,如果后面是记事本,鼠标形状就变成了输入的形状,父窗体的、其他应用程序的,都显示不完整,鼠标移过的地方,其他应用程序的窗体才显示。 

确定问题就在12之间,SendMessage函数使用的问题。想要的效果是:鼠标在父窗体任意区域点击都只对当前窗体有效,不会**后面的窗体,也不会变成后面窗体中鼠标的形状。




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GDI+ 在Delphi程序的应用 -- 图像饱和度调整发布时间:2022-07-18
下一篇:
matlab快速入门(23):入门摘要发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap