Einzelnen Beitrag anzeigen

Alallart

Registriert seit: 8. Dez 2015
154 Beiträge
 
#18

AW: Speicher-Fehler beim create

  Alt 3. Mai 2018, 19:31
Weil ich gerade etwas Zeit habe, das mit Font.Styles etwas kompliziert ist, und ich zufällig ein fertiges Beispiel habe

Delphi-Quellcode:
uses
  IniFiles;

const
  //Wenn man für Sections und Idents Konstanten nimmt, schleichen sich später keine Fehler ein
  SecOptions = 'Options';
  IdFontName = 'FontName';
  IdFontSize = 'FontSize';
  IdFontStyle = 'FontStyle';
  SecInfo = 'Info';
  IdText1 = 'Text1';
  IdZahl1 = 'Zahl1';

procedure TForm1.Button1Click(Sender: TObject); //in eine Ini Daten speichern
var
  IniPath: String;
  IniFile: TIniFile;
  fsTemp: Byte;
  FontStyles: TFontStyles;
begin
  //Programmpfad als Grundlage für die Ini-Datei nehmen.
  IniPath := ChangeFileExt(ParamStr(0), '.ini');

  IniFile := TIniFile.Create(IniPath);
  try
    IniFile.WriteString(SecOptions, IdFontName, Canvas.Font.Name);
    IniFile.WriteInteger(SecOptions, IdFontSize, Canvas.Font.Size);
    FontStyles := Canvas.Font.Style; //Dieser Umweg für FontStyles ist nötig
    System.Move(FontStyles, fsTemp, 1); //FontStyles zum Byte-Wert konvertieren
    IniFile.WriteInteger(SecOptions, IdFontStyle, fsTemp);

    IniFile.WriteString(SecInfo, IdText1, 'Hallo Welt');
    IniFile.WriteInteger(SecInfo, IdZahl1, 42);
  finally
    IniFile.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject); //aus einer Ini Daten landen
var
  IniPath: String;
  IniFile: TIniFile;
  fsTemp: Byte;
  FontStyles: TFontStyles;
  s: String;
  i: Integer;
begin
  //Programmpfad als Grundlage für die Ini-Datei nehmen.
  IniPath := ChangeFileExt(ParamStr(0), '.ini');

  IniFile := TIniFile.Create(IniPath);
  try
    Canvas.Font.Name := IniFile.ReadString(SecOptions, IdFontName, 'Arial'); //Arial=Defaultwert
    Canvas.Font.Size := IniFile.ReadInteger(SecOptions, IdFontSize, 10); //10=Defaultwert
    fsTemp := IniFile.ReadInteger(SecOptions, IdFontStyle, 0); //Dieser Umweg ist nötig
    System.Move(fsTemp, FontStyles, 1); //SizeOf?
    Canvas.Font.Style := FontStyles;

    s := IniFile.ReadString(SecInfo, IdText1, 'Hier ein Ersatztext im Fall eines Fehlers eingeben');
    i := IniFile.ReadInteger(SecInfo, IdZahl1, -1); //-1 ist der Ersatzwert im Fall eines Fehlers

    ShowMessage(Format('Der Text ist: "%s"; Die Zahl ist: %d', [s, i]));
  finally
    IniFile.Free;
  end;
end;
  Mit Zitat antworten Zitat