龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

在Listboxes中加背景图[组图]

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
Delphi 1. 建立一个窗体 2. 放一个ComboBox和Listbox 3. 改变Component的Style为csOwnerDrawVariable和ListBox的Style为lbOwnerDrawVariabble。 4. 声明5个TBitmap的全局变量 5. 覆盖Form的OnCreate. 6. 覆盖ComboBox的OnDraw
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:delphiimagesuttons ools.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
  
精彩图集

赞助商链接