1

Delphi2010 で VirtualTreeview に小さなアイコンを追加しようとしています プロパティ images を使用して ImageList を VirtualTreeview に接続しています

procedure TMainFrm.VSTGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  FileInfo: PFileInfoRec;
begin
  if Kind in [ikNormal , ikSelected] then
  begin
    if Column = 0 then
    ImageIndex :=ImageList1.AddIcon(FileInfo.FileIco);
  end;
end;

しかし、アイコンを追加した後は暗すぎるように見えます:

スクリーンショット

FileInfo Strucutre (メソッドを含むレコード) はファイルをロードするときにいっぱいになるので、fileico を fileinfo から imagelist に追加し、ツリービューに表示するだけです。

type
  PFileInfoRec= ^TFileInfoRec;
  TFileInfoRec = record
  strict private
    vFullPath: string;
      .
      .
      .
    vFileIco : TIcon;
  public
    constructor Create(const FilePath: string);
    property FullPath: string read vFullPath;
      .
      .
      .
    property FileIco : TIcon  read vFileIco;
  end;

コンストラクター:

constructor TFileInfoRec.Create(const FilePath: string);
var
  FileInfo: SHFILEINFO;
begin
  vFullPath := FilePath;
    .
    .
    .
  vFileIco        := TIcon.Create;
  vFileIco.Handle := FileInfo.hIcon;
//  vFileIco.Free;
end;

問題はどこにありますか?! ありがとう

4

1 に答える 1

2

画像リストを用意して、それをプロパティImageList1に割り当てましょう。VirtualStringTree1.Images次に、前のコメンターに参加して、 を使用する前に、 のように、 を使用できるよりもFileInfo何かを割り当てます。ただし、アイコンは. 追加されたアイコンのインデックスを FileInfo に保存するよりも、OnInitNode でそれを行う必要があります (仮想パラダイムに従う場合は、何をすべきか)。例:FileInfo := Sender.GetNodeData(Node)FileInfo.FileIcoOnGetImageIndex

procedure TForm1.VirtualStringTree1InitNode(Sender: TBaseVirtualTree;
  ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  FileInfo: PFileInfoRec;
begin
  FileInfo := Sender.GetNodeData(Node);
  //...
  FileInfo.FileIcoIndex := ImageList1.AddIcon(FileInfo.FileIco);

end;

よりonGetImageIndex:

procedure TMainFrm.VSTGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  FileInfo: PFileInfoRec;
begin
  FileInfo := Sender.GetNodeData(Node);
  if Kind in [ikNormal , ikSelected] then
  begin
    if Column = 0 then
    ImageIndex :=FileInfo.FileIcoIndex;
  end;
end;

十分でない場合は、サンプル コードをさらに投稿して、問題についてお知らせください。

于 2012-06-19T11:55:43.953 に答える