Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-39360
Злодей
2003-03-02 11:03
2003.03.13
Поиск


7-39607
#Deus
2003-01-18 20:15
2003.03.13
Раскладка клавиатуры


1-39412
GROL
2003-03-02 12:41
2003.03.13
Как восстановить текст компонент?


3-39149
Оксана
2003-02-19 10:13
2003.03.13
Ошибки BDE Engine


3-39164
Наташа
2003-02-20 14:28
2003.03.13
Компиляция





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский