Форум: "WinAPI";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизКто-нибудь знает такую функцию SHChangeIconDialog Найти похожие ветки
← →
alexnmsk (2003-01-21 10:23) [0]Кто-нибудь знает такую функцию SHChangeIconDialog - диалог вабора иконки? Вызывается по индексу 62. Вот ее описание для VB:
Private Declare Function SHChangeIconDialog Lib "shell32" Alias "#62" (ByVal hOwner As Long, _
ByVal sFilename As String, ByVal nBuf As Long, nIconIndex As Long) As Long
Вызывает диалог выбора иконки (как при смене значка на десктопе)
Параметры
hOwner - хэндл родителя.
sFileName - полный путь файла с иконками (должен существовать). Если в указанном файле нет иконок, вызываются иконки Shell32.dll. sFileName должен быть максимальной длинны, например, так
sFileName = sFileName & String$(260 - Len(sFileName), 0)
nBuf - буфер для имени файла, если имя максимальной длины, то можно передавать 0, если нет - максимальный размер
nIconIndex - до выполнения - 0, после выполнения функции возвращает номер иконки в файле. Далее эту иконку можно вытащить с помощью вполне документированной функции ExtractIconEx из той же библиотеки.
Как правильно вызвать ее из Delphi?
← →
Набережных С. (2003-01-21 18:46) [1]function SHChangeIconDialog(hOwner: THandle; szFilename: PWideChar; Reserved: Integer; var lpIconIndex:integer): bool; stdcall; external "shell32.dll" index 62;
var
n: integer;
n:=1;
if SHChangeIconDialog(Handle,"C:\WINNT\system32\SHELL32.DLL",0,n) then ...
← →
Набережных С. (2003-01-21 20:57) [2]Это, разумеется, было неправильно. Убей меня Бог, если я знаю, почему я это написал
var
IconIndex:integer;
str:WideString;
begin
IconIndex:=0;
SetLength(str,MAX_PATH);
StringToWideChar("C:\WINNT\system32\SHELL32.DLL",@str[1],MAX_PATH);
if SHChangeIconDialog(handle, @str[1], MAX_PATH, IconIndex) then
begin
ShowMessage(PWideChar(str));
ShowMessage(IntToStr(IconIndex));
end;
end;
← →
Tux (2003-01-21 22:18) [3]Обожаю делфи за ее кривую работу с Юникодом...
Не правда ли так короче :)) ? Самое удивительное, что преобразование работает. Для const-строк. Если out-параметр, не прокатит.
if SHChangeIconDialog(handle, PWideChar(WideString("C:\WINNT\system32\SHELL32.DLL")), MAX_PATH, IconIndex)
← →
Набережных С. (2003-01-21 22:32) [4]Tux (21.01.03 22:18)
Да то-то и оно, что нужен var, а то бы и мой бред проехал:)
← →
alexnmsk (2003-01-23 09:39) [5]Кстати о самой функции. Начиная с 5-й версии shell32.dll она называется PickIconDlg. Хотя у меня windows xp и верся shell32 6.00.2600 - она не работает, а на 6.00.2800 говорят уже работает.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/reference/functions/PickIconDlg.asp
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c