Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Получить картинку из ShellTreeView


Автор: Keeper89 29.4.2009, 23:54
Доброго времени суток!

Собственно, требуется получить иконку определенного узла ShellTreeView. Как это можно сделать? smile

Заранее спасибо.

Автор: Keeper89 30.4.2009, 22:27
... или узла TreeView, это не важно.

Автор: Rrader 1.5.2009, 07:49
Keeper89, в своем или чужом приложении?

Автор: Keeper89 1.5.2009, 14:29
Rrader,  в своем.

Автор: Rrader 3.5.2009, 14:16
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ShellCtrls, StdCtrls, ExtCtrls, CommCtrl;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    ShellTreeView1: TShellTreeView;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  IList: HIMAGELIST;
  W, H: Integer;
  Item: TTVItem;
begin
  with ShellTreeView1 do
  begin
    IList := TreeView_GetImageList(Handle, TVSIL_NORMAL);
     if IList <> 0 then
    begin
      if ImageList_GetIconSize(IList, W, H) then
      with Image1 do
      begin
        Width := W;
        Height := H;
        FillChar(Item, SizeOf(Item), 0);
        with Item do
        begin
          mask := TVIF_IMAGE or TVIF_HANDLE;
          { The first }
          hItem := Items[0].ItemId;
        end;
        if TreeView_GetItem(Handle, Item) then
          Picture.Icon.Handle := ImageList_GetIcon(IList,
            Item.iImage, ILD_NORMAL);
      end;
    end;
  end;
end;

end.

Автор: Keeper89 3.5.2009, 14:26
Cпасибо!

Автор: Keeper89 3.5.2009, 17:29
Rrader, увидел проблему потери цветности: при получении картинки фон иконки становится черным. Обработать каждую картинку вот http://forum.vingrad.ru/index.php?showtopic=256682&view=findpost&p=1853511?

Автор: Rrader 4.5.2009, 12:14
Цитата(Keeper89 @  3.5.2009,  23:29 Найти цитируемый пост)
Обработать каждую картинку вот так?

Нет, картинку обрабатывать не надо. Проблема в ImageList у TShellTreeView - ему (ImageList) не хватает требуемой битности, его (ImageList) надо обработать тем способом, например, взломом класса TShellTreeView.

Автор: Keeper89 4.5.2009, 12:53
Ок, попробую.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)