Entwickler-Ecke
Multimedia / Grafik - Desktophintergrund mit Delphi ändern
strahlemann - Do 23.11.06 17:41
Titel: Desktophintergrund mit Delphi ändern
Hello,
ich würd gern mit einem Programm den Bildschirmhintergrund ändern. Einfach den Pfad eines Bildes eintippen, mit Openpicturedialog aussuchen, sonstwas --> Knöpchen drücken -->Bildschirmhintergrund geändert. Bloß wie. Wie geht das??? Wo steht drinnen, welches Bild grad Desktophintergrund spielen darf?? Wäre für Hilfe dankbar
Ach ja und bevor da jetzt die Fragen kommen, warum ich das will, und warum ich nicht einfach Rechtsklick auf den Desktop-->Desktop-->Hintergrund ändern tu, dann kann ich sagen, mein ziel ist es, ein Programm zu haben, welches, den Hintergrund auf Wahl Wöchentlich, täglich oder bei jedem booten automatisch ändert.
Danke
jasocul - Do 23.11.06 18:00
Du musst einen Eintrag in der Registry ändern:
HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper
Aber bitte nochmal prüfen. Ich bin mir nicht 100%ig sicher.
Manina - Do 23.11.06 18:36
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var s : String; a : Array[0..1024] of Char;
...
if OpenDlg.Execute then begin s := OpenDlg.FileName; if FileExists(s) then begin StrPCopy(a, s); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @a, SPIF_UPDATEINIFILE); end; end; |
strahlemann - So 10.12.06 15:52
Gates nicht!
Ich habs erst jetzt ausprobiert, de facto wird der Hintergrundbildschirm blau. Weil Blau die meinige Hintergrundfarbe ist. Aber sonst tut sich dar gar nix.
Im Endeffekt will ich eigentlich ein Programm, dass unter anderem beim Hochfahren das Hintergrundbild auf die aktuelle Woche abstimmt. Das hab ich, was rauskommt steht oben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormCreate(Sender: TObject); var a : Array[0..1024] of Char; begin if FileExists('D:\Eigene Bilder\Wallpapers\'+inttostr(WeekOftheYear(Now))+'.jpg') then begin StrPCopy(a, 'D:\Eigene Bilder\Wallpapers\'+inttostr(WeekOftheYear(Now))+'.jpg'); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @a, SPIF_UPDATEINIFILE); end; end; |
Ich hab auch schon bei anderen Seiten geschaut, beispielsweise bei
www.ensacom.de [
http://www.ensacom.de/index.php?s=sd&tid=530&kid=8&ab=su&str_query=hintergrundbild] aber da war genau das selbe Problem.
strahlemann - So 10.12.06 18:09
Gates doch!
Aber nur mit bmp und nicht mit jpg
F34r0fTh3D4rk - Fr 20.11.09 20:46
Ich bin gerade auf das selbe Problem gestoßen. Wie kann ich jegliches von Windows unterstütztes Bild-Format als Hintergrundbild zulassen?
(So als würde man im Kontext-Menü "Als Hintergrundbild verwenden" klicken)
Momentan benutze ich:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure SetWallpaperSystem(sWallpaper : String; bTile, bStrech: Boolean); const aTile: Array[Boolean] of Byte =(0, 1); aStrech: Array[Boolean] of Byte =(0, 2); begin with TRegIniFile.Create('Control Panel\Desktop') do try WriteString('', 'Wallpaper', sWallpaper); WriteInteger('', 'TileWallpaper', aTile[bTile]); WriteInteger('', 'WallpaperStyle', aStrech[bStrech]); finally Free end;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE); end; |
und das scheint nicht so recht zu funktionieren. Ich hab noch einen weiteren Code ausprobiert. Dieser ging allerdings überhaupt nicht.
Manfred - Fr 04.12.09 09:33
Hi,
das als Hintergrund unterstützte Bildformat lautet BMP. Sonst nichts.
Das man jpg auswählen kann liegt daran, das Windows das Bild erst konvertiert.
Erkennbar ist dies auch in der Registry im Folder
HKEY_CURRENT_USER/Control Panel/Desktop
Siehe:
- ConvertedWallpaper
- ConvertedWallpaper Last WriteTime
- OriginalWallpaper
- WallPaper
- WallpaperStyle
- TileWallpaper
Über diese Schlüssel wird vermerkt, wo das Original (sofern nicht BMP) lag (ConvertedWallpaper), wohin es konvertiert wurde (OriginalWallpaper) und wann (ConvertedWallpaper Last WriteTime).
Wurde eine BMP direkt ausgewählt, werden diese Einträge nicht berührt.
Das aktuelle Hintergrundbild (zwingend BMP) findet man im Schlüssel WallPaper.
Zudem wird festgehalten wie es dargestellt wird:
Zentriert:
- TileWallpaper = 0
- WallpaperStyle = 0
Nebeneinander:
- TileWallpaper = 1
- WallpaperStyle = 0
Gestreckt:
- TileWallpaper = 0
- WallpaperStyle = 2
Diese Infos gelten für Win XP SP3
Edit: Nachtrag
Änderungen in der Registry sind insofern unnütz, als das sich der Hintergrund erst beim nächsten Start ändern würde.
Daher besser: Finger weg.
Besser SystemParametersInfo(SPI_SETDESKWALLPAPER... verwenden
F34r0fTh3D4rk - Fr 04.12.09 19:38
Ich möchte das Hintergrundbild ohnehin nur am Start ändern. Wenn es erst beim nächsten Start passieren würde, wäre mir das also auch recht.
Man kann aber nicht irgendwie die Funktion von Windows in seinem Programm nutzen, sodass man sich nicht selber um das Konvertieren kümmern muss, oder?
FragSalat - So 06.12.09 12:35
also damit gehts in c# müsste ja das selbe in delphi sein vom syntax her
C#-Quelltext
1: 2:
| [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni); |
und dann
C#-Quelltext
1: 2: 3: 4: 5:
| OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { int change = SystemParametersInfo(20, 0, ofd.FileName, 0x1 | 0x2); } |
sprich nen openfiledialog erzeugen und öffnen wenn das ergebnis ok ist führe SystemParametersInfo aus
mit den parametern kenn ich mich nicht so genau aus aber das lässt dich bestimmt in der msdn nachlesen
und das ändert das wallpaper direkt nicht erst beim nächsten start
mfg FragSalat
Moderiert von
Narses: C#-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!