首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 再次发现C++ Builder大bug [已结贴,结贴人:zhangwuji156]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-19 10:44:11 楼主
    不要说我年少轻狂,看看便知,以几个bug解释起来费劲,可这个简单.

    在一个form上放一个Image,将其transparent设为true
    随便响应一下下面的语句(比如放在form的onclick事件里);

    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(0,Image1->Height);

    会发生什么情况?

    如果认为这是正常,那怎么解释

    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(0,33);



    Image1->Canvas->MoveTo(1,0);
    Image1->Canvas->LineTo(2,Image1->Height);

    这两种情况才是正常的.
    120  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-19 14:10:281楼 得分:0
    TImage::Transparent
    Specifies whether the background of the image obscures objects below the image object.

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • samchoy
    • 等级:
    发表于:2008-06-19 14:47:282楼 得分:1
    哈哈哈哈,笑死我了
    Transparent=true;时,是以左下角的像素为背景色,凡是这个颜色的都不画出而直接显示背景

    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(0,Image1->Height);
    时,就把这条线的颜色当成背景色了
    你再试试
    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(0,Image1->Height-1);
    就明了了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-19 15:23:593楼 得分:2
    BUG确实是有的,但在下结论之前好好地看看有关的帮助、提示或说明.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cppowner
    • 等级:
    发表于:2008-06-20 09:57:114楼 得分:3
    晕 接分了 确实是没理解VCL属性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 10:25:305楼 得分:0
    你知道我更晕的是什么吗?
    同一个程序,(也是跟画有关的),前几天在我电脑上运行,它是正确的,后来,它又不正确了,我最初以为,我是编译了没保存,那怪我,
    我重做了一个,怎么改,也不正确,后来居然用最初的方法,又成功了,我也没在意.当我完善的差不多了,我把这个程序,备份,交给头儿(是经过头儿认可的,说明它当时是成功的),今天又运行,它又不成功了,我以为我改的问题,我又找出备份过的,它还是不正常,我快疯了,最后我在别人电脑上运行这个程序,它又是正确的.我试了试是不是杀毒软件的问题,结果不是.
    这又如何解释呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 10:31:526楼 得分:0
    说说什么是什么显示不正确吧

    还是那个程序,两个TImage,一个显示背景图片(Image1),一个盖在它上面,画图(Image2)

    Image2->transparent = true;

    然后在Image2上画图,应该不挡住背景Image1;
    就算不讨论以前提到的左边界临界,我判断了,如果到了左边界,就不画了.
    运行多少次了,它都是正常的,可今天一开机,又不正常了,在别人电脑上运行也正常,不正常是,一画,不管在哪儿画,它都变白.连
    备份过的正确的程序都显示不正确(难道是系统问题?)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 10:35:197楼 得分:0
    我反复咀嚼了好多遍,才看懂你的意思,就算你说的是对的,也是BCB的不对呀,它为什么要将整个区域涂白呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 10:55:348楼 得分:4
    TImage内部Canvas其实是一个TBitmap的
    当你在没有指定Picture属性的情况下第一次调用Canvas时,TImage会自己产生一个和自己一样大小的TBitmap作为Canvas的内存映像(就象VC里的内存DC需要HBITMAP一样)。这个TBitmap的初始背景就是白色的。

    楼主可以试试这样,强制指定要透明的颜色。

    C/C++ code
    Image1->Canvas->FillRect(Image1->ClientRect); Image1->Canvas->MoveTo(0,0); Image1->Canvas->LineTo(0,Image1->Height); Image1->Transparent = true; Image1->Picture->Bitmap->TransparentColor = clWhite;

    最好是画完以后再指定TransparentColor。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 14:35:509楼 得分:0
    我终于知道了,原因是飞信,知道飞信这个软件吗,我不开没事,一开飞信我的程序就有问题,这是为什么??????????
    我疯疯疯疯疯疯疯了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 14:40:1010楼 得分:0
    我用Canvas->Lock();都没用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 15:57:3111楼 得分:1
    据资深人士考察,很多发现bug的,往往都是一场误会
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ccrun
    • 等级:
    发表于:2008-06-23 16:55:0112楼 得分:1
    引用 11 楼 ydlchina 的回复:
    据资深人士考察,很多发现bug的,往往都是一场误会
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 17:09:5113楼 得分:6

    引用 9 楼 zhangwuji156 的回复:
    我终于知道了,原因是飞信,知道飞信这个软件吗,我不开没事,一开飞信我的程序就有问题,这是为什么??????????
    我疯疯疯疯疯疯疯了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 18:25:1214楼 得分:0
    有这啰嗦的时间.看看GDI SDK 方面的资料.常用的就十几个函数 可以彻底不用TImage
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-26 12:53:1415楼 得分:100
    C++中很多莫名其妙的问题往往是内存操作上的错误引起的。

      InteShapes是基于C/C++语言的CAD二次开发平台,通过编写C/C++语言脚本并直接运行脚本程序,可以实现各种图形、曲线的参数化绘图、钣金展开、数学计算等功能的实用工具软件。InteShapes支持各种版本的AutoCAD,可以直接将图形输出到AutoCAD,也可以生成DXF文件用于其它CAD软件。InteShapes是工程设计、教学、编程人员的实用工具软件。

      InteShapes的功能与特点:
      InteShapes支持常用的C/C++语言语法,适用于复杂的数学计算,脚本无须编译即可直接运行,调试简单,使用方便。
      InteShapes采用事件驱动模式,用户只要编写简单的主体函数即可实现复杂的功能,无须设计界面即可实现需要的绘图功能。
      InteShapes内置常用的函数调用,将复杂功能简单化。随着版本的不断改进,内置函数将会不断增加。
      InteShapes与AutoCAD有效结合,图形可以直接输出到AutoCAD,也可以与AutoCAD直接交换数据。
      InteShapes提供的丰富的基本图形库,工程设计人员可以使用基本图形的参数化绘图和设计,提供工作效率。
      InteShapes将脚本文件通过文件夹分类管理,查看图形直观方便。
      InteShapes支持多语言开发,可以方便地发布支持多语言的二次开发脚本程序。

    下载:http://www.robot51.com
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 09:51:3216楼 得分:0
    如果这算我的错,那么MonthCalendar这个控件,拖选日期,那可是它自己画的,也是一画左边一栏就全白了,看不见日期,那还不是C++ Builder的bug?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jacknes009
    • 等级:
    发表于:2008-06-27 12:20:2717楼 得分:0
    据资深人士考察,很多发现bug的,往往都是一场误会
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 16:08:5218楼 得分:0
    那还不是C++ Builder的bug?
    是Microsoft的BUG!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-28 11:44:5919楼 得分:0
    To zhangwuji156 ,这往往是你在用变量时没有初始化的结果,因为C++的变量是不会自动初始化的,你申明时它用内容的数据代替初始值,在内存容合适的时候它不会出错,当内存中的内容变化时你的程序就可能崩溃!用指针时更有小心!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-28 23:04:4620楼 得分:0
    据资深人士考察,很多发现bug的,往往都是一场误会
    -->
    据专家考察,很多发现bug的,往往都是一场误会
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-30 12:29:0021楼 得分:0
    以前才搞BCB,发现到处都是BUG,后来越来越深入,发现有些只是自己的误解,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-30 20:10:5722楼 得分:0
    很多所谓的BUG,都是不理解或者不看帮助导致的。
    无它。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ccrun
    • 等级:
    发表于:2008-06-30 23:25:3623楼 得分:0
    张无忌同学,该结帖了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 02:56:4824楼 得分:0
    第一次接触BCB到现在11年,惭愧啊,没有发现过BUG
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 12:07:2325楼 得分:0
    c++builder 编译器很优秀但是 还是没微软的市场大
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 12:39:4026楼 得分:0
    来看看bug
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sczyq
    • 等级:
    发表于:2008-07-07 19:10:5327楼 得分:0
    Image1->Canvas->LineTo(0,Image1->Height -1 );

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 22:29:4028楼 得分:2
    BCB的BUG多了去,只能去避免,大家可以创建一个空的多线程DLL,然后不停执行或用个Timer

    DoTimer
    {
      h = LoadLibrary("project1.dll");
      FreeLibrary(h);
    }

    内存就一直在增长(泄露?)

    用VC就没这样问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 09:41:2629楼 得分:0
    用新版本的编译器会不会有问题?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 11:51:1630楼 得分:0
    还真以为发现BUG了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 08:33:4131楼 得分:0
    晕 接分了 确实是没理解VCL属性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 10:01:2132楼 得分:0
    CB的BUG不多!很多是理解问题!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved