Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Иконки в 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 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
3-1106810558
Julia
2005-01-27 10:22
2005.02.27
Перенос данных из одного поля в другие


9-1102083711
Domowoi
2004-12-03 17:21
2005.02.27
Чтение файла


3-1107233168
RDen
2005-02-01 07:46
2005.02.27
A user transaction is already in progress.


1-1108394254
Garry
2005-02-14 18:17
2005.02.27
Как работать в Дельфи с HEX кодами....


3-1107182429
MakedoneZ
2005-01-31 17:40
2005.02.27
Почему появляется ошибка "Dataset not in edit or inser mode"