2006. szeptember 10., vasárnap

TCheckListBox LoadFromFile/SaveToFile Method, included checked state?


Problem/Question/Abstract:

What to use the TCheckListBox LoadFromFile and SaveToFile Method, and store the checked state at the same time?

Answer:

If you embed the Checked property into the actual entry as a “1” or “0” charter you can save the file with the normal SaveToFile method. When a file is loaded using the LoadFromFile method as normal.  Then extract the first charter from the entry and you will have the checked state.

{====================================}

procedure TFrameRuleEngine.SaveRules;
{====================================}
var
  i: Integer;

begin
  i := 0;
  while i < CheckListBoxRule.Items.Count do
  begin
    if CheckListBoxRule.Items[i] = '' then
    begin
      // Delete entry it is empty
      CheckListBoxRule.Items.Delete(i);
    end
    else
    begin
      // Add a 1 or 0 as the first charter in the entry for checked or not checked
      CheckListBoxRule.Items[i] := IntToStr(Integer(CheckListBoxRule.Checked[i])) +
        CheckListBoxRule.Items[i];
      Inc(i);
    end;
  end;
  // Save the full list as normal
  CheckListBoxRule.Items.SaveToFile(ExtractFilePath(Application.ExeName) +
    'Rule.Txt');
end;

{===================================}

procedure TFrameRuleEngine.LoadRules;
{===================================}
var
  sChecked: string;
  i: Integer;

begin
  if FileExists(ExtractFilePath(Application.ExeName) + 'Rule.Txt') then
  begin
    // Read the file as normal
    CheckListBoxRule.Items.LoadFromFile(ExtractFilePath(Application.ExeName) +
      'Rule.Txt');
    i := 0;
    while i < CheckListBoxRule.Items.Count do
    begin
      if CheckListBoxRule.Items[i] = '' then
      begin
        // Delete an empty entry
        CheckListBoxRule.Items.Delete(i);
      end
      else
      begin
        // Get the checked state
        sChecked := Copy(CheckListBoxRule.Items[i], 1, 1);
        CheckListBoxRule.Items[i] := Copy(CheckListBoxRule.Items[i], 2,
          Length(CheckListBoxRule.Items[i]));
        // Update the Checked property
        CheckListBoxRule.Checked[i] := Boolean(StrToInt(sChecked));
        Inc(i);
      end;
    end;
  end;
end;

Nincsenek megjegyzések:

Megjegyzés küldése