unit umemoform;

{$mode objfpc}{$H+}

interface

uses
  Forms, StdCtrls, SysUtils,
  Buttons, Classes, Dialogs,Controls;

type

  { TShowINIForm }

  TShowINIForm = class(TForm)
    cmd_Abort: TBitBtn;
    cmd_saveChanges: TButton;
    cmd_Close: TBitBtn;
    Memo_INI: TMemo;
    procedure cmd_CloseClick(Sender: TObject);
    procedure cmd_saveChangesClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Memo_INIChange(Sender: TObject);
  private
  public
    bDirty: boolean;
    sINIFilePath: string;
    // Help = MakeReadonly, OpenINI = MakeWriteable
    procedure MakeReadOnly;
    procedure MakeWriteable;
  end;

var
  ShowINIForm: TShowINIForm;

implementation
// Uses umainform;
{$R *.lfm}

{ TShowINIForm }
procedure TShowINIForm.MakeReadOnly;
begin
   Memo_INI.Readonly:=TRUE;
end;

procedure TShowINIForm.MakeWriteable;
begin
  Memo_INI.Readonly:=FALSE;
end;

procedure TShowINIForm.cmd_saveChangesClick(Sender: TObject);
begin
  if bDirty then
    try
     {$I+}
      Memo_INI.Lines.SaveToFile(sINIFilePath);
      ShowMessage('Changes saved OK.');
      Close;
    except
      On E: Exception do
        ShowMessageFmt('Oops! Error: %s', [E.Message]);
    end;
end;

procedure TShowINIForm.cmd_CloseClick(Sender: TObject);
begin
  if bDirty then
    If MessageDlg('Discard changes?',mtConfirmation,[MBYES,MBNO],0,MBNO) = mrNo then
      Begin
         cmd_saveChanges.Click;
         Exit;
      end;
  Close;
end;

procedure TShowINIForm.FormCreate(Sender: TObject);
begin
  Icon := Application.Icon;
end;

procedure TShowINIForm.FormShow(Sender: TObject);
begin
  bDirty := False;
  cmd_saveChanges.Enabled := False;
end;

procedure TShowINIForm.Memo_INIChange(Sender: TObject);
begin
  bDirty := True;
  cmd_saveChanges.Enabled := True;
end;

end.