由演示程序 coolstuf 而找到的工具栏错位问题

DELPHI 光盘中有一个浏览器的演示程序 coolstuf。我发现它的奇怪问题:一旦你将第三行工具栏“链接栏”拖动到最顶端,然后再拖回原来的位置,那么工具栏最下方会多出一个大概 40px 的空白区域。这个显然是 TCoolBar 没有封装好的缘故,我暂时称该问题为“工具栏错位”。

我发现如果有 Band 设置过 FixedSize=True,就会出现偏差,没设置过就没有问题。我猜测可能是工具栏高度发生变化后,Band 的高度属性未被真正更新所致。(ReBar 系列控件的细节问题的确很多,难怪到现在 Delphi 都没有给工具栏加上 Chevron 效果。)要解决这个问题,只要在接收到 RBN_HEIGHTCHANGE 消息时,对设置过 FixedSize=True 的 Band 强制更新一次属性即可。反正只是重新更新一次属性,所以也不会带来什么副作用。

具体方法:找到 procedure TCoolBar.CNNotify(var Message: TWMNotify);
将整个函数替换成如下代码即可。

procedure TCoolBar.CNNotify(var Message: TWMNotify);
var
  I: Integer;
  RBBI: TReBarBandInfo;
begin
  
if (Message.NMHdr^.code = RBN_HEIGHTCHANGE) then
    
if IsAutoSized and (ComponentState * [csLoading, csDestroying] = []) then
    
begin
      
//PATCH-BEGIN
      
for I := 0 to Bands.Count - 1 do
        
if Bands[I].FixedSize then
        
begin
          FillChar(RBBI, SizeOfReBarBandInfo, 
0);
          RBBI.cbSize := SizeOfReBarBandInfo;
          RBBI.fMask := RBBIM_STYLE;
          Perform(RB_GETBANDINFO, Bands[I].FID 
and IDMask, Integer(@RBBI));
          Perform(RB_SETBANDINFO, Bands[I].FID 
and IDMask, Integer(@RBBI));
        
end;
      
//PATCH-END
                     
      ReadBands;
      BeginUpdate;
      
try
        
if AutoSize then AdjustSize;
      
finally
        EndUpdate;
      
end;
    
end
    
else if IsBackgroundDirty then
      Invalidate;
end;


好了!大功告成。将修改后的 ComCtrls.pas 复制到 coolstuf 目录下,再次编译文件。这个问题消失了。

此外,对于修改 Delphi 的源文件,我建议把所有修改过的源文件都放在一个新的目录 (例如 PatchedVCLs),然后在 Delphi 里面定义一个环境变量,这样以后你只要给其它工程的路径里面添加这个环境变量,这些工程都可以使用你修改过的代码了。至于修改源码的一些方法和技巧,请参考 如何访问私有成员变量和函数

专为程序员设计的数学课

11-11
<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

程序员的MySQL学习宝典

06-22
<p> 程序员的必经之路! </p> <p> 【限时优惠】 </p> <p> <br> </p> <p> 现在下单,还享四重好礼:<br> 1、教学课件免费下载<br> 2、课程案例代码免费下载<br> 3、专属VIP学员群免费答疑<br> 4、下单还送800元编程大礼包 </p> <p> <br> </p> <p> 【超实用课程内容】  </p> <p> 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!  </p> <p> <br> </p> <p>  套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)  </p> <p>  课程1:《MySQL数据库从入门到实战应用》  </p> <p>  课程2:《高性能MySQL实战课》  </p> <p> <br> </p> <p>  【哪些人适合学习这门课程?】  </p> <p> 1)平时只接触了语言基础,并未学习任何数据库知识的人;  </p> <p> 2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; </p> <p> 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; </p> <p> 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 </p> <p> <br> </p> <p> 【课程主要讲哪些内容?】 </p> <p> 课程一:<span>《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。</span> </p> <p> <br> </p> <p> <img src="https://img-bss.csdnimg.cn/202006261532354009.png" alt=""> </p> <p> <br> </p> <p> 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家<span>发挥MySQL的最佳性能的优化方法,<span>掌握如何处理海量业务数据和高并发请求</span></span> </p> <p> <br> </p> <p> <img src="https://img-bss.csdnimg.cn/202006261533103261.png" alt=""> </p> <p> <br> </p> <p> 【你能收获到什么?】  </p> <p> 1.基础再提高,针对MySQL核心知识点学透,用对; </p> <p> 2.能力再提高,日常工作中的代码换新貌,不怕问题; </p> <p> 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 </p> <p> <br> </p> <p> 【课程如何观看?】  </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  </p> <p> 本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  </p> <p> 下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。 </p>
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值