03 Dialoge

45 Werte des Dialoges auf Platte speichern

Selfhtml

Das die Werte des Dialoges auch nach beenden der Anwendung erhalten bleiben, speichern wir die Daten auf die Platte.
Es wird nicht überprüft, ob geschrieben werden kann, etc.
Wen man dies will müsste man mit IOResult, etc. überprüfen.


Hier kommt noch sysutils hinzu, sie wird für FileExits gebraucht.
uses
  SysUtils, // Für Dateioperationen
Die Datei, in welcher sich die Daten für den Dialog befinden.
const
  DialogDatei = 'parameter.cfg';
Zu Beginn werden die Daten, wen vorhaden von der Platte geladen, ansonten werden sie erzeugt.
  constructor TMyApp.Init;
  begin
    inherited Init;
    // Prüfen ob Datei vorhanden.
    if FileExists(DialogDatei) then begin
      // Daten von Platte laden.
      AssignFile(fParameterData, DialogDatei);
      Reset(fParameterData);
      Read(fParameterData, ParameterData);
      CloseFile(fParameterData);
      // ansonsten Default-Werte nehmen.
    end else begin
      with ParameterData do begin
        Druck := %0101;
        Schrift := 2;
        Hinweis := 'Hello world !';
      end;
    end;
  end;
Die Daten werden auf die Platte gespeichert, wen Ok gedrückt wird.
  procedure TMyApp.MyParameter;
  var
    Dia: PDialog;
    Rect: TRect;
    dummy: word;
    Ptr: PView;
  begin
    Rect.Assign(0, 0, 35, 15);
    Rect.Move(23, 3);
    Dia := New(PDialog, Init(Rect, 'Parameter'));
    with Dia^ do begin

      // CheckBoxen
      Rect.Assign(2, 3, 18, 7);
      Ptr := New(PCheckBoxes, Init(Rect,
        NewSItem('~D~atei',
        NewSItem('~Z~eile',
        NewSItem('D~a~tum',
        NewSItem('~Z~eit',
        nil))))));
      Insert(Ptr);
      // Label für CheckGroup.
      Rect.Assign(2, 2, 10, 3);
      Insert(New(PLabel, Init(Rect, 'Dr~u~cken', Ptr)));

      // RadioButton
      Rect.Assign(21, 3, 33, 6);
      Ptr := New(PRadioButtons, Init(Rect,
        NewSItem('~G~ross',
        NewSItem('~M~ittel',
        NewSItem('~K~lein',
        nil)))));
      Insert(Ptr);
      // Label für RadioGroup.
      Rect.Assign(20, 2, 31, 3);
      Insert(New(PLabel, Init(Rect, '~S~chrift', Ptr)));

      // Edit Zeile
      Rect.Assign(3, 10, 32, 11);
      Ptr := New(PInputLine, Init(Rect, 50));
      Insert(Ptr);
      // Label für Edit Zeile
      Rect.Assign(2, 9, 10, 10);
      Insert(New(PLabel, Init(Rect, '~H~inweis', Ptr)));

      // Ok-Button
      Rect.Assign(7, 12, 17, 14);
      Insert(new(PButton, Init(Rect, '~O~K', cmOK, bfDefault)));

      // Schliessen-Button
      Rect.Assign(19, 12, 32, 14);
      Insert(new(PButton, Init(Rect, '~A~bbruch', cmCancel, bfNormal)));
    end;
    if ValidView(Dia) <> nil then begin // Prüfen ob genügend Speicher.
      Dia^.SetData(ParameterData);      // Dialog mit den Werten laden.
      dummy := Desktop^.ExecView(Dia);  // Dialog ausführen.
      if dummy = cmOK then begin        // Wen Dialog mit Ok beenden, dann Daten vom Dialog in Record laden.
        Dia^.GetData(ParameterData);

        // Daten auf Platte speichern.
        AssignFile(fParameterData,DialogDatei);
        Rewrite(fParameterData);
        Write(fParameterData, ParameterData);
        CloseFile(fParameterData);
      end;

      Dispose(Dia, Done);               // Dialog und Speicher frei geben.
    end;
  end;



zurück