自绘ListBox的两种效果
本文利用Listbox自绘实现了两种特殊效果(见图),左边的风格是自己突然灵感触发想到的,右边的风格来自"C++ Builder 研究"的一个帖子,老妖用BCB实现了,这里则用Delphi实现它。
演示图片:
//--------------------------------------------------------------------------
unit DrawListItem;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
lsbRight: TListBox;
ImageList1: TImageList;
StaticText1: TStaticText;
lsbLeft: TListBox;
imgHouse: TImage;
imgHouseGray: TImage;
procedure FormCreate(Sender: TObject);
procedure lsbRightDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure lsbRightClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure lsbLeftDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{========================================================================
DESIGN BY : 彭国辉
DATE: 2004-11-29
SITE: http://kacarton.yeah.net/
BLOG: http://blog.csdn.net/nhconch
EMAIL: kacarton#sohu.com
;
lsbRight.Items.Add(' to do begin
lsbRight.Items.Add('ListBox Items of ' + IntTostr(i) + #13'Second of '
+ IntToStr(i) + #13'Third of ' + IntToStr(i));
end;
lsbLeft.Style := lbOwnerDrawFixed;
lsbLeft.Ctl3D := false;
lsbLeft.ItemHeight := ;
lsbLeft.Items.Add('编程手札');
lsbLeft.Items.Add('My Developer Knowledge Base');
lsbLeft.Items.Add('站长:天蝎蝴蝶');
lsbLeft.Items.Add('http://blog.csdn.net/nhconch');
end;
procedure TForm1.lsbRightDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
strTemp: String;
begin
, Rect.Top + ,
Rect.Right - , Rect.Bottom - , , );
, Rect.Top + ,
Rect.Right - , Rect.Bottom - , , );
, Rect.Top + ,
Rect.Right - , Rect.Bottom - , , );
,
Rect.top + (lsbRight.ItemHeight - ImageList1.Height) div , Index, true);
+ , Rect.Top + , Length(strTemp));
lsbRight.Canvas.TextOut(Rect.Left + + , Rect.Top + ,
Copy(strTemp, , Pos));
lsbRight.Canvas.TextOut(Rect.Left + + , Rect.Top + ,
Copy(strTemp, Pos, Length(strTemp)));
end;
procedure TForm1.lsbRightClick(Sender: TObject);
begin
StaticText1.Caption := ' ' + lsbRight.Items.Strings[lsbRight.ItemIndex];
end;
procedure TForm1.FormShow(Sender: TObject);
begin
lsbRight.ItemIndex := ;
lsbRight.Repaint();
lsbLeft.ItemIndex := ;
lsbLeft.Repaint();
end;
procedure TForm1.lsbLeftDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
r: TRect;
begin
with lsbLeft.Canvas do begin
, Rect.Top+, Rect.Right-, Rect.Bottom-);
RoundRect(r.Left, r.Top, r.Right, r.Bottom, , );
,
r.Top + , imgHouse.Picture.Graphic)
else ,
r.Top + , imgHouseGray.Picture.Graphic);
;
Brush.Style := bsSolid;
if (odSelected in State) then ; //计算文字顶点位置,(水平居中,DT_CENTER不可用)
DrawText(Handle, PChar(TListBox(Control).Items.Strings[Index]), -1, r
, DT_CENTER or DT_END_ELLIPSIS{ or DT_WORDBREAK});
//画焦点虚框,当系统再绘制时,变成XOR运算,从而达到擦除焦点虚框的目的
if(odFocused in State) then DrawFocusRect(Rect);
end;
end;
end.
http://blog.csdn.net/nhconch/article/details/205127
自绘ListBox的两种效果的更多相关文章
- Javscript轮播 支持平滑和渐隐两种效果(可以只有两张图)
原文:Javscript轮播 支持平滑和渐隐两种效果(可以只有两张图) 先上两种轮播效果:渐隐和移动 效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思 ...
- Javascript轮播 支持平滑和渐隐两种效果
Javascript轮播 支持平滑和渐隐两种效果 先上两种轮播效果:渐隐和移动 效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思路: 一.先来看简单的 ...
- Javascript轮播 支持平滑和渐隐两种效果(可以只有两张图)
先上两种轮播效果:渐隐和移动 效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思路: 一.先来看简单的,移动的,先上来一个图----移动效果图: 说明: ...
- 设置a标签,实现点击跳转页面的两种效果
设置a标签,实现点击跳转页面 这个问题,主要是设置a标签的属性target,下面对target属性进行描述: 跳转在同一个窗口 1,target="_self", 它使得目标文档 ...
- Android 两种方式实现类似水波扩散效果
原文链接 https://mp.weixin.qq.com/s/M19tp_ShOO6esKdozi7Nlg 两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 ...
- Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]
有时候在xml中写的跑马灯效果不滚动:原因有以下 Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize=”marquee” 2.TextV ...
- Activity透明/半透明效果的设置transparent(两种实现方法)
两种方法实现Activity透明/半透明效果的设置,代码思路很有调理,感兴趣的朋友可以参考下,希望本文可以帮助到你 方法一:res/values文件夹下建立styles.xml: 复制代码代码如下 ...
- OpenCV3.4两种立体匹配算法效果对比
以OpenCV自带的Aloe图像对为例: 1.BM算法(Block Matching) 参数设置如下: ) + ) & -; cv::Ptr<cv::StereoBM> b ...
- OC可点击的两种轮播图效果
基本上,每一个APP都有一个轮播图的效果展示,一般都是用来展示图片的一些信息,然后可以点击查看或购买,所以在此我将这种轮播图进行了一个类的封装,效果包含两种形式:第一种,来回轮转样式,第二种,一个方向 ...
随机推荐
- Javascript 运动应用 02
JS运动应用 多个物体同时运动 例子:多个Div,鼠标移入 ...
- 在SSH整合框架中经常会用到Service层,请问大家这个Service层有什么具体的作用,可不可以不用这个Service层呢?
有效地分离数据访问层(DAO)和业务层(SERVICE),使之各司其职,举例说明:如果DAO层访问数据库,得到的数据根据业务需要要进行加密,那么取数据和把数据加密就是2个步骤,访问数据和业务逻辑加工, ...
- 打工心态废掉了很多人,包括你吗?(你把现在这家公司的业务都弄清楚、弄懂了吗?君子报仇十年不晚!不离不弃!)good
我只拿这点钱,凭什么去做那么多工作,我傻呀. 我为公司干活,公司付我一份报酬,等价交换而已,我不欠谁的. 我只要对得起这份薪水就行了,多一点我都不干,做了也白做. 工作嘛,又不是为自己干,说得过去就行 ...
- 【HTTP 2】 序言
笔者序 HTTP 2 这个关键词在各大 IT 网站出现频率节节升高,然而出现在大家视野里的,仍以浅析居多.虽有一部分实战(如 InfoQ 之前推送的 iOS App 网络层次架构优化),但针对 HTT ...
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...
- 设计模式(八)装饰器模式Decorator(结构型)
设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ...
- Case of the Zeros and Ones
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Andrew ...
- C - 链表,推荐
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- Qt 内存管理机制
这篇文章首先发布于我的主页 http://www.devbean.info,以后也会直接发布在那里.现在有 Flex 4 的一篇和 <从 C++ 到 Objective-C>系列,感谢大家 ...
- asp.net 通过 Handler 导出数据至excel (让用户下载)
效果图: 代码: Export2Excel.ashx <%@ WebHandler Language="C#" CodeBehind="Export2Excel.a ...