Delphi解決點擊主屏左側圖片按鈕圖片閃爍厲害的問題。

來源:互聯網
上載者:User

交流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);  // 禁止表單中的繪製操作 ----- 14 frmChild2.Show( );                                  // 顯示表單等其他需要再顯示前做的事5 SendMessage(this.Handle, WM_SETDRAW, true, null);   // 解除禁止繪製操作     ----- 26 RedrawWindow (this.Handle, IntPtr.Zero, IntPtr.Zero,   RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); // (0x04 | 0x01 | 0x80)立即強制重繪父表單及其所有子表單

幾乎可以全部顯示完整,達到了顯示要求。但是,滑鼠點擊切換子表單時,如果在表單切換沒有完成 (frmChild2未顯示出來frmChild1未消失時) 時再次點擊表單任意地區,就會啟用隱藏在父表單後的其他應用程式的表單,然後螢幕就花了,如果後面是記事本,滑鼠形狀就變成了輸入的形狀,父表單的、其他應用程式的,都顯示不完整,滑鼠移過的地方,其他應用程式的表單才顯示。 

確定問題就在1與2之間,SendMessage函數使用的問題。想要的效果是:滑鼠在父表單任意地區點擊都只對當前表單有效,不會啟用後面的表單,也不會變成後面表單中滑鼠的形狀。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.