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

Вниз

Кто-нибудь знает такую функцию 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.016 c
7-39587
S.P.I.R.I.T
2003-01-16 07:45
2003.03.13
Как поменять частоту обновления монитора


1-39386
Дмитрий К.К.
2003-03-02 18:38
2003.03.13
Randomize


9-39147
DrDmitrij
2002-10-15 12:26
2003.03.13
Логика игры Арканоид


1-39263
Basilio
2003-03-03 17:20
2003.03.13
BorderIcons


1-39257
_igorok
2003-03-03 16:15
2003.03.13
TStringGrid