Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 11:37   #1
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
Восклицание Рабочий стол

Всем привет.Возникла проблема по установки картинки на рабочий стол.Юзаю следуещию функцию
Код:
procedure setwallpaper(fname:string);

var

reg : treginifile;

begin

reg := treginifile.create('control panel\desktop' );

with reg do
 begin

writestring( '', 'wallpaper',fname );

writestring('', 'tilewallpaper', '0' );

end;

reg.free;

systemparametersinfo(spi_setdeskwallpaper, 0, nil,spif_sendwininichange );

end;
ну собственно так ставлю
Код:
    setwallpaper('sources\001020-2545724-527886-7875901-527848\2.jpg');
проблема в том,что в семерке ставится все нормально,а в пожившей xp'шке не ставится(на чистую систему ставится нормально).
P.S проверял на двух других поживших хрюшках-та же проблема.
А FSViewer ставит нормально и система тоже ставит нормально
Подскажите как исправить

Последний раз редактировалось ZvEr_HaCkEr; 20.10.2010 в 11:44.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 20.10.2010, 13:03   #2
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

У себя на хрюшке так в проге сделал
Код:
const
 Desktop: TGuid='{75048700-EF1F-11D0-9888-006097DEACF9}'; //для получения доступа к рабочему столу
var
 ActiveDeskTop:IActiveDesktop; // вроде понятно, зачем

begin
 ActiveDesktop:=CreateComObject(Desktop) as IActiveDesktop; //создаем объект и получаем разрешение доступа к рабочему столу
 ActiveDesktop.SetWallpaper(StringToOleStr(FileListBox1.Filename), 0); // определились с выбором картинки
 WallpaperOptions.dwSize := SizeOf(WallpaperOptions);
 // WallpaperOptions.dwStyle := WPSTYLE_TILE; // или WPSTYLE_CENTER, или WPSTYLE_STRETCH
  OleCheck(ActiveDesktop.SetWallpaperOptions(WallpaperOptions, 0));
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL); // применяем картинку на рабочем столе
end;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 20.10.2010, 14:35   #3
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

а в uses что добавить?
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 20.10.2010, 14:49   #4
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

У меня стоит, а ты выбирай что нужно
Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtDlgs, jpeg, ExtCtrls, FileCtrl, Buttons,
  shlobj, comobj;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 20.10.2010, 15:51   #5
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

ругается на эту строку
Код:
WallpaperOptions.dwSize := SizeOf(WallpaperOptions);
что делать?
Спасибо большое.Вроде разобрался
Цитата:
WallpaperOptions:_tagWallpaperOPT;
должен быть.Или нет???

Последний раз редактировалось ZvEr_HaCkEr; 20.10.2010 в 16:31.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 20.10.2010, 19:48   #6
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ComObj, ShlObj;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function StringToPWide(sStr: string): PWideChar;
var
  pw: PWideChar;
  iSize,iNewSize: integer;
begin
  iSize := Length(sStr) + 1;
  iNewSize := iSize * 2;

  pw := AllocMem(iNewSize);

  MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);

  Result := pw;
end;

  procedure ChangeActiveWallpaper(putwallpaper:pwidechar);
const
  CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
  ActiveDesktop: IActiveDesktop;
begin
  ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
    as IActiveDesktop;
  ActiveDesktop.SetWallpaper(putwallpaper, 0);
  ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
end.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 21.10.2010, 07:13   #7
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Цитата:
Сообщение от ZvEr_HaCkEr Посмотреть сообщение
ругается на эту строку
Код:
WallpaperOptions.dwSize := SizeOf(WallpaperOptions);
что делать?
Спасибо большое.Вроде разобрался
должен быть.Или нет???
да извини, в var напиши
Код:
WallpaperOptions: TWallPaperOpt;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рабочий стол sf911 Операционные системы общие вопросы 3 09.08.2009 12:38
Рабочий стол maladoy Свободное общение 0 01.02.2009 13:07
Заставка на рабочий стол Vladya Помощь студентам 1 11.11.2008 11:19
Рабочий стол masterdela Win Api 3 31.01.2008 19:03
Рабочий стол, рисование D-mon Win Api 7 22.11.2007 18:54