Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.009 c
8-77511
pIt
2002-02-09 03:55
2002.06.24
Bitmap ы из DLL ки или чужого EXE ка


6-77527
Doom
2002-04-14 20:25
2002.06.24
Чтение / запись файлов в локальной сети


7-77626
Просто чел
2002-03-26 01:09
2002.06.24
Как узнать программно серийный номер материнской платы


1-77355
hooky-mars
2002-06-10 20:55
2002.06.24
Пмагите найти ошибку! С removedir


4-77677
heruvim4ik
2002-04-25 20:53
2002.06.24
Полная блокировка Компа...





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