原来在DELPHI7下的程序移到XE2下,修修改改,总算行了。一直没注意这个TiAnlogDisplay控件,界面上用了好多这个控件,运行,显示为空,也不报错。看设计界面,也是空的,本来应当显示初始值的。用的是6.0.4 for xe2(网友自己改的),相同的源码在D7下没问题,这就奇怪了。再放个TiAnlogOuput控件(父类是TiCustomEdit),显示也没问题。这2个控件都继承自TiComponent,(中间的一些控件和显示无关),是控件自己的问题了。看源码,也看不出有什么不同的地方。它们的显示都是通过PaintTo这个方法,设断点,出问题了:

procedure TiAnalogDisplay.iPaintTo(Canvas: TCanvas);
varAText      : String;ATextRect  : TRect;ATextFlags : TiTextFlags;
beginwith Canvas, ATextRect dobeginif not ErrorActive thenbeginif FPrecision >= 0 thenAText := Trim(Format('%.' + IntToStr(FPrecision) + 'f', [FValue])) + FUnitsTextelseAText := Trim(Format('%g', [FValue])) + FUnitsText;Font.Assign(FFont);DrawBackGround(Canvas, BackGroundColor);endelsebeginAText := ErrorText;Font.Assign(ErrorFont);DrawBackGround(Canvas, ErrorBackGroundColor);end;case BorderStyle ofibsNone    : beginATextRect.Top    := 2;ATextRect.Bottom := Height - 2;end;ibsRaised  : beginATextRect.Top    := 2;ATextRect.Bottom := Height - 2;end;ibsLowered : beginATextRect.Top    := 2;ATextRect.Bottom := Height - 4;end;end;case FAlignment ofiahCenter : beginATextFlags := [itfHCenter, itfVCenter, itfSingleLine];ATextRect.Left  := 2;ATextRect.Right := Width - 2;end;iahLeft   : beginATextFlags := [itfHLeft, itfVCenter, itfSingleLine];ATextRect.Left  := 2 + FAlignmentMargin;ATextRect.Right := Width - 2;end;else        beginATextFlags := [itfHRight, itfVCenter, itfSingleLine];ATextRect.Left  := 2;ATextRect.Right := Width - 2 - FAlignmentMargin;end;end;Brush.Style := bsClear;iDrawText(Canvas, AText, ATextRect, ATextFlags, True, BackGroundColor);end;
end;

这儿的Right和Bottom值变成一个巨大的数!(如44062789),Hight和Width本身的值没问题,但是代码的运算(简单运算,不就是减个常数),Bottom和Right就变成一个巨大数了,怀疑表达式中的Hight和Width在运算的时候被替换了,真奇怪啊

修改成这样:

procedure TiAnalogDisplay.iPaintTo(Canvas: TCanvas);
varAText      : String;ATextRect  : TRect;ATextFlags : TiTextFlags;
beginwith Canvas, ATextRect dobeginif not ErrorActive thenbeginif FPrecision >= 0 thenAText := Trim(Format('%.' + IntToStr(FPrecision) + 'f', [FValue])) + FUnitsTextelseAText := Trim(Format('%g', [FValue])) + FUnitsText;Font.Assign(FFont);DrawBackGround(Canvas, BackGroundColor);endelsebeginAText := ErrorText;Font.Assign(ErrorFont);DrawBackGround(Canvas, ErrorBackGroundColor);end;case BorderStyle ofibsNone    : beginATextRect.Top    := 2;ATextRect.Bottom := Self.Height - 2;end;ibsRaised  : beginATextRect.Top    := 2;ATextRect.Bottom := Self.Height - 2;end;ibsLowered : beginATextRect.Top    := 2;ATextRect.Bottom := Self.Height - 4;end;end;case FAlignment ofiahCenter : beginATextFlags := [itfHCenter, itfVCenter, itfSingleLine];ATextRect.Left  := 2;ATextRect.Right := Self.Width - 2;end;iahLeft   : beginATextFlags := [itfHLeft, itfVCenter, itfSingleLine];ATextRect.Left  := 2 + FAlignmentMargin;ATextRect.Right := Self.Width - 2;end;else        beginATextFlags := [itfHRight, itfVCenter, itfSingleLine];ATextRect.Left  := 2;ATextRect.Right := Self.Width - 2 - FAlignmentMargin;end;end;Brush.Style := bsClear;iDrawText(Canvas, AText, ATextRect, ATextFlags, True, BackGroundColor);end;
end;

OK,好了

转载于:https://www.cnblogs.com/jankerxp/archive/2013/02/25/7774040.html

修正TiAnlogDisplay显示的问题相关推荐

  1. VirtualBox在Windows 10 高分屏下显示的修正以及显示字体的修改

    给自己的笔记本外接了大屏显示屏以后,就会时不时在笔记本和屏幕之间拖动,VirtualBox没有适配高分屏,加上给屏幕设置了不同的缩放比(笔记本100%和大屏150%).VirtualBox就显得格外的 ...

  2. C# RichTextBox 做简单的HTML代码编辑器 ---------利用WinApi修正左侧显示行号 误差

    说明:通过WinApi可以准确定准滚动位置. //行号 生成显示 这里rtbLineNum用的 RichTextBox,也可以用其它private void ShowLineNum(){rtbLine ...

  3. 调整 Thunderbird 邮件主题和正文的字体、字号,修正中文显示乱码

    问题 如果你在使用 Thunderbird 遇到了如下问题之一,则本文对你或有帮助. (1)收件箱等邮件列表栏,邮件标题字体太小(默认8磅): (2)中文显示效果不好.如"路径"在 ...

  4. 2020黑群晖最稳定版本_打造完美6.2.3黑群晖,正确显示 CPU,支持Nvme缓存

    大家好,我是晓飞影! 一个数码爱好者,也喜欢在众多平行领域探究摸索,让生活多一点乐趣. 之前分享了一台正版蜗牛星际 A 款机箱组装 NAS 的文章,搭配 i3-8100和华擎 H310CM-ITX/a ...

  5. android 电池电量显示不正常,vivo电量显示不正常怎么解决?vivo手机电量校准教程...

    vivo手机用了一段时间会发现,手机电量显示会出现不准确的情况,明明刚充满电不到10分钟,仅剩50%电量:或者充电一晚上,电量仍然显示为70%,无法充满.小伙伴们稍安勿躁,这并不是电池本身出了问题,而 ...

  6. 在Windows的CMD中如何设置支持UTF8编码?

    这个问题很多人开始都会不知道,当然包括曾经的我,当用到的时候,只好求助于伟大的股沟和度娘了.网上有设置的方法,但说明确不够详细系统,说设置字体 为:Lucida Console.问题是,在默认方式下, ...

  7. 秒杀奥斯卡的“第四块广告牌”就在你身边!

    作为年度爆款影片,<三块广告牌>一定刷屏了你的社交网络.可你是否知道打破人们想象的"第四块广告牌"正悄然改变着你的生活?让英特尔带你一起探索这块神奇广告牌的奥秘吧! 作 ...

  8. Delphi MlSkin v3.9 (2019.4.15)发布啦! 它能让你的程序拥有像QQ一样多彩炫丽的外观...

    组件包和Demo程序下载地址: http://www.pngui.com/filedownload 支持:Delphi7.Delphi2007.Delphi2009.Delphi2010.Delphi ...

  9. 开源串口调试助手java_(串口通信编程) 开源串口调试助手Common (Com Monitor)

    我写的串口调试助手程序以及源代码. 警告:请勿将本软件源代码用于任何商业用途. 其实吧, 我写的这个串口软件绝对比网上流传的一些串口调试软件好用很多, 对于软件,我本身并没有作 太多推广, 一些功能我 ...

最新文章

  1. 实现2D全景图的中心视野变换
  2. C语言fputs()函数(把字符串写入到指定的流 stream (文件指针)中)
  3. java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制
  4. 【旧文章搬运】Windows内核常见数据结构(线程相关)
  5. SAP Spartacus里unit list tree节点expanded属性的赋值逻辑
  6. setsockopt()用法(参数详细说明)
  7. Rank Math Pro v2.17.1 SEO插件
  8. [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays
  9. 英语 没有听懂对方说什么 怎么说
  10. 18.11 LVS DR模式搭建
  11. VMware Workstation Pro下载密钥
  12. EPLAN2022程序安装及注意事项
  13. 斯芬克怎么样 谁说我没有担心
  14. java simon_Java Simon
  15. 一箭穿心程序编码c语言,一个简单的一箭穿心程序
  16. 点击按钮没有反应,onclick函数点击无反应的原因
  17. python播放音乐同步歌词范晓萱_同步_范晓萱_高音质在线试听_同步歌词|歌曲下载_酷狗音乐...
  18. Python traceback模块:获取异常信息
  19. 找出词典中的所有的变位词 --By LXW
  20. 电商物流仓储的28条经验

热门文章

  1. Apache Kafka – KIP 32,33 Time Index
  2. 二维数组的遍历之查漏补缺
  3. 美团搜索-搜索引擎关键字智能提示的一种实现[转]
  4. MVC - 建立模型/实体类,对应到数据库
  5. javascript 编辑记录
  6. Visual Studio 2008带来了什么
  7. EXPLAIN字段详解
  8. Linux关机运行的脚本,Linux 关机 脚本
  9. 简单工厂和 工厂设计模式--抽象工厂模式--Java实现
  10. error gyp ERR! stack Error: Could not find any Visual Studio installation to use