如何解决FillRect在win9x下运行不稳定问题! (50分)

  • 主题发起人 主题发起人 wzs
  • 开始时间 开始时间
W

wzs

Unregistered / Unconfirmed
GUEST, unregistred user!
在win2000下正常运行!
位图 8*8
定义是在什么Dll中 comctrl32.dll comctrol32.ocx ?! 更新是否有效?!

 
WIN9X下不稳定?
不会的。

Canvas.FillRect(Rect(0,0,8,8));
 
带图形的Brush
不通过Canvas访问 Windows.Fillrect(handle,...);
不稳定是说,通常的情况没什么问题 。在莫些机器上会出现图像紊乱,多运行几次又正常了!
不知问题出哪,是不是有什么API可以初始化一下就行了

卷起千堆雪tyn ,等你消息! 我现在就在网上
 
好像没有初始化的东东啊,或许是你的程序的问题;
为什么不通过Canvas访问呢?
 
其实Canvas 内部实现的就是Windows.fillrect(canvas.handle,....)
我在初问题的机器上试单单该语句,多运行几次就没问题!
 
你试试每绘一次之前给Brush.BitMap赋值,绘完后设为nil。
 
修改Graphics.pas中的
function TBrush.GetHandle: HBrush;
var
LogBrush: TLogBrush;
begin
with FResource^ do
begin
if Handle = 0 then
begin
BrushManager.Lock;
try
if Handle = 0 then
begin
with LogBrush do
begin
if Brush.Bitmap <> nil then
begin
lbStyle := BS_PATTERN;
Brush.Bitmap.HandleType := bmDIB; //原来是 BmDDB . 可能会影响一些速度. 可以忽列不计
lbHatch := Brush.Bitmap.Handle;
end else
begin
lbHatch := 0;
case Brush.Style of
bsSolid: lbStyle := BS_SOLID;
bsClear: lbStyle := BS_HOLLOW;
else
lbStyle := BS_HATCHED;
lbHatch := Ord(Brush.Style) - Ord(bsHorizontal);
end;
end;
lbColor := ColorToRGB(Brush.Color);
end;
Handle := CreateBrushIndirect(LogBrush);
end;
finally
BrushManager.Unlock;
end;
end;
Result := Handle;
end;
end;
 
多人接受答案了。
 
后退
顶部