捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
自画 TListBox 界面演示
关键字:TListBox 列表 自画界面
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2007/8/10
发布者:zw_sun 发布时间:2007/8/12
编辑器:BDS2006 语  种:简体中文
分 类:组件 下载浏览:1665/10484
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
这个是我在BCB研究上面看到老妖写的BCB版本的很漂亮,所以我就将他的代码转换成Delphi的了,希望大家喜欢.

孙占伟 zw.sun AT mail.moloon.com
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论10条 当前显示最后6条评论
ccrun 2007/8/14 12:34:34
当初我就是模仿CnPack的样式写的,不过CnPack的自画貌似没有消除那个拥有焦点时的虚框。
qh_liyan 2007/8/21 17:00:12
为什么我一打开就说Invalid resouse file:Error reading file
qh_liyan 2007/8/21 17:01:24
 DrawFocusRect(lbxMain.Canvas.Handle, &Rect);还有这问题
beginner999 2007/8/22 11:31:10
DrawFocusRect(lbxMain.Canvas.Handle, &Rect); 把取地址的&去掉就行了。
dalas 2007/9/3 21:07:18
没有处理文字超长的情况,右边的自画边框会被超长的文字破坏,很难看
dalas 2007/9/3 21:14:10
procedure TMainForm.lbxMainDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
function GetText(const Text:String):String;
const iWidth = 32 + 10 + 5; //图标宽32 + 间隔10 + 右边保留5 (单位:象素)
var
  tmpStr:String;
  iIndex,i,tmpWidth:Integer;
begin
  Result:=Text;
  tmpWidth:=lbxMain.Canvas.TextWidth(Text);
  if Rect.Left + iWidth + tmpWidth > Rect.Right - Rect.Left then
  begin
    tmpWidth:=Rect.Right-Rect.Left;
    tmpStr:='';
    for iIndex:=1 to Length(Text) do
    begin
      tmpStr:=tmpStr+Text[iIndex];
      if tmpWidth<=lbxMain.Canvas.TextWidth(tmpStr) + iWidth then
      begin
        for i:=1 to 3 do
        begin
          Result:=Copy(tmpStr,1,iIndex-i)+'...';
          if tmpWidth>lbxMain.Canvas.TextWidth(Result) + iWidth then
          Break;
        end;
        Break;
      end;
    end;
  end;
end;
var
  strTemp: string;
begin

  ......

  // Item的第一行文字
  lbxMain.Canvas.TextOut(Rect.Left + 32 + 10, Rect.Top + 4,
    GetText(lbxMain.Items[Index]));
  strTemp := pStrList.Strings[Index];
  // Item的第二行文字
  lbxMain.Canvas.TextOut(Rect.Left + 32 + 10, Rect.Top + 18,
    GetText(Copy(strTemp, 1, Pos(#13, strTemp) - 1)));
  // Item的第三行文字
  lbxMain.Canvas.TextOut(Rect.Left + 32 + 10, Rect.Top + 32,
    GetText(Copy(strTemp, Pos(#13, strTemp) + 1, Length(strTemp))));
end;

这么修改后就可以把超长的字符以'...'代替,不会破坏右边框。
GetText 函数比较繁琐,有谁简化后希望能贴出来!
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表