Wallpaper setzen
-
Hallo !
Habe einen sehr merkwürdigen Effekt.
Ich generiere und setze mir ein eigenes Wallpaper nach recherchen im Forum :if (FileExists(BGFileName)) { try { SystemParametersInfo( SPI_SETDESKWALLPAPER, 0 ,BGFileName.c_str() , SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); MessageDlg("Neues Hintergrundbild übernommen: " + BGFileName, mtInformation, TMsgDlgButtons() << mbOK, 0); } catch (Exception &e) { MessageDlg("Exeption beim Übernehmen des Hintergrundbildes : " + e.Message, mtInformation, TMsgDlgButtons() << mbOK, 0); } } else { MessageDlg("Es existiert kein Hintergrundbild: " + BGFileName, mtError, TMsgDlgButtons() << mbOK, 0); }Das funktionierte unter einem deutschen W-XP problemlos.
Das wollte ich die gleiche Funktion auf einem Englischen PC ausführen und staunte nicht schlecht, als mir andauernd der Dezimalseparator geändert wurde.
Intern arbeite ich immer mit ",", aber nach dem Setzen des neuen Hintergrundbildes hagelte es Fehler, da mein Programm nun mit "." arbeiten wollte. Verständlich.Übrigens habe ich dann SPIF_UPDATEINIFILE entfernt, so dass die Zeile nur noch :
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0 ,BGFileName.c_str() , SPIF_SENDWININICHANGE);lautete. Seit dem sind wieder alle glücklich und zufrieden.
Wie kann es zu einem derartigen Verhalten kommen ?
Das BDS2006 auch nicht astrein mit Sprachumschaltungen auskommt, habe ich bereits mehrfach erleben dürfen. Bei mehrsprachigen Projekten erlebt man immer wieder etwas neues

-
Warum brauchst Du ein ",", wenn Du eine Datei öffenen willst? (z.B. XXX.bmp) Der Dateiname und der Dateityp wird normalerweise mit einem "." getrennt.
So wie ich Dein Problem verstehe geht es eher darum, dass Du in Deinem Programm ein Problem mit dem DezimalSeperator hast. Dies ist von Sprache zu Sprache unterschiedlich. Der Fehler tritt wohl eher auf, wenn Du irgendetwas skalierst.
Du mußt beim Start deines Programms im Konstruktor den "DecimalSeperator" setzen
DecimalSeparator='.'; //Umstellung Dezimaltrennzeichen auf "."
-
Das hat mit dem Datei öffnen nicht zu tun.
Im Deutschen werden Zahlen halt mit "," dargestellt und gespeichert.
Im Amerikanischen aber mit ".". Deshalb musste ich mich auf eine Art einschiessen.Deshalb setze ich ja beim Programmstart auch den entsprechenden Wert, eben ",".
Das Komische ist ja nur, dass wenn ich SPIF_UPDATEINIFILE benutze, Windows der Meinung ist, er müsse den Decimalseparator einstellen, der laut Betriebssystemsprache notwendig ist.
Und dann crashed natürlich mein Programm.Den gleichen Effekt kann man beofachten, wenn man z.B. Fenstereinstellungen, also Scrollbalkenbreite o.ä. in "Systemsteuerung-Anzeige-Darstellung-Erweitert" verändert. Auch dann erfolgt die zwwangsweise Umstellung des Dezimalseparators.
-
Ich lese nur SPIF_UPDATEINIFILE und Windows-Crash und so weiter. Wozu das? Du willst den Dezimal Separator ändern, und Tron2k hat Dir äußerst detailiert beschrieben, wie man so etwas macht:
Tron2k schrieb:
DecimalSeparator='.'; //Umstellung Dezimaltrennzeichen auf "."Es gibt übrigens auch einen "ThousandSeparator", falls Du den auch brauchen solltest. Funktioniert genauso.
-
Was hat denn das Setzen eines Wallpapers mit dem Dezimal-Trenner zu tun. Das wurd hier irgendwie noch nicht klar erläutert.
-
Ursächlich hat das damit garnichts zu tun.
Es sei lediglich darauf hingewiesen, dass die Benutzung von SPIF_UPDATEINIFILE in diesem Zusammenhang, diese Beeinflussung zur Folge hat.
es ist lediglich ein Randeffekt, der eben dann auftritt und zu Problemen führt.
-
MyOwnShadow schrieb:
Es sei lediglich darauf hingewiesen, dass die Benutzung von SPIF_UPDATEINIFILE in diesem Zusammenhang diese Beeinflussung zur Folge hat.
Du hast es immer noch nicht erklären können. Wo ist da der Zusammenhang zum Dezimal-Trenner?
-
Er hat ein x-Beliebiges Programm in welchem am Anfang der Dezimaloperator auf "," gesetzt wird!
Nun wird aber von Windows sobeld er SPIF_UPDATEINIFILE anwendet der Dezimaloperator zurückgesetzt (suf ".") und der Rest seines Programms läuft nicht mehr weil es mit "," arbeitet.