whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

35 Visitors Online


 
...change the desktop wallpaper?
Autor: Simon Grossenbacher
Homepage: http://www.swissdelphicenter.ch
[ Print tip ]  

Tip Rating (30):  
     


// 1.Way:

uses
  
Registry;

procedure SetWallpaper(sWallPaperBMPPath: string; bTile: Boolean);
var
  
reg: TRegIniFile;
begin
  
reg := TRegIniFile.Create('Control Panel\Desktop');
  try
    with 
reg do
    begin
      
WriteString('', 'Wallpaper', sWallPaperBMPPath);
      WriteString('', 'TileWallpaper', IntToStr(Ord(bTile)));
    end;
  finally
    
reg.Free;
  end;
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end;

// 2. Way:

procedure TForm1.Button1Click(Sender: TObject);
var
  
sWallPaperBMPPath: string;
begin
  
sWallPaperBMPPath := 'C:\[WinDIR]\wall.bmp';
  if not SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(sWallPaperBMPPath),
    SPIF_SENDWININICHANGE) then
    
ShowMessage('Succesful.')
  else
    
ShowMessage('Failed!');
end;


// 3. Set the wallpaper for the Active Desktop.
{
  You may have noticed that using SystemParametersInfo to change the wallpaper
  when ActiveDesktop is turned on doesn't work. The reason is because you need
  to use the IActiveDesktop COM interface. Using SystemParametersInfo still works,
  but it doesn't update the wallpaper.
  Requires Internet Explorer 4.0 or later).
}



uses
  
ShlObj, ComObj;


function ChangeWallpaper(aFile: String): Boolean;
const
  
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
  
hObj: IUnknown;
  ADesktop: IActiveDesktop;
  str: string;
  wstr: PWideChar;
begin
  
hObj     := CreateComObject(CLSID_ActiveDesktop);
  ADesktop := hObj as IActiveDesktop;
  wstr := AllocMem(MAX_PATH);
  try
    
StringToWideChar(aFile, wstr, MAX_PATH);
    ADesktop.SetWallpaper(wstr, 0);
    ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  finally
    
FreeMem(wstr);
  end;
end;

 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners