Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

Иконки в ListView   Найти похожие ветки 

 
Ученик   (2005-01-11 13:10) [0]

Почему не работает следующий код?

var
 fi: TSHFileInfo;
 lc: TListColumn;
begin
 DriveComboBox1.DirList := DirectoryListBox1;
 with ListView1 do
 begin
   SmallImages := TImageList.CreateSize(16,16);
   SmallImages.Handle := ShGetFileInfo("*.*", 0, fi,
     SizeOf(fi), SHGFI_SMALLICON or SHGFI_ICON
     or SHGFI_SYSICONINDEX);
   LargeImages := TImageList.Create(nil);
   LargeImages.Handle := ShGetFileInfo("*.*", 0, fi,
     SizeOf(fi), SHGFI_LARGEICON or SHGFI_ICON
     or SHGFI_SYSICONINDEX);
   lc := Columns.Add;
   lc.Caption := "Name";
   lc := Columns.Add;
   lc.Caption := "Size";
 end;
 UpdateFiles;
end;

Иконки не рисуются :( PLZ help


 
Ученик   (2005-01-11 14:40) [1]

Я не понимаю, что очень сложный код???
Неужели никто не работал с ShGetFileInfo?


 
Ученик   (2005-01-11 14:47) [2]

Да, и вопрос вдогонку: как реализовано MainMenu такого типа, как в Office? Похоже, что оно лежит в кулбанде CoolBar"а...
Никто не пытался такое сделать?


 
Игорь Шевченко ©   (2005-01-11 14:47) [3]

А проверить результат функции ? :)

Убери "*.*" и поставь пустую строку.

SHGetFileInfo("", 0, Info, SizeOf(TShFileInfo),
   SHGFI_SYSICONINDEX or SHGFI_SMALLICON);


 
Игорь Шевченко ©   (2005-01-11 14:48) [4]


> как реализовано MainMenu такого типа, как в Office?


Свой оконный класс.

С уважением,


 
Игорь Шевченко ©   (2005-01-11 14:57) [5]

Извиняюсь, в [3] маху дал.

Полный код такой:

var
 DriveCount, I : Integer;
{ Из JVCL JvDriveCtrls.pas }
 tmp : array[0..104] of char; // 4 chars ("C:\#0") * 26 possible drives +
                              // 1 terminating #0 = 105 chars
 P : PChar;
 S : String;
 Info: TSHFileInfo;
begin
 FLogicalDrives := TStringList.Create;
 LogicalImageList.Handle := SHGetFileInfo("", 0, Info, SizeOf(TShFileInfo),
   SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
 FillChar(tmp[0], sizeof(tmp), #0);
 GetLogicalDriveStrings(sizeof(tmp), tmp);
 P := tmp;
 while P^ <> #0 do begin
   S := string(P);
   Inc(P, 4);
   SHGetFileInfo(PChar(S), 0, Info, SizeOf(TShFileInfo),
     SHGFI_DISPLAYNAME or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
   LogicalDriveComboBox.Items.AddObject(Trim(Info.szDisplayName),
     TObject(Info.iIcon));
   FLogicalDrives.Add(S);
 end;


 
BiN ©   (2005-01-11 15:04) [6]

Может, я чего-то недопонимаю, но разве хэндл ImageList-а и хэндл иконки - это одно и тоже?

С уважением.


 
Игорь Шевченко ©   (2005-01-11 15:07) [7]

BiN ©   (11.01.05 15:04) [6]

Насколько я понимаю, Handle ImageList получается в первом вызове ShGetFileInfo, потому как в нем (в системном ImageList) содержатся иконки всех дисков.
У меня используется собственная прорисовка иконок, поэтому иконки извлекаются для каждого устройства отдельно.

С уважением,


 
d3coder ©   (2005-01-11 15:09) [8]

Такой код пополнее будет :)

var
DriveCount, I : Integer;
{ &#200;&#231; JVCL JvDriveCtrls.pas }
tmp : array[0..104] of char; // 4 chars ("C:\#0") * 26 possible drives +
                             // 1 terminating #0 = 105 chars
P : PChar;
S : String;
Info: TSHFileInfo;
FLogicalDrives: TStringList;
LogicalImageList: TImageList;
begin
FLogicalDrives := TStringList.Create;
LogicalImageList:= TImageList.CreateSize(16,16);
with ListView1 do
 begin
LogicalImageList.Handle := SHGetFileInfo("", 0, Info, SizeOf(TShFileInfo),
  SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
FillChar(tmp[0], sizeof(tmp), #0);
GetLogicalDriveStrings(sizeof(tmp), tmp);
P := tmp;
while P^ <> #0 do begin
  S := string(P);
  Inc(P, 4);
  SHGetFileInfo(PChar(S), 0, Info, SizeOf(TShFileInfo),
    SHGFI_DISPLAYNAME or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  DriveComboBox1.Items.AddObject(Trim(Info.szDisplayName),
    TObject(Info.iIcon));
  FLogicalDrives.Add(S);
end;
end;
end;

но все равно не работает :((((


 
BiN ©   (2005-01-11 15:15) [9]

Игорь Шевченко ©   (11.01.05 15:07) [7]

Мда, опять я невнимательно прочел описание флага SHGFI_SYSICONINDEX. Я подумал, что в коде происходит попытка присвоения описателя одной иконки описателю системного ImageList-a. Спасибо за разъяснения.

С уважением.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
14-1107196182
zokzok
2005-01-31 21:29
2005.02.27
Delphi 7 и файлы форм (*.dfm)


4-1105397977
GanibalLector
2005-01-11 01:59
2005.02.27
GetOpenFileName/GetSaveFileName


1-1107928094
JohnKorsh
2005-02-09 08:48
2005.02.27
Как грамотно стиреть директорию ?


1-1108022203
Игорь нтк
2005-02-10 10:56
2005.02.27
Как выбрать строку Combobox


1-1108349494
ТехникПТО
2005-02-14 05:51
2005.02.27
Сохранение лога чата





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский