在Listboxes中加背景图

悟空说非礼勿视

悟空说非礼勿视

2016-02-19 19:17

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐在Listboxes中加背景图,无聊中的都看过来。
Delphi
  
  1. 建立一个窗体
  
  2. 放一个ComboBox和Listbox
  
  3. 改变Component的Style为csOwnerDrawVariable和ListBox的Style为lbOwnerDrawVariabble。
  
  4. 声明5个TBitmap的全局变量
  
  5. 覆盖Form的OnCreate.
  
  6. 覆盖ComboBox的OnDraw.
  
   !-- frame contents -- !-- /frame contents -- 7. 覆盖ComboBox的OnMeasureItem.
  
  8. 释放资源在Form的OnClose.
  
  下面给出完整的主程序源程序:
  
  unit Ownerdrw;
  
  interface
  
  uses
  
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  
  Forms, Dialogs, StdCtrls;
  
  type
  
  TForm1 = class(TForm)
  
  ComboBox1: TComboBox;
  
  ListBox1: TListBox;
  
  procedure FormCreate(Sender: TObject);
  
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  
  procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  
  Rect: TRect; State: TOwnerDrawState);
  
  procedure ComboBox1MeasureItem(Control: TWinControl; Index: Integer;
  
  var Height: Integer);
  
  procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
  
  Rect: TRect; State: TOwnerDrawState);
  
  procedure ListBox1MeasureItem(Control: TWinControl; Index: Integer;
  
  var Height: Integer);
  
  private
  
  { Private declarations }
  
  public
  
  { Public declarations }
  
  end;
  
  var
  
  Form1: TForm1;
  
  TheBitmap1, TheBitmap2, TheBitmap3, TheBitmap4,
  
  TheBitmap5 : TBitmap;
  
  implementation
  
  {$R *.DFM}
  
  procedure TForm1.FormCreate(Sender: TObject);
  
  begin
  
  TheBitmap1 := TBitmap.Create;
  
  TheBitmap1.LoadFromFile(C:delphiimagesuttonsglobe.bmp);
  
  TheBitmap2 := TBitmap.Create;
  
  TheBitmap2.LoadFromFile(C:delphiimagesuttonsvideo.bmp);
  
  TheBitmap3 := TBitmap.Create;
  
  Th tmap3.LoadFromFile(C:delphiimagesuttonsgears.bmp);
  
  TheBitmap4 := TBitmap.Create;
  
  TheBitmap4.LoadFromFile(C:delphiimagesuttonskey.bmp);
  
  TheBitmap5 := TBitmap.Create;
  
  TheBitmap5.LoadFromFile(C:delphiimagesuttonsools.bmp);
  
  ComboBox1.Items.AddObject(Bitmap1: Globe, TheBitmap1);
  
  ComboBox1.Items.AddObject(Bitmap2: Video, TheBitmap2);
  
  ComboBox1.Items.AddObject(Bitmap3: Gears, TheBitmap3);
  
  ComboBox1.Items.AddObject(Bitmap4: Key, TheBitmap4);
  
  ComboBox1.Items.AddObject(Bitmap5: Tools, TheBitmap5);
  
  ListBox1.Items.AddObject(Bitmap1: Globe, TheBitmap1);
  
  ListBox1.Items.AddObject(Bitmap2: Video, TheBitmap2);
  
  ListBox1.Items.AddObject(Bitmap3: Gears, TheBitmap3);
  
  
  ListBox1.Items.AddObject(Bitmap4: Key, TheBitmap4);
  
  ListBox1.Items.AddObject(Bitmap5: Tools, TheBitmap5);
  
  
  
  end;
  
  
  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  
  begin
  
  TheBitmap1.Free;
  
  TheBitmap2.Free;
  
  TheBitmap3.Free;
  
  TheBitmap4.Free;
  
  TheBitmap5.Free;
  
  end;
  
  procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  
  Rect: TRect; State: TOwnerDrawState);
  
  var
  
  Bitmap: TBitmap;
  
  Offset: Integer;
  
  begin
  
  with (Control as TComboBox).Canvas do
  
  begin
  
  FillRect(Rect);
  
  Bitmap := TBitmap(ComboBox1.Items.Objects[Index]);
  
  if Bitmap nil then
  
  begin
  
  BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,
  
  Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,
  
  Bitmap.Height), clRed);
  
  Offset := Bitmap.width + 8;
  
  end;
  
  { display the text }
  
  TextOut(Rect.Left + Offset, Rect.Top, Combobox1.Items[Index])
  
  end;
  
  end;
  
  
  
  procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index:
  
  Integer; var Height: Integer);
  
  begin
  
  height:= 20;
  
  end;
  
  
  
  procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  
  Rect: TRect; State: TOwnerDrawState);
  
  var
  
  Bitmap: TBitmap;
  
  Offset: Integer;
  
  begin
  
  with (Control as TListBox).Canvas do
  
  begin
  
  FillRect(Rect);
  
  Bitmap := TBitmap(ListBox1.Items.Objects[Index]);
  
  if Bitmap nil then
  
  begin
  
  BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,
  
  Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,
  
  Bitmap.Height), clRed);
  
  Offset := Bitmap.width + 8;
  
  end;
  
  { display the text }
  
  TextOut(Rect.Left + Offset, Rect.Top, Listbox1.Items[Index])
  
  end;
  
  end;
  
  
  
  procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
  
  var Height: Integer);
  
  begin
  
  height:= 20;
  
  end;
  
  
  
  end.
  
  
  //该窗体的DFM文件
  
  
  
  object Form1: TForm1
  
  Left = 211
  
  Top = 155
  
  Width = 435
  
  Height = 300
  
  Caption = Form1
  
  Font.Color = clWindowText
  
  Font.Height = -13
  
  Font.Name = System
  
  Font.Style = []
  
  PixelsPerInch = 96
  
  OnClose = FormClose
  
  OnCreate = FormCreate
  
  TextHeight = 16
  
  object ComboBox1: TComboBox
  
  Left = 26
  
  Top = 30
  
  Width = 165
  
  Height = 22
  
  Style = csOwnerDrawVariable
  
  ItemHeight = 16
  
  TabOrder = 0
  
  OnDrawItem = ComboBox1DrawItem
  
  OnMeasureItem = ComboBox1MeasureItem
  
  end
  
  object ListBox1: TListBox
  
  Left = 216
  
  Top = 28
  
  Width = 151
  
  Height = 167
  
  ItemHeight = 16
  
  
  Style = lbOwnerDrawVariable
  
  TabOrder = 1
  
  OnDrawItem = ListBox1DrawItem
  
  OnMeasureItem = ListBox1MeasureItem
  
  end
  
  end
展开更多 50%)
分享

猜你喜欢

在Listboxes中加背景图

编程语言 网络编程
在Listboxes中加背景图

在Listbox加背景图

编程语言 网络编程
在Listbox加背景图

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi学习:在Listbox加背景图

Delphi
Delphi学习:在Listbox加背景图

PS复杂背景图抠图方法

PS
PS复杂背景图抠图方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

大姨吗背景图怎么换

手机软件 应用软件
大姨吗背景图怎么换

美丽说怎么更换背景图

手机软件 应用软件
美丽说怎么更换背景图

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

DreamWeaver,经典50问(三)

DreamWeaver,经典50问(三)

镜像文件还原分区如何操作?

镜像文件还原分区如何操作?
下拉加载更多内容 ↓