Entwickler-Ecke
Sonstiges (Delphi) - Windows-Hintergrundbild ändern???
Killi - So 24.11.02 22:33
Titel: Windows-Hintergrundbild ändern???
DIe Überschrift sagt alles: Wie mache ich das am besten??? Windows den Pfad eines Hintergrundbildes zuweisen!?!?
bis11 - So 24.11.02 22:41
Hi,
schon mal in der Registry gesucht ? :D
Ich habe das mal für Dich erledigt :
HKEY_CURRENT_USER\Control Panel\Desktop
Einfach den Wert Wallpaper ändern.
Name : Wallpaper
Typ : REG_SZ
Wert : <<Pfad zu Deinem Hintergrundbild>>
Danach mußt Du Dich neu anmelden bei den Systemen Win200, NT4.0, XP und bei den restlichen neustarten.
Delete - So 24.11.02 22:53
Schon mal die Suche bemüht? Ode rmal in dei FAQ's geschaut? :roll:
Anonymous - Mo 25.11.02 00:37
Mußte was in der FAQ unter Sonstiges sein.
Killi - Sa 30.11.02 19:51
Hi!
Und wie starte ich jetzt dieses hier:
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; |
???
da passiert bei mir nichts bzw. es kommen ein haufen Fehler - habe versucht die Funkction zu deklarieren(bei den Procedures), aber das will er nicht - wie denn dann?
Anonymous - Sa 30.11.02 20:04
Guter Mann. Hast du nicht festgestellt, daß der Link von patmann2001 zu einem Problem von patmann2001 führt. Es gibt zig Lösungen, auch in dem Thread von patmann2001. Und welchen Code nimmst du? Den von patmann2001 den er gepostet hat und mit dem er Problemme hat. Du liest dir garnicht seine Problemstellung durch. Nein. Der erste Blick fällt auf das erste grüne Stück Code und das kopierst du in dein Programm. Und jetzt soll einer dir sagen wieso das nicht funktioniert.
(01.12. 11:01 Tino) Absatz entfernt.
Das muß man sich vorstellen: unter den ganzen Codes wählst du den Problemcode.
Killi - Sa 30.11.02 21:18
*quengel, quengel, quengel*
(01.12. 11:02 Tino) Satz entfernt.
tut mir ja leid, aber hast DU dir den Post mal genauer durchgelesen? Dann wär dir auch aufgefallen dass er nur Probleme mit dem "Namen des Bildes" und dem kacheln/strecken hatte - und nicht mit dem HintergrundWECHSEL, oder? Außerdem hab ich kein Plan wie man mit funktionen umgeht
bis11 - Sa 30.11.02 22:22
Bei Funktionen mußt Du die Werte in der Klammer mit übergeben.
Beispiel :
Quelltext
1: 2: 3: 4: 5: 6: 7:
| function test1(var test:String); begin // Deine Anweisungen end;
//Aufruf der Funktion test1('Test'); |
Dann kannst Du auch noch Funktionen schreiben Die Dir einen Wert zurückgeben.
Beispiel :
Quelltext
1: 2: 3: 4: 5: 6: 7:
| function test2(var zahl1,zahl2:Integer):Integer begin result := zahl1 + zahl2; end;
// Aufruf der Funktion Label1.Caption := IntToStr(test2(5,5)); |
Ich hoffe ich habe nichts vergessen, aber daß sollte erstmal reichen dieser kleine Crashkurs.
Delete - Sa 30.11.02 22:30
Quelltext
1: 2: 3: 4: 5: 6: 7:
| function test1(var test:String); begin // Deine Anweisungen end;
//Aufruf der Funktion test1('Test'); |
Dürfte dir kein Compiler compilieren! :roll:
Wenn du auf ein Objekt der Form zu greifen mußt, dann schreib die Deklaration der Funktion in den published Abschnitt der Klasse TForm. Ansonsten reicht es, wenn du sie vor dem ersten Aufruf nach Implementation implementierst.
Anonymous - Sa 30.11.02 23:42
In der FAQ sind so wunderbare Funktionen die Fehlermeldungsfrei funktionieren. Aber nimmt er die? Nein. Er will Hintergründe wechseln, kann aber mit einer Funktion nicht umgehen. Da er also nicht mit der Funktion umgehen kann, wird er mit den Rückgabewerten auch nichts anfangen können. Also sollte er das ganz weglassen:
Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar('c:\100.bmp'), SPIF_SENDWININICHANGE) end; |
Killi - Mo 02.12.02 20:34
Danke, aber das funkzt bei mir nicht - wird zwar alles in Win.ini geshrieben, aber wie schon erwähnt nicht aktualisiert! Hab mal das hier benutzt:
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:
| procedure TForm1.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;
procedure TForm1.Button1Click(Sender: TObject); var Wall: string; begin Wall:= 'C:\0.BMP'; SetWallpaperSystem(Wall, False, False); end; |
Anonymous - Mo 02.12.02 20:52
| Killi hat folgendes geschrieben: |
| Danke, aber das funkzt bei mir nicht - wird zwar alles in Win.ini geshrieben, ... |
Sicher funktioniert das. Wenn ich auf etwas antworte und mir nicht sicher bin, dann schreibe ich "ungeprüft" dazu. Den Code aber, den ich dir zuletzt gepostet habe, hab ich ausprobiert. Bei mir funktioniert er. Vielleicht hast du den Pfad nicht richtig angegeben.
Delete - Mo 02.12.02 22:17
Ich weiß nicht, sollte man nicht noch irgendwo den RootKey angeben? Und den Pfad habe ich auch noch nie als Create-Parameter übergeben.-
Anonymous - Di 03.12.02 06:54
Meine letzte Aussage bezog sich auf:
Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar('c:\100.bmp'), SPIF_SENDWININICHANGE) end; |
Den hab ich getestet und er funktioniert.
Der andere Code mit der Übergabe in Reg braucht kein RootKey, da es sich um TReg
IniFile handelt. TRegIniFile geht automatisch von HKEY_USER\DEFAULT aus.
ConnyCarl - Mi 04.12.02 10:29
Titel: aber nicht auf anderen rechner
doch wie sieht es bei anderen rechner aus ???
auf meinem rechner läuft die änderung des hintergrundbildes, doch nicht bei meinem freund. er hat das gleich betriebssystem wie ich.
danke für die antwort.
gruß conny
Delete - Mi 04.12.02 10:35
Stimmt der Pfad zum neuen Hintergrundbild? :roll:
Killi - Mi 04.12.02 20:36
eben - bei mir geht es eben auch nicht! Habe Delphi 4, hat das was damit zu un? Außerdem Win98 SE...
ConnyCarl - Do 05.12.02 13:56
Titel: jetzt läufts auch unter win95, win98 und winxp
das sind jedenfalls die betriebssysteme auf denen ich es ausprobieren konnte. ich arbeite auch mit delphi4, hier der code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.UebernameClick(Sender: TObject); var FileSave : String; Reg : TRegIniFile; begin Reg := TRegIniFile.Create('Control Panel\Desktop'); FileSave := 'C:\Windows\HBLosung.bmp'; Hgbild.Picture.SaveToFile(FileSave); Reg.WriteString('', 'Wallpaper', FileSave); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE) end; |
ich hoffe es konnte dir weiter helfen, mir hats ;-)
gruß conny
Delete - Do 05.12.02 15:20
Ressourcen-Schutz. :roll:
Tino - Do 05.12.02 22:46
| Luckie hat folgendes geschrieben: |
| Ressourcen-Schutz. :roll: |
Ein tolles Thema :roll:
ConnyCarl - Di 17.12.02 10:34
Titel: grosse sorge
hallo,
ich habe eine neue grosse sorge. bei mir kann ich das hintergrundbild auf dem desktop ändern. doch bei meinem kumpel geht es nicht(der reg eintrag ist jedoch gleich gesetzt). was wir aber festgestellt haben ist, dass wenn er den rechner runterfährt und wieder hoch ist das neue bild da. woran kann das liegen ???
und noch ein anderes problem habe ich mit dem abspeichern. in meinem program gibt es eine vorschau, diese funktioniert einwandfrei. jedoch wird das bild nicht richtig gespeichert ( ist mir bis jetzt nur unter Win95 pasiert). liegt es vieleicht an der farbpalette ???
hat jemand einen rat ???
gruß conny
Delete - Di 17.12.02 10:43
Send mal nach dem Eintragen in die Registry WM_SETTINGCHANGE auf.
smiegel - Di 17.12.02 11:12
Hallo, wenn der
Active-Dektop von Windows aktiviert ist, funktioniert das Beispiel mit SystemParametersInfo nicht.
Folgendes funktioniert immer:
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:
| uses ComObj, // For CreateComObject and Initialization/Finalization of COM ShlObj; // For IActiveDesktop
{ The CLASS ID for ActiveDesktop is not defined in ShlObj, while the IID is so we define it here. } const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
procedure ChangeWallPaper(const aBildname:String); var wStr:PWideChar; aDesk:IActiveDesktop; begin wStr:=AllocMem(MAX_PATH*2); try StringToWideChar(aBildName, wStr, MAX_PATH*2); aDesk:=CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop; aDesk.SetWallpaper(wStr, 0); aDesk.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE); finally FreeMem(wStr); end; // try end; // ChangeWallPaper |
ConnyCarl - Di 17.12.02 20:40
Titel: riesen dank
super, es hat geklappt.
danke
conny
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!