自绘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都有一个轮播图的效果展示,一般都是用来展示图片的一些信息,然后可以点击查看或购买,所以在此我将这种轮播图进行了一个类的封装,效果包含两种形式:第一种,来回轮转样式,第二种,一个方向 ...
随机推荐
- Jquery UI accordion手风琴菜单
最近学习jQuery,总结了一些心得. 1.引用 <script type="text/javascript" src=jquery.js></script> ...
- zIndex属性在IE中无效
在ie中他的子类的zindex就以父类为准: <!doctype html> <html> <head> <meta charset="utf-8& ...
- Android模拟器启动异常
设置系统环境变量的 ANDROID_SDK_HOME为任意一个目录,我的目录:C:\android_avd, 关闭eclipse,然后重新启动eclipse, 删除之前创建的AVD, 然后重新创建,即 ...
- 【.Net基础拾遗】适配器模式(Adapter)与多态
今天晚上跟大家主要来讨论下适配器模式和多态,什么是适配器模式呢?先抛给大家一个问题:假设两个类Student和Teacher继承一个抽象基类Person,如何在不改动三类情况下实现多Student.T ...
- 编写存储过程导出oracle表数据到多个文本文件
1.测试表和数据: create table test(id )); begin .. loop insert into test values(k,'test'||k); end loop; end ...
- Mockito--完整功能介绍(转)
public interface DBAccess { int delete(String moi,String moc) throws Exception; void create(String m ...
- 在把数据库文件放在raw中,在应用程序中如何打开
1.DbManager代码 package com.zyh.zyhimportdatabase; import java.io.File; import java.io.FileOutputStrea ...
- SQLyog 注册码
用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417a56ea5da-f30b-4fb1-8a05-95f346a9b20ba0fe8645-3916- ...
- Python 网络编程说明
一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web ...
- 基于visual Studio2013解决算法导论之009快速排序随机版本
题目 快速排序随机版本 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...