Entwickler-Ecke
Windows API - Wallpaper ändern /Zentrieren / Kacheln / Strecken
patmann2001 - Di 15.10.02 17:27
Titel: Wallpaper ändern /Zentrieren / Kacheln / Strecken
Ich verwende eine Function
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function bild_wechsel(dateiname:STRING):BOOLEAN; BEGIN if NOT SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer (dateiname), SPIF_SENDWININICHANGE) then begin Result:=false; end ELSE BEGIN Result := true; END; end; |
Damit ändere ich das Hintergrundbild. Leider wird der Name des Bildes nicht in der Liste sichtbar, die man bekommt wenn man die Eigenschaften des Desktops aufruft. Auch kann ich es leider dort nicht Kacheln oder Strecken.
Wie komme ich da ran und wie schreibe ich diese Daten in die Eigenschaften?
cu Patmann
Anonymous - Di 15.10.02 17:49
Hier einige Prozeduren die ich mal geschrieben habe:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| {Ermittelt Pfad des Hintergrundbildes und die Anzeigeart. } procedure GetWallpaperSystem(var sWallpaper: String; var bTile, bStrech: Boolean); var Reg : TRegIniFile; sTemp: String; begin Reg := TRegIniFile.Create('Control Panel\Desktop'); with Reg do begin sWallpaper := ReadString('', 'Wallpaper', ''); sTemp := ReadString('', 'TileWallpaper', '0'); if sTemp = '1' then bTile := True else bTile := False; sTemp := ReadString('', 'WallpaperStyle', '0'); if sTemp = '2' then bStrech := True else bStrech := False; end; Reg.Free; end;
{Wechselt das Hintergrundbild und Anzeigeart} procedure SetWallpaperSystem(sWallpaper: String; bTile, bStrech: Boolean); var Reg : TRegIniFile; begin Reg := TRegIniFile.Create('Control Panel\Desktop'); with Reg do begin WriteString('', 'Wallpaper', sWallpaper);
if bTile then WriteString('', 'TileWallpaper', '1') else WriteString('', 'TileWallpaper', '0'); if bStrech then WriteString('', 'WallpaperStyle', '2') else WriteString('', 'WallpaperStyle', '0'); end; Reg.Free;
//Aktualisiert das Hintergrundbild SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
Application.ProcessMessages; end; |
/EDIT
Sehe gerade, daß die die Objekte nicht durch try..finally geschützt sind. Kann hier zwar nichts passieren, aber bevor das einer bemängelt mach ich das lieber ;)
patmann2001 - Di 15.10.02 17:56
Danke 8)
Das Hilft weiter
cu Patmann
patmann2001 - Di 15.10.02 18:51
Mist geht doch nicht :?
Wenn ich ein Bild habe, das gekachelt war und dann ein Bild haben möchte, das Zentiert ist, dann geht das nicht.
Es bleibt gekachelt.
Ich habe Win2000.
Was mache ich falsch.
Ansonsten geht alles.
Kann man die Registry vieleicht neu starten oder so?
cu Patmann
Anonymous - Di 15.10.02 19:52
Die Prozeduren hab ich schon seit Monaten bei einem Programm im Gebrauch und sie funktioneren. Allerdings hab ich bis jetzt nur mit 9x getestet. Es könnte auch sein, daß du mit den Boolean's falsch umgehst:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| //Bild zentrieren SetWallpaperSystem('c:\windows\1stboot.bmp', false, false);
//Bild zentrieren und strecken SetWallpaperSystem('c:\windows\1stboot.bmp', false, true);
//Bild kachen SetWallpaperSystem('c:\windows\1stboot.bmp', true, false); |
Wäre schön wen jemand anders das unter anderen Windows Versionen testen könnte. Es kann sein, daß sich die Bedeutung der Schlüssel geänder hat.
patmann2001 - Mi 16.10.02 04:30
Hi
Ich hatte schon verstanden wie das geht, doch nachdem ich jetzt auch mal Strecken ausprobiert habe, bemerke ich, das es leider damit auch nicht geht. Das einzigste was sicher klappt ist kacheln.
Vieleicht weiss jemand anderes Rat.
cu Patmann
patmann2001 - Mi 16.10.02 04:38
Grrrr :oops:
Ich habe da was nicht richtig übernommen. :oops:
Natürlich funktioniert Deine Procedure auch unter 2000.
Alles Klar und Danke nochmal 8)
cu Patmann
Chatfix - Sa 09.11.02 22:06
also ich nutze die procedure zum wecheln auch, aber unter xp kommt dann lediglich die eingestellte hintergrundfarbe..
wenn ich nun auf eigenschaften gehe hat er das wallpaper, ich denke mal der nimmts auf aber aktualisiert den desktop irgendwie nicht..
geht auch nicht wenn ich den desktop aktualisier (F5)
Chatfix - So 10.11.02 13:27
ok funzt doch... man muss nur ein BMP und kein JPG nehmen... vllt könntest du in deinem FAQ noch mit einnehmen das man ggf jpegs in bmps umwandeln muss....
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure BMPtoJPG(FileName :String); var BMP : TBitmap; JPG : TJpegImage; begin BMP := TBitmap.Create; JPG := TJpegImage.Create; BMP.LoadFromFile(FileName); JPG.Assign(BMP.Picture.Bitmap); // Hier könnt ihr noch die Eigenschaften ändern JPG.SaveToFile(ChangeFileExt(Filename,'.jpg')); JPG.Free; BMP.Free; end;
procedure JPEGtoBMP(FileName : string); var jpeg : TJPEGImage; bmp : TBitmap; begin jpeg:= TJPEGImage.Create; try jpeg.LoadFromFile(FileName ); jpeg.CompressionQuality := 100; {Normaler Wert, kann weggelassen werden} bmp:= TBitmap.Create; try bmp.Assign(jpeg); bmp.SaveTofile(ChangeFileExt(Filename,'.bmp')); finally bmp.free end; finally jpeg.free end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!