如何消除图片切换时的画面闪烁现象? form.doublebuffered:=true引起闪烁的主要原因是每次移动的时候,都重新画了一次背景即默认的灰色,你也可以截掉WMERASEBKGND消息,不重画背景 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,最好你别用Image了,直接在OnPaint事件中在窗体的Canvas中画图就行了. 这样要消除闪烁,可以先用个Bitmap对象将图片装入,然后一次画出!!关于WMERASEBKGND消息的方法我没试过,你试吧,要在窗体中加入 procedure OnWMERASEBKGND(var msg: TMessage);message WM_ERASEBKGND; 不对,好像应是这样,窗体的Private部分加入procedure OnWMERASEBKGND(var msg: TWMEraseBkgnd);message WM_ERASEBKGND;实现部分加入:procedure TForm1.OnWMERASEBKGND(var msg: TWMEraseBkgnd);begin msg.Result := 1;end;你试试吧 to weizhi(行者):" ( 呵呵,最好你别用Image了,直接在OnPaint事件中在窗体的Canvas中画图就行了.这样要消除闪烁,可以先用个Bitmap对象将图片装入,然后一次画出!!"具体如何做? 别用Image了,直接在OnPaint事件中在窗体的Canvas中画图就行了. 这样要消除闪烁,可以先用个Bitmap对象将图片装入,然后一次画出!!关于WMERASEBKGND消息的方法我没试过,你试吧,要在窗体中加入 procedure OnWMERASEBKGND(var msg: TMessage);message WM_ERASEBKGND; 我要控制画图的范围,比如是一个bevel控件上,按照你们的说法,使用Canvas如何做? int mainjpgw,mainjpgh;TJPEGImage *mainjpg=new TJPEGImage();mainjpg->LoadFromFile(ClientForm->currentpath+"Image\\songindex.jpg");mainjpgw=mainjpg->Width;mainjpgh=mainjpg->Height;for(int i=0;i<=Width/mainjpgw;i++) { for(int j=0;j<=Height/mainjpgh;j++) { Canvas->Draw(i*mainjpgw,j*mainjpgh,mainjpg); } } delete mainjpg;探讨:我将doublebuffered=true;后,关闭form时速度很慢,是什么原因?? 用BitBlt贴图吧 函数功能:该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。 函数原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop); 参数: hdcDest:指向目标设备环境的句柄。 nXDest:指定目标矩形区域左上角的X轴逻辑坐标。 nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。 nWidth:指定源和目标矩形区域的逻辑宽度。 nHeight:指定源和目标矩形区域的逻辑高度。 hdcSrc:指向源设备环境的句柄。 nXSrc:指定源矩形区域左上角的X轴逻辑坐标。 nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。 dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。 下面列出了一些常见的光栅操作代码: BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。 DSTINVERT:表示使目标矩形区域颜色取反。 MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。 MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。 NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。 NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。 PATCOPY:将特定的模式拷贝到目标位图上。 PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。 PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。 SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。 SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。 SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。 SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。 WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。 返回值:如果函数成功,那么返回值非零;如果函数失败,则返回值为零。 Windows NT:若想获取更多错误信息,请调用GetLastError函数。 备注:如果在源设备环境中可以实行旋转或剪切变换,那么函数BitBlt返回一个错误。如果存在其他变换(并且目标设备环境中匹配变换无效),那么目标设备环境中的矩形区域将在需要时进行拉伸、压缩或旋转。 如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误。如果源和目标设备环境代表不同的设备,那么BitBlt函数返回错误。 Windows CE:在Windows CE 1.0版中,参数dwRop只可以指定为下列值:SRCCOPY、SRCAND、SRCPAINT、SRCINVERT。在Windows CE 2.0版中,参数dwRop可以是任何光栅操作代码值。 速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。 是呀,用bitmap装入位图,然后用canvas.copyrect 方法直接在窗体上绘图,但速度还是不够快,只有用directx了,但我还不会。 请问那里有这样类似qq的那种 一点有很多下拉 的 求救!!如何把dbgrid中的数据导入到excel中? 如何得到SQL语句查询的结果 在报表中的qrdbtext中有没有字间距的调整的属性? 朋友们都进来看看,提点见 第一次提问:有关findkey查询数据库记录。 请问下,组件Action在哪里呀,,我怎么一直找不着呀 关于邮件的求助 如何在代码中实现备份pordaxs的数据库? 请教:在SQL中添加变量的查询 哪儿有好的杀毒软件下载(win2000server) 不知为什么?
关于WMERASEBKGND消息的方法我没试过,你试吧,要在窗体中加入
procedure OnWMERASEBKGND(var msg: TMessage);message WM_ERASEBKGND;
窗体的Private部分加入
procedure OnWMERASEBKGND(var msg: TWMEraseBkgnd);message WM_ERASEBKGND;实现部分加入:
procedure TForm1.OnWMERASEBKGND(var msg: TWMEraseBkgnd);
begin
msg.Result := 1;
end;
你试试吧
具体如何做?
关于WMERASEBKGND消息的方法我没试过,你试吧,要在窗体中加入
procedure OnWMERASEBKGND(var msg: TMessage);message WM_ERASEBKGND;
TJPEGImage *mainjpg=new TJPEGImage();
mainjpg->LoadFromFile(ClientForm->currentpath+"Image\\songindex.jpg");
mainjpgw=mainjpg->Width;
mainjpgh=mainjpg->Height;
for(int i=0;i<=Width/mainjpgw;i++)
{
for(int j=0;j<=Height/mainjpgh;j++)
{
Canvas->Draw(i*mainjpgw,j*mainjpgh,mainjpg);
}
}
delete mainjpg;
探讨:我将doublebuffered=true;后,关闭form时速度很慢,是什么原因??
函数功能:该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。 函数原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop); 参数: hdcDest:指向目标设备环境的句柄。 nXDest:指定目标矩形区域左上角的X轴逻辑坐标。 nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。 nWidth:指定源和目标矩形区域的逻辑宽度。 nHeight:指定源和目标矩形区域的逻辑高度。 hdcSrc:指向源设备环境的句柄。 nXSrc:指定源矩形区域左上角的X轴逻辑坐标。 nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。 dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。 下面列出了一些常见的光栅操作代码: BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。 DSTINVERT:表示使目标矩形区域颜色取反。 MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。 MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。 NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。 NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。 PATCOPY:将特定的模式拷贝到目标位图上。 PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。 PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。 SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。 SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。 SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。 SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。 WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。 返回值:如果函数成功,那么返回值非零;如果函数失败,则返回值为零。 Windows NT:若想获取更多错误信息,请调用GetLastError函数。 备注:如果在源设备环境中可以实行旋转或剪切变换,那么函数BitBlt返回一个错误。如果存在其他变换(并且目标设备环境中匹配变换无效),那么目标设备环境中的矩形区域将在需要时进行拉伸、压缩或旋转。 如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误。如果源和目标设备环境代表不同的设备,那么BitBlt函数返回错误。 Windows CE:在Windows CE 1.0版中,参数dwRop只可以指定为下列值:SRCCOPY、SRCAND、SRCPAINT、SRCINVERT。在Windows CE 2.0版中,参数dwRop可以是任何光栅操作代码值。 速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
但速度还是不够快,只有用directx了,但我还不会。