关于ThemeEngine的TeOutLookBar的问题-请求一个临时的解决方案!谢谢大家了。 ( 积分: 100 )

  • 主题发起人 主题发起人 crystalmoon
  • 开始时间 开始时间
C

crystalmoon

Unregistered / Unconfirmed
GUEST, unregistred user!
在使用该控件时(用的是盒子上的ThemeEngine v7.04 with FS版本),在各btn间切换几次,然后点再其中其内含在某个Panel中的控件,则该panel内的其它控件会发生没有同步repaint而显示丢失。
请大家给个临时解决方案,我的一个想法是在点控件时截取其自身的WM_paint消息,然后通知对遍历控件并判断parent(同一Panel内)的控件也同步repaint.但没有实现[:(],而且遍历所有控件的话,如果工程中控件过多,则会有速度上的问题。
请大家给个好的方案,最好能给个简单的测试代码,谢谢大家了。
 
如题,自己项一下,请大家帮帮忙,说说思路也可以
我自己已经解决一部分代码
if Control is TTeOutlookBar then
for i := 0 to Control.ControlCount-1 do
Control.Controls.Refresh;

现在的问题是,在哪个消息中处理为好,如何在消息中取得相应的请求的对象类型(比如,对象类型是TTeOutlookBar。我用的是TApplicationMessage组件的统一处理的。
 
自己项一下,请大家帮帮忙吧[:)]
 
是我的问题太简单了还是?。。。。。
 
咳,还是自己啃下来解决了,虽然办法不是很好。。。。。思路还是我上面的,下面是我的代码:
在TApplicationEvent里
var
SClassName:string;
aBuf:array[0..254] of char;
aWnd:HWND;
MyControl:TTeOutlookBarPanel;
i:Integer;
Begin
......
//修复TOutLookBar的一个刷新Bug
if Msg.message = WM_PAINT then
begin
aWnd := Msg.hwnd;
GetClassName(aWnd, aBuf, 255);
SClassName := Trim(aBuf);
if SClassName = 'TTeOutlookBarPanel' then
begin
MyControl := TTeOutlookBarPanel(FindControl(aWnd));
for i := 0 to MyControl.ControlCount - 1 do
MyControl.Controls.Repaint;
end;
end;
.......
End;
 
后退
顶部