小问题:动态创建多个Frame,将Frame的Align设为alClient时屏幕闪得厉害,如何解决?(100分)

  • 主题发起人 主题发起人 Blueman
  • 开始时间 开始时间
B

Blueman

Unregistered / Unconfirmed
GUEST, unregistred user!
比如在Form上有一个Panel,上有两个Button,按Button1动态调入Frame1,释放Frame2,
将Frame1的Align设为alClient;按Button2动态调入Frame2,释放Frame1,将Frame2的
Align设为alClient; 运行时屏幕闪得厉害。
不知道M$的Money 2000是怎么做的,他不可能将调用过的所有Frame都不释放吧?
如何解决?
 
没有什么闪烁啊?
先调入Frame1,设完所有参数,再释放Frame2,没什么闪烁。

可能在调入和释放后又有其他的操作吧?
 
当然有啦,没有我也不会用100两银子来问大家呀!
 
在进行一系列操作前执行Form1.DisableAlign,在完成操作后再执行Form1.EnableAlign,
你试试有没有用.
 
to txfzr;
早就试过了,没用的。

各位仁兄用过Ms Money2000吗?那里面的切换页面的效果一流,怎么做的呢?
 
试试用 LockWindowUpdate API 看行不行:
LockWindowUpdate(Form1.Handle);
try
//进行切换 Frame 等操作
...
finally
LockWindowUpdate(0);
end;
 
谢谢bbkxjy
稍微好一点,不过效果仍不像Money那样,有更好的方法吗?
 
没用过 MS Money,试试将 Form 或 Frame 的 Doublebufferd 设为 True。(是 Public 的
属性,要在运行时设置),或者能不能用 SetBounds 代替设置 Align。
 
我也发现类似的问题, 在程序退出的时候屏幕左上方有一个闪烁的白块,
200×200象素左右吧。
我在程序退出前已经把这个Frame freeAndNil() 了。
不知道怎么解决。
 
怎么,富翁们对这类问题不感兴趣?!
 
办法:
在桌面上添加一个PageControl1:TPageControl;
放两个TabSheet,Frame放在TabSheet上,TabSheet设成TabVisible := false;
切换的时候:
PageControl1.ActivePageIndex := IndexYouNeed;

 
我的Frame有三十几个,只能动态装入,不能用页面方式。
 
那就在FormCreate中先动态生成2个TabSheet,这个应该可以吧。
然后根据需要动态生成Frame,放到不显示的TabSheet中,用
ActivePageIndex切换到这个TabSheet中,然后释放另一个Frame。

没有动手试验过,但是觉得应该是可以的。
 
是放图片了吧,还是切换频率很快?
不用Frame不行吗?
 
主要在Align设为alClient时闪烁,若不设此值,看不出闪烁。有解决的办法吗?
 
自带的现在的控件为什么不用啊!
 
Create two panels, Panel1 for two buttons, Panel2 for the Frames.
Before you create the frame or free the frame, make the Panel2 visible := false,
after you set frame.align = alClient. then set the Panel2.visible := true.

Just try that, I haven't test it.
 
哈哈哈,又是切换时屏幕闪烁的问题!你试试我的方法,看能不能解决你的问题,
我用这两段锁屏和解锁的代码已经赚了200多分了,屡试不爽,哈哈哈,我这一辈子
就指这两段代码活着了 :p
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1004597
 
多人接受答案了。
 
后退
顶部