Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi JPG als Desktop-Wallpaper? (https://www.delphipraxis.net/26000-jpg-als-desktop-wallpaper.html)

Dannyboy 16. Jul 2004 10:05


JPG als Desktop-Wallpaper?
 
Hey yo fellaz,
ich weiss, wir hatten dieses Thema schon 100000000 Mal. Ich würde gern den Desktop-Hintergrund
programmtechnisch ändern, wobei die Methode auch JPGs annehmen können soll. SystemParametersinfo
funktioniert nur mit BMPs. Ich könnte natürlich jedes JPG im Programm zu einem Bitmap konvertieren
und dann die Methode aufrufen, aber gibt es nicht einen praktischeren Weg :gruebel:

Thanx a lot, boyz.

DANNYOBOY

sakura 16. Jul 2004 10:08

Re: JPG als Desktop-Wallpaper?
 
Das hängt von der Windows-Version ab. Imho können nur XP und 2003 JPGs als einfache Hintergrundbilder anzeigen, auf älteren Systemen muss der grausame Active Desktop dafür aktiviert werden :?

...:cat:...

Alexander 16. Jul 2004 10:10

Re: JPG als Desktop-Wallpaper?
 
Ich meine das funktioniert so:
Delphi-Quellcode:
function ChangeWallpaper_AD(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;
Nur bin ich mir gerade nicht sicher, ob das JPEG's unterstützt, glaube aber schon.

Dannyboy 16. Jul 2004 10:15

Re: JPG als Desktop-Wallpaper?
 
Yo,
ich habe XP Prof drauf.
@Alexander:
Geht das nicht ohne ActiveDesktop :gruebel:

gothic_mike 16. Jul 2004 10:28

Re: JPG als Desktop-Wallpaper?
 
Zitat:

Zitat von Dannyboy
Yo,
ich habe XP Prof drauf.
@Alexander:
Geht das nicht ohne ActiveDesktop :gruebel:

Also, die meisten Tools (IrfanView, ACDView...), die das Hintergrundbild änder, konvertieren die JPG's, PNG's etc. erst in ein Bitmap, meist im Windows-Ordner, befor sie es alls Wallpaper setzen...
Wird imho kein Weg dran vorbei führen.

Zwecks Konvertierung von Bildern kannst dir ja mal die ImageFileLib von dieser Seite angucken: http://logicnet.dk/lib ...

Alexander 16. Jul 2004 10:47

Re: JPG als Desktop-Wallpaper?
 
Ich weiß jetzt nicht in wie fern, das mit JPEG's klappt, aber ich meine nicht:
Delphi-Quellcode:
function ChangeWallpaper(aFile: String): Boolean;
begin
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(afile),
    SPIF_SENDWININICHANGE);
end;
Aber was hast du gegen den Active Desktop, ich habe ihn bei XP einfach angelassen... Sonst muss du wirklich das Bild als platzverschwendenes BMP konvertieren...

Thorben86 16. Jul 2004 10:52

Re: JPG als Desktop-Wallpaper?
 
Der Active Desctop schmiert aber ab und zu ab, das is ziemlich beschissen.

Alexander 16. Jul 2004 10:58

Re: JPG als Desktop-Wallpaper?
 
Ist mir noch nicht passiert ;-)

supermuckl 16. Jul 2004 11:00

Re: JPG als Desktop-Wallpaper?
 
mir isser auch schon abgekackt ^^

sakura 16. Jul 2004 11:07

Re: JPG als Desktop-Wallpaper?
 
@supermuckl:
:warn:
Überdenke bitte Deine Wortwahl. In letzter Zeit widerspricht diese immer öfters den Regeln des angenehmen Umgangs mit- und untereinander.

...:cat:...

Robert_G 16. Jul 2004 11:08

Re: JPG als Desktop-Wallpaper?
 
Zitat:

Zitat von Alexander
...Sonst muss du wirklich das Bild als platzverschwendenes BMP konvertieren...

Rate mal wieviel RAM ein geladenes JPEG verbraucht? -> Genau soviel wie ein BitMap. (Ist ja beides ein Bildchen mit X*Y Pixeln in Z Bit Farbtiefe ;) )
Ich gehe auch den Weg über BMP, da ich zu Hause noch Win2k habe (wenn ich mich von zu Hause in der Firma anmelde würde ja sonst der Active Desktop aktiviert werden ;) )

Alexander 16. Jul 2004 11:53

Re: JPG als Desktop-Wallpaper?
 
Ja, das ist schon klar, ich meinte jetzt auch eher auf der Festplatte...
Aber das ist ja bei den heutigen Festplatte nicht mehr so das Problem...

S2B 16. Jul 2004 13:40

Re: JPG als Desktop-Wallpaper?
 
Also, in meinem Windows XP werden die Hintergrundbilder von JPEG in Bitmap konvertiert und im Ordner X:\Dokumente und Einstellungen\User\Lokale Einstellungen\Anwendungsdateien\Microsoft gespeichert! :zwinker:

Dannyboy 26. Jul 2004 12:21

Re: JPG als Desktop-Wallpaper?
 
Also Fellaz,
ich habe nun die in Delphi involvierte JPEG-Klasse verwendet und habe
die JPEG-Datei geladen und speichere sie dann als Bitmap ab, um diese
dann mittels Funktion SystemParametersInfo als Wallpaper
anzunehmen. Das Wallpaper wird anstandslos übernommen und die Funktion liefert den Wert <true> zurück.

Sobald man den Desktop aktualisiert, wird das Wallpaper scheinbar vom Desktop gelöscht und der Desktop wird schwarz. Bei einem evtl. Neustart ist das Wallpaper ebenfalls nicht mehr vorhanden. Hilfe. :wall: :wall:
Was nun??? :gruebel:

gothic_mike 27. Jul 2004 11:00

Re: JPG als Desktop-Wallpaper?
 
Zitat:

Zitat von Dannyboy
Also Fellaz,
ich habe nun die in Delphi involvierte JPEG-Klasse verwendet und habe
die JPEG-Datei geladen und speichere sie dann als Bitmap ab, um diese
dann mittels Funktion SystemParametersInfo als Wallpaper
anzunehmen. Das Wallpaper wird anstandslos übernommen und die Funktion liefert den Wert <true> zurück.

Sobald man den Desktop aktualisiert, wird das Wallpaper scheinbar vom Desktop gelöscht und der Desktop wird schwarz. Bei einem evtl. Neustart ist das Wallpaper ebenfalls nicht mehr vorhanden. Hilfe. :wall: :wall:
Was nun??? :gruebel:


probiers mal damit:

Code:
Function SetWallpaper(FileName: String; Style: Integer): Boolean;
Var
  reg: TRegistry;
  wp: Array[0..$FF] Of Char;
Begin
  reg := TRegistry.Create;
  Try
    reg.RootKey := HKEY_CURRENT_USER;
    If reg.OpenKey('\Control Panel\desktop\', True) Then
    Begin
      If (Style = 1) Then
        reg.WriteString('TileWallpaper', '1')
      Else
        reg.WriteString('TileWallpaper', '0');

      reg.WriteString('WallpaperStyle', IntToStr(Style));
    End;
  Finally
    reg.Free;
  End;

  StrPCopy(wp, FileName);
  Result := SystemParametersInfo(spi_SetDeskWallpaper, 0, @wp, spif_UpdateIniFile);
End;
FileName:
Path und Dateiname des Wallpapers im BMP-Format

Style:
0 - Zentriert
1 - Nebeneinander
2 - Gestreckt


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz