关于Delphi第三方控件bsSkinDateEdit日期选择面板中周名显示不正常的解决办法

 


    第三方控件BusinessSkinForm各个版本都存在这样的Bug:日期控件TbsSkinDateEdit的选择面板上方只能显示一排“星期”,而是正常的“星期一、星期二……”。 网上翻了个底朝天,总算找到如下解决办法:
    在控件源路径下找到bsCalendar 单元(bsCalendar.pas),用记事本或任何文本编辑器打开后,注释掉下述截断字符的语句即可:

 

procedure TbsSkinMonthCalendar.DrawCalendar(Cnvs: TCanvas);

……

    for I := 0 to 6 do
    begin
      S := ShortDayNames[(Ord(FirstDayOfWeek) + I) mod 7 + 1];
      //
      // if Length(S) > 4 then S := Copy(S, 1, 4);      //将这一句注释就行了
      //
      X2 := X + CellW div 2 - TextWidth(S) div 2;
      TextOut(X2, Y, S);
      X := X + CellW;
    end;
……

 

    注释之后周名虽然显示正常了,但我们仍感不足,原因主要是每列标注“星期一”三个字太占地了,导致日期选择面板长宽比例难以调整:正常比例的话一排周名挤得一塌糊涂,调宽的话狭长的面板又令人不爽……要是只标“一、二、三……”岂不更好?

    其实稍稍分析上述被注释的语句就会发现,变量“S”存储的应是从本地系统中取出的周名称,对于咱们汉语种来说,就是“星期一、星期二……”等,S := Copy(S, 1, 4)的后果是什么?只截取 S 中存储字符的前4个字节也即两个汉字,这就导致无论“星期一”还是“星期二”都只能截到“星期”了。既然如此,那我就截取后两个字节,不就实现只标“一、二、三……”的需求了吗?去掉上述注释符,修改如下(注:此法仅在汉语种操作系统下测试通过):

 

      if Length(S) > 4 then S := Copy(S, Length(S)-1, 2);

    如果要想的设计期间看到效果,须重新编译控件。运行期间正确无误。

 附效果——

 

云冰工作室

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值