Форум: "WinAPI";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизString and PWideChar Найти похожие ветки
← →
Alek_1 (2006-07-20 17:04) [0]Привет, пробую сменить обоину у рабочего стола с помощью вот этой процедурки :) и немного не получается :(.
procedure ChangeActiveWallpaper(name: string);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ActiveDesktop: IActiveDesktop;
s: PWideChar;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
s:=PWideChar(StringReplace(name,"\","\\",[rfReplaceAll]));
ActiveDesktop.SetWallpaper(s, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
В чем может быть проблемкка? :)
НАсоклько я понимаю тут что-то с преобразованием со string в pWideChar
← →
tesseract © (2006-07-20 17:12) [1]Используй :
function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;
← →
Alek_1 (2006-07-20 17:22) [2]хм, а как им пользоваться? :)
первый параметр понятен, а остальные два?
← →
Alek_1 (2006-07-20 17:34) [3]написал вот такое
procedure ChangeActiveWallpaper(name: string);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ActiveDesktop: IActiveDesktop;
wideChars : array of WideChar;
s: PWideChar;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
SetLength(wideChars,Length(name));
s:=StringToWideChar(StringReplace(name,"\","\\",[rfReplaceAll]), wideChars, Length(name)+1);
ActiveDesktop.SetWallpaper(s, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
и ругается на несоответствие типов Array and WideChar
← →
tesseract © (2006-07-20 17:34) [4]Dest - переменная копировать данные,
DestSize - размер переменной.
Getmem(dest,length(name))
StringToWideChar(name, Dest,length(name)):
← →
tesseract © (2006-07-20 17:36) [5]
> Alek_1 (20.07.06 17:34) [3]
ещё бы должен быть PWideChar - туда строка пойдёт.
← →
Lamer@fools.ua © (2006-07-20 17:51) [6]
procedure ChangeActiveWallpaper(name: string);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ActiveDesktop: IActiveDesktop;
s: WideString;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
s:=WideString(StringReplace(name,"\","\\",[rfReplaceAll]));
ActiveDesktop.SetWallpaper(PWideChar(s), 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
?
← →
Alek_1 (2006-07-20 18:16) [7]2 Lamer@fools.ua: работает :) спасибо :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c