{ **** UBPFD *********** by delphibase.endimus.com ****
>> Вызывает диалог выбора иконки (как при смене значка на десктопе)
Зависимости: uses activex;
Автор: Babay_S
Copyright: Мои раскопки
Дата: 27 сентября 2002 г.
***************************************************** }uses activex;
function ChangeIconDialog(hOwner: LongInt; Filename: string; var IconIndex:
LongInt): LongInt;
{Вызывает диалог выбора иконки (как при смене значка на десктопе)
Параметры
hOwner - хэндл родителя.
FileName - полный путь файла с иконками (должен существовать).
Если в указанном файле нет иконок, вызываются иконки Shell32.dll.
IconIndex возвращает номер иконки в файле.
Результат выполнения функции возвращает 1 если иконка выбрана и 0 если отмена
Далее эту иконку можно вытащить с помощью вполне документированной функции
ExtractIconEx из той же библиотеки.
}implementationfunction SHChangeIconDialog(hOwner: LongInt; sFilename: LPWSTR; nBuf: LongInt;
var nIconIndex: LongInt): LongInt;
stdcall; external "Shell32.dll" index 62;
function ChangeIconDialog(hOwner: LongInt; Filename: string; var IconIndex:
LongInt): LongInt;
var
nFileName: LPWSTR;
FNLen: Integer;
i: LongInt;
begin
FNLen := Length(FileName) + 1;
nFileName := CoTaskMemAlloc(FnLen * sizeof(WideChar));
StringToWideChar(FileName, nFileName, FnLen);
if FileName = "" then
nFileName := nil;
Result := SHChangeIconDialog(hOwner, nFileName, 0, IconIndex);
CoTaskMemFree(nFileName);
end;
Доработанная функция
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Вызывает диалог выбора иконки. Доработанная
Функция вызова диалогового окно "Изменение иконки"
Зависимости: Windows, SysUtils
Автор: Alex Sal"nikov, alex-co@narod.ru, Москва
Copyright: Доработка библиотеки JVCL
Дата: 15 июля 2003 г.
***************************************************** }uses
Windows, SysUtils;
function ChangeIconDialog(hOwner: tHandle; var FileName: string; var IconIndex:
Integer): Boolean;
// Функция вызова диалогового окно "Изменение иконки"implementation
resourcestring
SNotSupported = "This function is not supported by your version of Windows";
function ChangeIconDialog(hOwner: tHandle; var FileName: string; var IconIndex:
Integer): Boolean;
type
SHChangeIconProc = function(Wnd: HWND; szFileName: PChar; Reserved: Integer;
var lpIconIndex: Integer): DWORD; stdcall;
SHChangeIconProcW = function(Wnd: HWND; szFileName: PWideChar;
Reserved: Integer; var lpIconIndex: Integer): DWORD; stdcall;
const
Shell32 = "shell32.dll";
var
ShellHandle: THandle;
SHChangeIcon: SHChangeIconProc;
SHChangeIconW: SHChangeIconProcW;
Buf: array[0..MAX_PATH] of Char;
BufW: array[0..MAX_PATH] of WideChar;
begin
Result := False;
SHChangeIcon := nil;
SHChangeIconW := nil;
ShellHandle := Windows.LoadLibrary(PChar(Shell32));
tryif ShellHandle <> 0 thenbeginif Win32Platform = VER_PLATFORM_WIN32_NT then
SHChangeIconW := GetProcAddress(ShellHandle, PChar(62))
else
SHChangeIcon := GetProcAddress(ShellHandle, PChar(62));
end;
if Assigned(SHChangeIconW) thenbegin
StringToWideChar(FileName, BufW, SizeOf(BufW));
Result := SHChangeIconW(hOwner, BufW, SizeOf(BufW), IconIndex) = 1;
if Result then
FileName := BufW;
endelseif Assigned(SHChangeIcon) thenbegin
StrPCopy(Buf, FileName);
Result := SHChangeIcon(hOwner, Buf, SizeOf(Buf), IconIndex) = 1;
if Result then
FileName := Buf;
endelseraise Exception.Create(SNotSupported);
finallyif ShellHandle <> 0 then
FreeLibrary(ShellHandle);
end;
end;
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Вызывает диалог выбора иконки", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!