Главная страница
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.012 c
14-77606
copyr25
2002-05-18 21:28
2002.06.24
---|Ветка была без названия|---


14-77548
cok
2002-04-28 13:59
2002.06.24
Оверклокинг


14-77568
vajo
2002-05-21 09:14
2002.06.24
Метеориты с Марса


14-77571
phantom2040
2002-05-21 11:05
2002.06.24
Загрузка в Memo текстового файла


6-77521
Orvat
2002-04-15 10:29
2002.06.24
Свободен ли порт