(Delphi 2006 和C++Builder6 )下面试验过...
新建一个工程,再新建二个窗体...在第二个窗体上放一个memo控件,把窗体下列属性做修改:
AlphaBlend := true;
AlphaBlendValue := 任意; //1-255;TransparentColor := true; //发生bug的属性,不过在同时AlphaBlend也要设为True;
TransparentColorVal := 任意;好了...做好上面的后,在第一个窗体放入一个按钮,在单击里写
var
TestForm: TForm2;
begin
TestForm := TForm2.Create(Self);
try
TestForm.ShowModal; // or TestForm.Show;
finally
TestForm.Free;
end;
end;运行之后,出现这个透明的窗体后,在memo里面输入内容,如果把memo的区域内容输满后,再输入就会出现
程序死了的现象,要等一阵时间才会正常,如果再输入得换行时,又会陷入死的情况...试过好几个组件了,包括Memo,RichEdit,RzMemo,RzRichedit,不过在TMS组件包里的TMS Memo又没有问题哦...请问这是为什么?请高手回答...
新建一个工程,再新建二个窗体...在第二个窗体上放一个memo控件,把窗体下列属性做修改:
AlphaBlend := true;
AlphaBlendValue := 任意; //1-255;TransparentColor := true; //发生bug的属性,不过在同时AlphaBlend也要设为True;
TransparentColorVal := 任意;好了...做好上面的后,在第一个窗体放入一个按钮,在单击里写
var
TestForm: TForm2;
begin
TestForm := TForm2.Create(Self);
try
TestForm.ShowModal; // or TestForm.Show;
finally
TestForm.Free;
end;
end;运行之后,出现这个透明的窗体后,在memo里面输入内容,如果把memo的区域内容输满后,再输入就会出现
程序死了的现象,要等一阵时间才会正常,如果再输入得换行时,又会陷入死的情况...试过好几个组件了,包括Memo,RichEdit,RzMemo,RzRichedit,不过在TMS组件包里的TMS Memo又没有问题哦...请问这是为什么?请高手回答...
TMemo,TrichEdit是直接封装Common Control的,但TMS Memo不是,
它是继承自TCustomControl
---------------------------------------
http://dev.csdn.net/article/7/7776.shtm
操作系统:XP,2K都有问题,但在win9X/NT下,没有问题
我稍稍跟踪了一下,好像停顿在消息处理中,直接用Memo.Lines.Add没有问题,且在一个Form上就有问题,只要是AlphaBlend及TransparentColor的属性为true,与其它的无关
在我的机器(Win2k/Pro上),直接输入或Ctrl+V,只要内容输入超出范围,包括不自动换行时滚动条滚动,都会僵死,cpu 100%,而且很严重,整个Windows都动不了,不单单是那一个程序。
////////////////
是啊,蛮严重的...整个WINDOWS都停顿下来,
好像只与AlphaBlend和TransparentColor属性相关,不知大家有什么解决方案?
//....
private
{ Private declarations }
FWndMethod: TWndMethod;
procedure WindowProc(var Message: TMessage);
end;
//....
procedure TForm1.WindowProc(var Message: TMessage);
begin
case Message.Msg of
WM_KEYFIRST..WM_KEYLAST: AlphaBlend := False;
end;
if Assigned(FWndMethod) then FWndMethod(Message);
case Message.Msg of
WM_KEYFIRST..WM_KEYLAST: AlphaBlend := True;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FWndMethod := Memo1.WindowProc;
Memo1.WindowProc := WindowProc;
end;
//....
case Message.Msg of
WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST: AlphaBlend := False;
end;
AlphaBlend := False;
if Assigned(FWndMethod) then FWndMethod(Message);
case Message.Msg of
WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST: AlphaBlend := True;
end;
//如果不是到处乱选,不会出现停顿的情况