在好例子网,分享、交流、成长!
您当前所在位置:首页Pascal 开发实例Delphi图形界面编程 → 自画TListBox界面

自画TListBox界面

Delphi图形界面编程

下载此实例
  • 开发语言:Pascal
  • 实例大小:4.30KB
  • 下载次数:35
  • 浏览次数:449
  • 发布时间:2013-04-07
  • 实例类别:Delphi图形界面编程
  • 发 布 人:goodluck
  • 文件格式:.pas
  • 所需积分:1
 相关标签: 自画列表

实例介绍

【实例简介】

1. 仿QQ好友列表

2. 修改zw_sun代码去掉三方控件

3. TListBox显示图片与文字列表
【实例截图】

自画TListBox
【核心代码】
procedure TMainForm.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // ListBox的风格,要自画必须选lbOwnerDrawFixed和lbOwnerDrawVariable
   lbxMain.Style := lbOwnerDrawFixed;
  // ListBox的每一项的高度
  lbxMain.ItemHeight := 50;
  pStrList := TStringList.Create;
  // 往ListBox中添加些数据

  for i := 1 to 5 do
  begin
    lbxMain.Items.Add('列表项 ' IntToStr(i));
    pStrList.Add('第二列 ' IntToStr(i) #13 '第三项 ' IntToStr(i));
  end;

end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
pStrList.Free;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  lbxMain.ItemIndex := 0;
  lbxMain.Repaint();
end;

procedure TMainForm.lbxMainClick(Sender: TObject);
var
  p:TEditForm;
  strTemp:string;
begin
    p:= TEditForm.Create(lbxMain);
    p.edtFirst.Text := lbxMain.Items.Strings[lbxMain.ItemIndex];
    strTemp := pStrList.Strings[lbxMain.ItemIndex];
    p.edtSecond.Text := Copy(strTemp,1,Pos(#13,strTemp)-1);
    p.edtThird.Text := Copy(strTemp,Pos(#13,strTemp) 1,Length(strTemp));
    p.pnlTitle.Caption := ' 当前ListBox选中项:' IntToStr(lbxMain.ItemIndex);
    p.pnlTitle.Tag := lbxMain.ItemIndex;
    p.Left := Left (Width - p.Width) div 2;
    p.Top := Top (Height - p.Height) div 2;
    p.ShowModal();
    p.Free;
end;

procedure TMainForm.lbxMainDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  strTemp: string;
begin


  // 填充的背景颜色
    lbxMain.Canvas.Brush.Color :=clred;
  // 文字颜色
  lbxMain.Canvas.Font.Color := clBlack;
  // 填充背景
   lbxMain.Canvas.FillRect(Rect);

  // 圆角矩形的背景颜色
  lbxMain.Canvas.Brush.Color := clSilver;
  // 圆角矩形的边框颜色
  lbxMain.Canvas.Pen.Color := clYellow;
  // 画出圆角矩形
  lbxMain.Canvas.RoundRect(Rect.Left 3, Rect.Top 3,
    Rect.Right - 2, Rect.Bottom - 2, 8, 8);
  // 以不同的宽度和高度再画一次,实现立体效果
  lbxMain.Canvas.RoundRect(Rect.Left 3, Rect.Top 3,
    Rect.Right - 3, Rect.Bottom - 3, 5, 5);
  // 如果是当前选中项

  if (odSelected in State) then
  begin
    // 选中项的背景颜色
    lbxMain.Canvas.Brush.Color := TColor($00FFB2B5);
    // 以不同的背景色画出选中项的圆角矩形
    lbxMain.Canvas.RoundRect(Rect.Left 3, Rect.Top 3,
      Rect.Right - 3, Rect.Bottom - 3, 5, 5);
    // 选中项的文字颜色
    lbxMain.Canvas.Font.Color := clBlue;
    // 如果当前项拥有焦点
    if (odFocused in State) then
      // 重画焦点虚框,实际上就是擦除了原先的焦点虚框
      // 我看到CnPack的设置中好象没有去除那个框. ccrun注
      DrawFocusRect(lbxMain.Canvas.Handle, Rect);
  end;


 // 画出图标
  ImageList1.Draw(lbxMain.Canvas, Rect.Left 7,
    Rect.top (lbxMain.ItemHeight - ImageList1.Height) div 2, Index);
   strTemp := pStrList.Strings[Index];
   // Item的第一行文字
  lbxMain.Canvas.TextOut(Rect.Left 32 10, Rect.Top 4,
   lbxMain.Items[Index] );
  // Item的第二行文字
  lbxMain.Canvas.TextOut(Rect.Left 32 10, Rect.Top 18,
    Copy(strTemp, 1, Pos(#13, strTemp) - 1));
  //     Item的第三行文字
  lbxMain.Canvas.TextOut(Rect.Left 32 10, Rect.Top 32,
    Copy(strTemp, Pos(#13, strTemp) 1, Length(strTemp)));

end;

procedure TMainForm.pnlTitleMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    // 移动没有标题栏的窗体
    Refresh();
    if(Button = mbLeft) then
      begin
        ReleaseCapture();
        Perform(WM_SYSCOMMAND, $F017, 0);
      end;
end;

标签: 自画列表

实例下载地址

自画TListBox界面

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 平行线 发表于: 2017-05-26 14:33 44
赞赞

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警