首页  编辑  

为Listboxes和Comboboxes添加图片

Tags: /超级猛料/VCL/(Check|List|ComBo)BOX/   Date Created:

1.   建立一个窗体

2.  放一个ComboBox和Listbox

3.  改变Component的Style为csOwnerDrawVariable和ListBox的Style为lbOwnerDrawVariable。

4.  声明5个TBitmap的全局变量

5.  覆盖Form的OnCreate.

6.  覆盖ComboBox的OnDraw.

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:\delphi\images\buttons\globe.bmp');

 TheBitmap2 := TBitmap.Create;

 TheBitmap2.LoadFromFile('C:\delphi\images\buttons\video.bmp');

 TheBitmap3 := TBitmap.Create;

 TheBitmap3.LoadFromFile('C:\delphi\images\buttons\gears.bmp');

 TheBitmap4 := TBitmap.Create;

 TheBitmap4.LoadFromFile('C:\delphi\images\buttons\key.bmp');

 TheBitmap5 := TBitmap.Create;

 TheBitmap5.LoadFromFile('C:\delphi\images\buttons\tools.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