Главная страница
    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.048 c
4-1105912902
Atrion
2005-01-17 01:01
2005.02.27
Очень прошу хоть кого-нибудь откликнуться на мою просьбу...


14-1107504549
skiFF
2005-02-04 11:09
2005.02.27
два будоражащие меня сейчас пробела в моих знаниях


9-1101917349
Malefic
2004-12-01 19:09
2005.02.27
Про что делать игру?


1-1108135492
Doxygen
2005-02-11 18:24
2005.02.27
Версия Delphi


9-1100792394
Da Stranger
2004-11-18 18:39
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский