如何在TreeView,ListView中添加背景图片,好象有点难度?

torrentwang 2001-05-08 10:28:00
...全文
224 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdx 2001-06-03
  • 打赏
  • 举报
回复
torrentwang 2001-05-28
  • 打赏
  • 举报
回复
我要加分如何加分,比较的麻烦,不能让各位大峡白忙一场
zy61 2001-05-10
  • 打赏
  • 举报
回复
但是上面的ITEM会盖掉一部分的背影,如果想让ITEM透明就要定义事件OnCustomDraw,
另外如果想做一个好一点的组件,以后也好用的话可以从TCustomListView继承,而 不是从TListView;
zy61 2001-05-10
  • 打赏
  • 举报
回复
如果TListView 没有Paint 的话Ary的方法可能不行,应该是建一个
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls,jpeg;

type
TListViewEx = class(TListView)
private
FBkgnd : TJPEGImage;
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
public
property BkGnd : TJPEGImage read FBkgnd write FBKgnd;
end;


TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FList : TListViewEx;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
jpg : TJpegImage;
begin
jpg:= TJpegImage.Create;
jpg.LoadFromFile ('c:\My Documents\My pictures\god.jpg');
FList := TListViewEx.Create(self);
FList.Parent := self;
FList.BkGnd := jpg;
FList.Items.Add;
FList.Items[0].Caption := 'askjdfsajfhsa';
FList.Items.Add;
FList.Items[1].Caption := 'askjdfsajfhsa';

FList.Items.Add;
FList.Items[2].Caption := 'askjdfsajfhsa';
FList.Items.Add;
FList.Items[3].Caption := 'askjdfsajfhsa';
end;

{ TListViewEx }

procedure TListViewEx.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
if not Assigned(FBKGnd) then
inherited
else begin
Canvas.Lock;
try
Canvas.Handle := Message.DC;
Canvas.Draw(0,0, Bkgnd);
Canvas.Handle := 0;
finally
Canvas.Unlock;
end;
end;
end;

end.
torrentwang 2001-05-10
  • 打赏
  • 举报
回复
我如何加分呀
torrentwang 2001-05-09
  • 打赏
  • 举报
回复
可是,你的那句
Protected
procedure Paint;override;
end;
编译时报[Error] ListView1.pas(13): Method 'Paint' not found in base class
我改成了 virtual,编译通过了,安装好
但是控件如何用呀
分数我将再加
manboo 2001-05-09
  • 打赏
  • 举报
回复
高实在是高啊!
格兰特杨 2001-05-08
  • 打赏
  • 举报
回复
非常好阿菠萝,我都想给你分拉...:)
Apollo47 2001-05-08
  • 打赏
  • 举报
回复
uses Jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
jpg:TJPEGImage;
begin
jpg:= TJpegImage.Create;
jpg.LoadFromFile('F:\My Documents\Pictures\0091.jpg');
Treeview1.Canvas.Draw(0,0,jpg);
Listview1.Canvas.Draw(0,0,jpg);
jpg.Free;
end;
OneStandNight 2001-05-08
  • 打赏
  • 举报
回复
这个挺容易的,想要的话就MAIL我吧...
xycleo 2001-05-08
  • 打赏
  • 举报
回复
应该也是用canvas自己画吧!!
Canvas->Draw(50,50,pBitmap);
lichp 2001-05-08
  • 打赏
  • 举报
回复
最好下载一些界面类控件,支持背景图片的不少哟
码狂 2001-05-08
  • 打赏
  • 举报
回复
刚才写错了,重发一次。

从TListView继承一个自已的控件,重载它的Paint方法。
type
TExListView = class(TListView)
protected
procedure Paint; override;
end;
......

procedure TExListView.Paint;
var
jpg:TJPEGImage;
begin
// Draw you background here
jpg:= TJpegImage.Create;
try
jpg.LoadFromFile('F:\My Documents\Pictures\0091.jpg');
TExListView(Self).Canvas.Draw(0,0,jpg);
// 老外一般这样写,我常写成 Self.Canvas.Draw(0,0,jpg);
finally
jpg.Free;
inherited; // inherite TListViewDraw;
end;
end;
省略了控件的其它部份。如果对控件不熟,建议你通过向导创建新控件并注册。实际上很简单的。

码狂 2001-05-08
  • 打赏
  • 举报
回复
从TListView继承一个自已的控件,重载它的Paint方法。
type
TExListView = class(TListView)
protected
procedure Paint; override;
end;
......

procedure TExListView.Paint;
var
jpg:TJPEGImage;
begin
// Draw you background here
jpg:= TJpegImage.Create;
try
jpg.LoadFromFile('F:\My Documents\Pictures\0091.jpg');
Treeview1.Canvas.Draw(0,0,jpg);
Listview1.Canvas.Draw(0,0,jpg);
finally
jpg.Free;
inherited; // inherite TListViewDraw;
end;
end;
省略了控件的其它部份。如果对控件不熟,建议你通过向导创建新控件并注册。实际上很简单的。
wzs 2001-05-08
  • 打赏
  • 举报
回复
只需在listview的重画事件用Apollo47(阿波罗)方法
wzs 2001-05-08
  • 打赏
  • 举报
回复
只需在listview的重画事件用Apollo47(阿波罗)方法
BaldZhang 2001-05-08
  • 打赏
  • 举报
回复
这个么,我想可能要自己再去写一遍这两个控件,重载它们的WM_ERASEBGGND消息处理方法,
把绘制底图的代码放在这里,哪位可以试试,应该有用的,我没时间试了,呵呵
manboo 2001-05-08
  • 打赏
  • 举报
回复
我想想!
torrentwang 2001-05-08
  • 打赏
  • 举报
回复
可是,当我点击TREEVIEW时,图片变的很破碎,我要得是那种,一直在底部而不会被改变,那位能解决这个问题呢

5,931

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧