Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

Диалог смены иконки   Найти похожие ветки 

 
Эстонец   (2003-06-09 18:37) [0]

Нижеприведённый код работает в Win 98 но не работает в Win XP. При вызове функции SHChangeIcon под XP. Вылетает ошибка "File not found." Кроме того не возвращаеться имя выбранного в диалоге файла. Может я что напутал?


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

function SHChangeIcon(Wnd : HWND;
szFileName : PChar;
Reserved : Integer;
Var lpIconIndex : Integer
): DWORD; stdcall;


implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Var Temp: PChar;
Num : Integer;
begin
Temp := StrAlloc(256);
SHChangeIcon(Handle, Temp, 0, Num);
Edit1.Text := Temp + "," + IntToStr(Num);
end;

Function SHChangeIcon; External "shell32.dll" Index 62;

end.


 
clickmaker   (2003-06-09 18:41) [1]

А откуда взято описание ф-ии? Может в ХР там что-то поменялось в параметрах


 
Эстонец   (2003-06-09 23:58) [2]

Описание функции взято из кода компонента который я скачал с torry.net. Правда этот компонент не работал :(


 
Babay   (2003-06-10 08:03) [3]

у меня в модуле описано так (давно нашел где точно не помню)
и все работает под ХР под 98 правда не проверял, не пишу под 98.

Function ChangeIconDialog (hOwner:LongInt;Filename: String;Var IconIndex:LongInt):LongInt;
{Вызывает диалог выбора иконки (как при смене значка на десктопе)
Параметры
hOwner - хэндл владельца
FileName - полный путь к файлу с иконками (должен существовать)
если в указанном файле нет иконок, вызывается файл Shell32.dll.
IconIndex возвращает номер иконки в файле
результат работы функции 1 если нажата кнопка выбора и 0 если отмена
Далее иконку можно вытащить с помощью xtractIconEx.
}
implementation
// подключаемые из DLL

Function 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;

в проге

procedure TForm1.BitBtn1Click(Sender: TObject);
Var i:Integer;
begin
ChangeIconDialog(handle,"Shell32.dll",i);
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.031 c
1-84191
mod
2003-06-11 17:41
2003.06.26
Безразмерные массивы в Pascale


14-84625
Ghost_
2003-06-04 09:50
2003.06.26
Грабер ресурсов


1-84422
IL
2003-06-09 16:22
2003.06.26
Вызов процедуры


7-84801
chernoruk
2003-04-18 19:45
2003.06.26
Запуск приложения


3-84012
softmaster
2003-05-30 17:25
2003.06.26
Трабл с LOOKUP полем.





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