imagelist中的第一个图标为何不显示?(50分)

  • 主题发起人 主题发起人 flyinsky
  • 开始时间 开始时间
F

flyinsky

Unregistered / Unconfirmed
GUEST, unregistred user!
1:
在Ttreeview中我定义了两个Timagelist,Imagelist1 作为
treeview1的images属性,imagelist2 作为treeview1 的
stateimage属性,发现在treenode 中调用
node1.stateindex:=0;时,treeview中总无法显示图标,事实上
imagelist2中add了三个图标,而stateindex:=1,2,3...时都可以正确
显示,imagelist1 中就无此问题,怎么回事?
2:
TimageList.(addicon,add) 等函数 增加的图标
为什么不存入Timagelist 中,程序运行完后,imagelist还是老样子,
如何将create 的图标保存进imagelist呢?
 
1.我看看再说.
2.当然不能保存,否则你岂不是可以保存到exe文件里面了!!!
建议把图片文件路径保存到注册表,程序启动时从注册表读取文件路径,
再动态load.
 
是不是你图片有问题? 被Transparent了?
换一个图片试一试.
 
不会吧,我都用同样的方法add的其他图标都可显示呀!
没该什么Transparent.
 
因为imagelist的transparent是自动把你的小图片的左下角的点的颜色作为透明色
的,如果你的那个图片坐下角那个点的颜色正好是你图片的颜色,图片就被透明掉了.
 
还是不对吧,因为我记的清楚,我换过好几副图,
都一样,再说这图标都是32*32,左下角都是空白呀!
而图标色没有白色的。
 
要不把你的代码片断贴出来,看你是不是忽略了什么东西.
 
ok,cAkk老兄,哦不,应该叫声老师了,不好意思,我的两个问题都在
(谁能告诉我Ttreeview.customsort 的使用方法?)
请教你,太感谢了,过一下,我把问题再贴出来,
到时候请您指教。
先谢过!
 
贴出来,让大家看看.
 
1、是不是SelectedIndex的问题。你在程序里面用代码设置一下呢。
我发现当你选定一个Node后,它会自动调用ImageIndex=0的图片来代替SeletctedIndex,所以要用程序对SeletedIndex进行显式定义。
2、显然不能这样做,Runtime的东西不能和DesignTime的东西混淆。
 
below is experts-exchange's answer:
procedure TForm1.Button1Click(Sender: TObject);
var
TempNode : TTreeNode;
begin

//TempNode equals what is selected in the TreeView
TempNode := TreeView1.Selected;
TempNode.selectedindex := 1;
//Assign image 0 to TempNode.StatIndex
TempNode.StateIndex := 0;
Treeview1.refresh;
treeview1.SetFocus;
end;
 
各位老兄,这是我的程序,大家的方法呢我都看过了,好象问题不是在这儿。
先看看程序把

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ImageList1: TImageList;//事先将图标载入
ImageList2: TImageList;//事先将图标载入
TreeView1: TTreeView;
procedure Button1Click(Sender: TObject);
private
function mysortproc (node1,node2:Ttreenode;Data:Integer):integer;stdcall;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
function tform1.mysortproc(node1,node2:Ttreenode;Data:Integer):integer;stdcall;
begin
result:=-lstrcmp(Pchar(node1.text),pchar(node2.text));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
treeview1.CustomSort(@mysortproc,0);
end;
end.
 
对不起,载错程序了,不过这是我的另外个问题,CAKK老兄应该知道的,
我按这个的排序方法还是不行的,编译显示:“variable required!”
 
关于IMAGELIST 中 stateindex:=0 图标不能显示的问题的
应该是这个程序:帮忙看看
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ImageList1: TImageList;//事先载入图表
ImageList2: TImageList;//事先载入图标
TreeView1: TTreeView;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
rootnode:TTreenode;
cnode:TTreenode;
i:integer;
begin
rootnode:=treeview1.items[0];
cnode:=rootnode;
cnode.ImageIndex:=0;
cnode.stateindex:=0;
for i:=1 to treeview1.Items.count-1 do
begin
cnode:=rootnode.getnextchild(cnode);
cnode.ImageIndex:=0;
cnode.StateIndex:=0;
// 无效的图标,值为1时可以将IMAGELIST2中的第二
副图标调出。
end;
treeview1.refresh;
end;
end.
 

function CustomSort(SortProc: TTVCompare;
Data: Longint): Boolean;
注意:
type TTVCompare = function(lParam1, lParam2, lParamSort: Longint): Integer;
stdcall;
不是
type TTVCompare = function(lParam1, lParam2, lParamSort: Longint): Integer <font color='red'>of object</font>;
stdcall;
所以:
function mysortproc(node1,node2:Ttreenode;Data:Integer):integer;stdcall;
begin
result:=-lstrcmp(Pchar(node1.text),pchar(node2.text));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
treeview1.CustomSort(@mysortproc,0);
end;

 
1.关于排序的问题:
mysortproc函数不能作为form的成员,你必须把他的声明从private里面去掉,
然后把上面mysortproc的实现部分的"tform1."去掉就可以了.
2.imagelist的问题我还真看不出来有什么毛病,你干脆把你的代码发给我
吧(包括dfm,res等)! 我还是怀疑你的imagelist有问题.
cakk2000@163.net
 
function mysortproc(lparam1, lparam2, lparam3:Integer):integer;stdcall;
begin
result:=-lstrcmp(Pchar(TTreeNode(pointer(lparam1)).text),pchar(TTreeNode(pointer(lparam2)).text));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
treeview1.CustomSort(mysortproc,0);
end;
 
xixi,eYes也有粗心的时候 :-)
treeview1.CustomSort(mysortproc,0);
^^少了一个@
 
多人接受答案了。
 
后退
顶部