hin und wieder habe ich böse Abstürze mit meinem Programm unter Windows 7.
Nach nun einer viel zu langen Zeit habe ich endlich eine Sequenz gefunden, mit derer ich den Bug nachstellen kann.
Mein Programm konvertiert Strings in Floats ala
Code: Alles auswählen
f := strtofloat('1.0');
Code: Alles auswählen
FormatSettings.DecimalSeparator := '.';
Zum Nachstellen folgenden Code :
Code: Alles auswählen
Unit Unit1;
{$MODE objfpc}{$H+}
Interface
Uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
Type
{ TForm1 }
TForm1 = Class(TForm)
Button1: TButton;
Procedure Button1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
End;
Var
Form1: TForm1;
Implementation
{$R *.lfm}
{ TForm1 }
Procedure TForm1.FormCreate(Sender: TObject);
Begin
FormatSettings.DecimalSeparator := '.';
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
showmessage('FS : ' + FormatSettings.DecimalSeparator);
End;
End.
Wenn ich nun das Programm starte bekomme ich erwartungsgemäß die Meldung "FS : .". Den Bug erzeugen kann ich, wenn ich mittels WIN+L den Rechner Sperre und mich dann wieder einlogge. Danach kommt die Meldung "FS : ,"
Lazarus SVN Revision war : 54278
FPC Version : 3.0.2
Kann das jemand erklären / Reproduzieren ?
Muss ich in Zukunft in meine Programme einen Event "OnRelogin" einbauen der den DecimalSeparator wieder korrigiert ? Wie löst ihr das ?
Ist das evtl doch ein BUG ?
Unter Linux habe ich den Bug nicht, allerdings sind alle meine Linuxe auch default auf Eng -> Damit ist der DecimalSeparator eh schon auf "."
[Edit]
Selber Fehler reproduzierbar mit Delphi XE10 kompiliert und getestet unter Windows 7