Форум: "Потрепаться";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизПроблема с функцией 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c