Советы по Delphi

       

Как программно заменить обои на рабочем столе? I


Решение 1

Вот что я нашел в файлах помощи Ллойда (расположены на большинстве сайтов, посвященных Delphi). Я не пробовал это, но уже имею несколько положительных откликов. Сообщите мне, как это работает у вас.

unit Unit1;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs;
type
TForm1 = class(TForm)procedure FormCreate(Sender: TObject);procedure FormPaint(Sender: TObject);private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;Bitmap: TBitmap;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Bitmap := TBitmap.Create;Bitmap.LoadFromFile('C:\WINDOWS\cars.BMP');end;

procedure TForm1.FormPaint(Sender: TObject);
var
X, Y, W, H: LongInt;begin
with
Bitmap do beginW := Width;H := Height;end;Y := 0;while Y < Height do beginX := 0;while X < Width do beginCanvas.Draw(X, Y, Bitmap);Inc(X, W);end;Inc(Y, H);end;end;

end.

Решение 1

Кто-нибудь знает как можно во время выполнения программы заменить обои рабочего стола на определенное изображение?



procedure ChangeWallpaper(bitmap: string); {имя файла с изображением: *.bmp}

var pBitmap : pchar;

begin
bitmap:=bitmap+#0;pBitmap:=@bitmap[1];SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pBitmap, SPIF_UPDATEINIFILE);end;

Можно ли сохранить сделанные изменения в INI-файле для последующих сессий?

  1. добавьте inifiles в список используемых модулей.
  2. создайте inifile в текстовом редакторе как показано ниже:

[LastUsedBitmap]
LUBitmap= c:\mybitmap.bmp

  • используйте примерно такую процедуру (исходим из предположения, что inifile подобно вышеупомянутому с именем c:\Bitmap.ini):
  • procedure WriteToIniFile(bitmap : string);

    var MyIniFile : TInifile;

    begin
    MyIniFile := Tinifile.Create( 'c:\Bitmap.ini' );MyIniFile.WriteString( 'LastUsedBitmap', 'LUBitmap', bitmap);MyIniFile.Free;end;

    procedure ReadFromIniFile(var bitmap: string);

    var MyIniFile : TInifile;

    begin
    MyIniFile := Tinifile.Create( 'c:\Bitmap.ini' );bitmap:= MyIniFile.ReadString('LastUsedBitmap', 'LUBitmap');MyIniFile.Free;end;

    [000279]


    Для этого необходимо заставить Windows перечитать файл Win.ini с новым параметром обоев рабочего стола. Это возможно с помощью функции Windows API SystemParametersInfo, примерно так:

    SystemParametersInfo(spi_SetDeskWallPaper,0,Addr(BmpFileName),spif_UpdateIniFile + spif_SendWinIniChange);

    где BmpFileName - PChar, содержащий имя файла с изображением. Обратите внимание на четвертый параметр, spif_UpdateIniFile. Он записывает изменения в Win.ini. Параметр spif_SendWinIniChange посылает всем окнам сообщение о факте изменения Win.ini. [000453]



    Содержание раздела