Imagel.Picture.Icon.Handle := Extractlcon(Handle, PChar(OpenDialogl.FileName), 0);

Еще одна функция, позволяющая в VCL Win32 извлекать пиктограммы из ис-полныемых файлов и библиотек DLL - Extractlcon. Она извлекает пиктограммы только из исполняемых файлов, DLL и файлов пиктограмм Лео. Но зато она позволяет извлечь все пиктограммы, содержащиеся в файле. Функция объявлена в модуле ShellAPI следующим образом:

function Extractlcon (hlnst: HINST;
IpszExeFileName: PChar;
nlconlndex: UINT): HICON;
stdcall;

В VCL .NET тип параметра IpszExeFileName - string.

Параметр hlnst - дескриптор приложения, вызывающего функцию. Параметр pszExeFileName - полное имя файла, из которого извлекаются пиктограммы. А параметр nlconlndex может в зависимости от ситуации трактоваться по-разному. Если nlconlndex = -1, то функция возвращает число пиктограмм в данном файле. А если nlconlndex - неотрицательная величина, то она воспринимается как индекс затребованной пиктограммы, и тогда функция возвращает дескриптор этой пиктограммы. Если файл не является исполняемым, DLL и файлом Лео, то возвращается 1. Если в файле нет пиктограмм, возвращается 0.

В VCL .NET функция Extractlcon срабатывает (во всяком случае пока) только для файлов пиктограмм Лео. Так что дальнейшее обсуждение этой функции относится только к приложениям VCL Win32. В этих приложениях получение пиктограмм функцией Extractlcon можно оформить следующим образом:

var Icon : hlcon;
nlcon: word;

i: integer; begin

if(OpenDialogl.Execute) then begin

Imagel.Canvas.FillRect(Imagel.ClientRect) ;
i := -1;
nlcon := Extractlcon(Handle, PChar(OpenDialogl.FileName), i);

for i:=0 to nlcon - 1 do

begin

Icon := Extractlcon(Handle, PChar(OpenDialogl.FileName), i);
Drawlcon(Imagel.Canvas.Handle, 10 + 100*i, 100, Icon);
end;
end;
end;

Если пользователь выбрал файл, то вызывается функция Extractlcon с nlconlndex = -1. В результате возвращается число пиктограмм в файле nlcon. Затем все пиктограммы рисуются на канве компонента Imagel.

Естественно, дескрипторы пиктограмм, полученные с помощью функции Extractlcon, можно загружать в дескрипторы традиционных для Delphi объектов TIcon, как это было рассмотрено ранее.

Достоинством функции Extractlcon является то, что она позволяет получить все пиктограммы файла. Например, в файле delphi32.exe содержится 6 пиктограмм. А недостатком функции по сравнению с ExtractAssociatedlcon является невозможность получить пиктограмму файла, связанного с файлом документа. Впрочем, этот недостаток легко исправить. Добавьте к приведенному выше коду объявление переменной

APchar:array[0..MAX_PATH] of char; и после приведенных выше операторов добавьте:

if nlcon = 0 then begin

FindExecutable(PChar(OpenDialogl.FileName),nil,APchar);
if APchar <>
'' then begin i := -1;
nlcon := Extractlcon(Handle, APchar, i);

for i:=0 to nlcon - 1 do

begin

Icon := Extractlcon(Handle, APchar, i);
Drawlcon(Imagel.Canvas.Handle, 10 + 100*i, 10, Icon);
end;
end;
end;

Если в результате рассмотренного ранее вызова Extractlcon выяснилось, что файл не содержит пиктограмм, например, это файл документа, то функцией FindExecutable определяется файл, связанный с данным документом. Если такой файл находится, то берутся пиктограммы из него.


⇐ Предыдущая страница| |Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс