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

Вниз

Проблема с функцией StringToWideChar   Найти похожие ветки 

 
ЛенаК   (2002-05-21 09:56) [0]

Есть следующий код:
var
AD: IActiveDesktop;
name : PWideChar;
MasFile : array of string;

// пытаюсь поменять обои на рабочем столе, взяв файл с рисунком для этого из массива

setlength(Masfile,1);
MasFile[0]:="ris.bmp";
name:=StringToWideChar(MasFile[0],name,1);

AD:=CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
AD.SetWallpaper(name,0);
AD.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
Никаких сообщений не выдаётся, но AD.SetWallpaper(name,0); не срабатывает. Если написать так: AD.SetWallpaper("ris.bmp",0); то всё работает. Я подозреваю, что неправильно указываю какие-то параметры в StringToWideChar и она возвращает неправильное имя.
Как это побороть? Спасибо.
Почему то не работает добавление в основной форум


 
ЛенаК   (2002-05-21 09:59) [1]

Конечно же поправка
MasFile[0]:="ris.bmp";
StringToWideChar(MasFile[0],name,1);




 
Внук ©   (2002-05-21 13:42) [2]

Третьим параметром передается длина результирующей строки - длина исходной плюс один символ для завершающего нуля.
StringToWideChar(MasFile[0],name,Length(MasFile[0])+1);


 
ЛенаК   (2002-05-21 14:01) [3]

Теперь получается access violation после окончания работы :(
var
AD: IActiveDesktop;
dir,tip,ris : string;
n : PWideChar;
GotOne,nomf : integer;
MasFile : array of string;
SearchRec : TSearchRec;

begin
dir:=getcurrentdir;
GotOne:=FindFirst(dir+"\*.*",faAnyFile,SearchRec);
while GotOne=0 do begin
tip:=copy(SearchRec.Name,length(SearchRec.Name)-2,3);
if (tip="bmp") or (tip="jpg") or (tip="gif") then
begin
setlength(MasFile,length(MasFile)+1);
MasFile[length(MasFile)-1]:=SearchRec.Name;
end;
GotOne:=FindNext(SearchRec);
end;

nomf:=0;
new(n);
Randomize;
Random(length(MasFile));
ris:=dir+"\"+MasFile[nomf];
stringtowidechar(ris,n,length(ris)+1);
AD:=CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
AD.SetWallpaper(n,0);
AD.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);

dispose(n);
end;


 
ЛенаК   (2002-05-21 14:19) [4]

Почему-то если length(ris)<21, то всё получается, а если больше, то AV. Может, здесь какие-то ограничения есть и как их тогда обойти?


 
ЛенаК   (2002-05-21 14:43) [5]

Заменила эту функцию на StringToOleStr и всё получилось!
Спасибо,Внук!


 
Внук ©   (2002-05-21 14:50) [6]

Елки-палки, а почему PWideChar, а не PWideString?


 
Внук ©   (2002-05-21 15:08) [7]

Спасибо-то спасибо, только все равно StringToOleStr будет глючить (плавающая ошибка). PWideChar-указатель на WideChar (один-единственный широкий символ), и только. Надо либо объявлять массив WideChar-ов, либо использовать WideString.



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
14-77608
MisterBin
2002-05-16 21:24
2002.06.24
Кто какую музыку слушает когда пишет программу?


7-77622
Ff
2002-03-27 09:10
2002.06.24
Как программно отформатировать логический диск?


14-77586
Zodiac
2002-05-19 22:53
2002.06.24
Снова про диски.....


7-77634
Hammer
2002-03-28 17:04
2002.06.24
трэй?


1-77468
yakshe
2002-06-12 02:50
2002.06.24
Тупой вопросик про ListView..