在Listboxes中加背景图

2016-02-19 19:17 19 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐在Listboxes中加背景图,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

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

来源:https://www.tulaoshi.com/n/20160219/1620571.html

延伸阅读
懒人天气修改如何背景图   1)安装并打开懒人天气,点击主界面中的。   2)选择,点击在对话框中点击。   3)根据需要选择自己喜欢的背景图即可。  
懒人天气修改背景图方法   1)安装并打开懒人天气,点击主界面中的。   2)选择,点击在对话框中点击。   3)根据需要选择自己喜欢的背景图即可。  
懒人天气如何更换背景图   1.安装并打开懒人天气,点击主界面中的。 2.选择,点击在对话框中点击。 3.根据需要选择自己喜欢的背景图即可。 懒人天气着装参考操作方法   1)打开懒人天气,然后把主界面拉到最低端的www.tulaoshi.com。   2)点击进去之后可以根据自己想穿的类型进行选择,...
在CODEGURU看到一个MDI CLIENT以位图为背景的例子,受到启发,在DIALOG中相似地模仿了以下,效果很好。 主要要点是处理背景擦除消息时在DIALOG CLIENT区域画位图,代码如下: BOOL CBmpbgDlg::OnEraseBkgnd(CDC* pDC) { CRect rect; GetClientRect(&rect); BITMAP bm; CDC dcMem; m_pBmp-GetObject(sizeof(BITMAP),(LPVOID)&...
原图 加上背景的效果图 抠出的效果图

经验教程

327

收藏

11
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部