Главная страница
    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.007 c
1-77420
CrazyHacKeRs
2002-06-10 23:56
2002.06.24
Ассоциативные массивы


4-77682
HES
2002-04-26 13:35
2002.06.24
Как запретить свёртывание окна?


1-77464
kaif
2002-06-10 23:00
2002.06.24
Message


3-77294
oss
2002-05-29 11:31
2002.06.24
Invalid Field value


1-77434
OlDemon
2002-06-11 12:22
2002.06.24
Работа с Excel





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