Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > .jpg Как фон рабочего стола


Автор: Volkogriz 11.12.2008, 00:59
Доброе время суток!!!
Почему jpg неустонавливаються как фон что сделать чтобы картинки jpg установились как фон рабочего стола!!!
Веть точичьные bmp Весят много!?
Код:

Код

procedure SetWallpaper(sWallpaperBMPPath: string; bTile: boolean);
var

  reg: TRegIniFile;
begin
  reg := TRegIniFile.Create('Control Panel\Desktop');
  with reg do
  begin
    WriteString('', 'Wallpaper',
      sWallpaperBMPPath);
    if (bTile) then
    begin
      WriteString('', 'TileWallpaper', '1');
    end
    else
    begin
      WriteString('', 'TileWallpaper', '0');
    end;
  end;
  reg.Free;
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil,SPIF_SENDWININICHANGE);
end;



procedure TForm3.FormCreate(Sender: TObject);
begin
ComboBox1.Items.LoadFromFile(extractfilepath(Application.ExeName)+'Data\xxx.log');
ComboBox2.Enabled:=false;
JvTransparentButton21.Enabled:=false;
end;

procedure TForm3.JvTransparentButton21Click(Sender: TObject);
begin
SetWallpaper(extractfilepath(Application.ExeName)+ 'Data\xxx\'+ComboBox2.Text+'.bmp', False);
JvTransparentButton21.Enabled:=false;
end;

procedure TForm3.ComboBox2Change(Sender: TObject);
begin
Image2.Picture.LoadFromFile(extractfilepath(Application.ExeName)+ 'Data\xxx\'+ComboBox2.Text+'.bmp');
JvTransparentButton21.Enabled:=true;
end;

procedure TForm3.JvTransparentButton22Click(Sender: TObject);
begin
ComboBox2.Enabled:=false;
JvTransparentButton21.Enabled:=false;
Form3.Close;
Form1.show;
end;

procedure TForm3.ComboBox1Change(Sender: TObject);
begin
ComboBox2.Items.LoadFromFile(extractfilepath(Application.ExeName)+'Data\'+ ComboBox1.Text+'.log');
ComboBox2.Enabled:=true;
end;

end.

Зарание Блогодарен!
С уважением волкогриз!!!


M
Alexeis
Модератор: используйте подсветку кода

Автор: Данкинг 11.12.2008, 01:20
Цитата(Volkogriz @  11.12.2008,  00:59 Найти цитируемый пост)
Почему jpg неустонавливаються как фон что сделать чтобы картинки jpg установились как фон рабочего стола!!!
Веть точичьные bmp Весят много!?

За эти фразы пять баллов. smile А ответ, думаю, лучше спросить у Билла Гейтса. Почему он не сделал поддержки .jpg в качестве обоев?
Да, а код ты к чему привёл? smile 

Автор: Volkogriz 11.12.2008, 01:31
Мож кто чё паправит!!! smile

Добавлено через 5 минут и 57 секунд
Мож есть какой то вариант!
Чтото может можно придумать а? smile 

Автор: Данкинг 11.12.2008, 01:39
Цитата(Volkogriz @  11.12.2008,  01:31 Найти цитируемый пост)
Чтото может можно придумать а?

Конвертнуть JPG->BMP, а затем уже ставить. smile 

Автор: Volkogriz 11.12.2008, 01:43
А о-как! smile 
 smile  smile  
Плииизик!!! 

Автор: Данкинг 11.12.2008, 01:45
Цитата(Volkogriz @ 11.12.2008,  01:43)
А о-как! smile 
 smile  smile  
Плииизик!!!

Пример из DelphiWorld:
Код

uses 
  JPEG; 

procedure JPEGtoBMP(const FileName: TFileName); 
var 
  jpeg: TJPEGImage; 
  bmp:  TBitmap; 
begin 
  jpeg := TJPEGImage.Create; 
  try 
    jpeg.CompressionQuality := 100; {Default Value} 
    jpeg.LoadFromFile(FileName); 
    bmp := TBitmap.Create; 
    try 
      bmp.Assign(jpeg); 
      bmp.SaveTofile(ChangeFileExt(FileName, '.bmp')); 
    finally 
      bmp.Free 
    end; 
  finally 
    jpeg.Free 
  end; 
end; 

Ну а вообще-то:
1) Это можно было и самому на форуме найти,
2) Одна тема - один вопрос! smile  smile  smile 

Автор: Volkogriz 11.12.2008, 02:19
 smile огромное спасиба!!! smile  smile  smile 

   

Автор: Rrader 11.12.2008, 15:26
Поддерживает: jpg, png, gif, bmp и другие smile 
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function SetDesktopWallpaper(const Path: WideString): HRESULT;
var
  Dsk: IActiveDesktop;
begin 
  Dsk := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;  
  Result := Dsk.SetWallpaper(StringToOleStr(Path), 0);
  if Succeeded(Result) then
    Result := Dsk.ApplyChanges(AD_APPLY_ALL);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    SetDesktopWallpaper(OpenDialog1.FileName);
end;

end.


Автор: Alexeis 11.12.2008, 15:40
Цитата(Rrader @  11.12.2008,  14:26 Найти цитируемый пост)
Поддерживает: jpg, png, gif, bmp и другие 

  Не совсем так, поддерживает компонент ActiveDesktop, который производит конвертацию на лету, с последующим сохранением картинки в виде *.bmp. В данном случае без разницы кто будет конвертить, результат один, в реестре будет путь к битмапке.

Автор: Rrader 11.12.2008, 15:54
Ну это понятно, просто по мне лучше конвертацию на Windows переложить.

Автор: bems 11.12.2008, 15:56
Цитата(Alexeis @  11.12.2008,  15:40 Найти цитируемый пост)
с последующим сохранением картинки в виде *.bmp
Хм... а это точно? 
Спрашиваю потому что в какой-то из старых винд натыкался на обработку жипега активдестопом через создание хэтэмэлэ страницы с жипегом на фоне. А дальше наверное работа происходила как с вебстраницей, поставленой на десктоп юзером. Это изменили? Хотя в любом случае код Rrader работает независимо от этих деталей, а значит так правильнее.

Автор: Alexeis 11.12.2008, 16:00
Цитата(bems @  11.12.2008,  14:56 Найти цитируемый пост)
Хм... а это точно? 

  Что мешает проверить?

Автор: bems 11.12.2008, 16:06
да что-то не нахожу битмапного варианта

Автор: Rrader 11.12.2008, 16:18
bems, действительно, существуют два типа обоев: BMP и HTML. Может из-за этого не находится? smile 

А еще HKCU\Control Panel\Desktop\Wallpaper посмотрите.

Автор: bems 11.12.2008, 16:39
Rrader, да там ссылки на оригинал и битмапный вариант, а html нету никакого. Наверное это закончилось в реализации ActiveDesktopа в 9х 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)