Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.10.2012, 23:16
pylsar pylsar вне форума
Прохожий
 
Регистрация: 11.02.2012
Сообщения: 18
Репутация: 10
По умолчанию TreeView и системные иконки

Компилировал на win7 отображались системные иконки дисков, сейчас на хр скомпилировал - пусто.
В чём может быть причина ?
Код:
function GetIcon(const FileName: string; const IconType: TIconType = itSmall):
  TIcon;
var
  FileInfo: TShFileInfo;
  ImageList: TImageList;
  IT: DWORD;
begin
  IT := SHGFI_SMALLICON;
  Result := TIcon.Create;
  ImageList := TImageList.Create(nil);
  if (IconType = itLarge) then
  begin
    IT := SHGFI_LARGEICON;
    ImageList.Height := 32;
    ImageList.Width := 32;
  end;
  FillChar(FileInfo, Sizeof(FileInfo), #0);
  ImageList.ShareImages := true;
  ImageList.Handle := SHGetFileInfo(
    PChar(FileName),
    SFGAO_SHARE,
    FileInfo,
    sizeof(FileInfo),
    IT or SHGFI_SYSICONINDEX
    );
  ImageList.GetIcon(FileInfo.iIcon, Result);
  ImageList.Free;
end;
 
 
procedure TForm4.FormCreate(Sender: TObject);
var
  c : char;
  s : string;
  node: TTreeNode;
  DriveType: integer;
begin
  TreeView1.Items.BeginUpdate;
  TreeView1.Images := TImageList.CreateSize(16,16);
  for c := 'A' to 'Z' do
  begin
    s := c + ':';
    DriveType := GetDriveType(PChar(s));
    if DriveType = 1 then
      continue;
    node := TreeView1.Items.AddChild(nil, s);
    node.ImageIndex := TreeView1.Images.AddIcon(GetIcon(s));
    node.SelectedIndex := TreeView1.Images.AddIcon(GetIcon(s));
    node.HasChildren := true;
  end;
  TreeView1.Items.EndUpdate;
end;
 
procedure NextLevel(ParentNode: TTreeNode);
 
  function DirectoryName(name: string): boolean;
  begin
    result := (name > '.') and (name > '..');
  end;
 
var
  sr, srChild: TSearchRec;
  node: TTreeNode;
  path: string;
begin
  node := ParentNode;
  path := '';
  repeat
    path := node.Text + '\' + path;
    node := node.Parent;
  until
    node = nil;
  if FindFirst(path + '*.*', faDirectory, sr) = 0 then
  begin
    repeat
      if (sr.Attr and faDirectory > 0) and DirectoryName(sr.name) then
      begin
        node := Form4.TreeView1.Items.AddChild(ParentNode, sr.name);
        node.ImageIndex := 0;
        node.SelectedIndex := 1;
        node.HasChildren := false;
        if FindFirst(path + sr.name + '\*.*', faDirectory, srChild) = 0 then
        begin
          repeat
            if (srChild.Attr and faDirectory > 0) and
            DirectoryName(srChild.name) then
              node.HasChildren := true;
          until
            (FindNext(srChild) > 0) or node.HasChildren;
        end;
        FindClose(srChild);
      end;
    until
      FindNext(sr) > 0;
  end
  else
  ParentNode.HasChildren := false;
  FindClose(sr);
end;
 

И еще вопрос выводил в win7 системную иконку в tpicture, края объекта иконки сглаженные, а при выводе в treeview не сглаженные углы, ступенчатые. Что посоветуете сделать ?
Ответить с цитированием
  #2  
Старый 05.10.2012, 06:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от pylsar
Компилировал на win7 отображались системные иконки дисков, сейчас на хр скомпилировал - пусто.
В чём может быть причина ?
С этой проблемой я тоже когда-то столкнулся. Если один вариант кода нормально отображает иконки на XP, то на Win7 не отображает или отображает криво. А другой вариант кода наоборот - нормально отображает иконки на Win7, но не отображает иконки на XP. К сожалению универсального метода мне не удалось сделать. В той программе я просто проверял версию винды и выполнял соответствующий код, но если есть более корректное решение, мне бы тоже хотельось его узнать...
Ответить с цитированием
  #3  
Старый 05.10.2012, 22:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Всё очень просто, замени при вызове GetIcon
Код:
    node.ImageIndex := TreeView1.Images.AddIcon(GetIcon(s));
    node.SelectedIndex := TreeView1.Images.AddIcon(GetIcon(s));
на
Код:
    node.ImageIndex := TreeView1.Images.AddIcon(GetIcon(s + '\'));
    node.SelectedIndex := TreeView1.Images.AddIcon(GetIcon(s + '\'));
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 08.10.2012, 21:55
pylsar pylsar вне форума
Прохожий
 
Регистрация: 11.02.2012
Сообщения: 18
Репутация: 10
По умолчанию

спасибо

почему теряется сглаженность значка при ассоциации его с древом ? Вывел Tpicture, всё нормально.
http://s019.radikal.ru/i629/1210/26/6b43870eb8ac.jpg

И... хочу привязать nodы Treeview к PageControl, tabSheets (tabvisible) в false при этом. Возможно ли так сделать ? с видимыми tabaми легко.

Код:
 PageControl1.TabIndex:=TreeView2.Selected.Index;
Ответить с цитированием
  #5  
Старый 06.12.2012, 18:51
giv_main giv_main вне форума
Прохожий
 
Регистрация: 27.09.2011
Сообщения: 1
Репутация: 10
По умолчанию

Мне помогла установка битности компонента ImageList
Код:
TreeView1.Images.ColorDepth := cd32Bit;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025