procedure TForm1.Button1Click(Sender: TObject);
var
Selected: string;
Limit: Integer;
Start: Integer;
isRange: Boolean;
Now, Next1, Next2: Boolean;
i: Integer;
begin
Selected := '';
Start := 0;
Limit := CheckListBox1.Count - 1;
isRange := False;
for i := 0 to Limit do
begin
// Set the values for Now, Next, Next1
Now := CheckListBox1.Checked[i];
if i < Limit then
Next1 := CheckListBox1.Checked[i+1]
else
Next1 := False;
if i < (Limit-1) then
Next2 := CheckListBox1.Checked[i+2]
else
Next2 := False;
// Skip if Now is not checked
if not(Now) then
begin
if isRange then // Store the ranged data before continue
begin
if not(Selected.IsEmpty) then Selected := Selected + ',';
Selected := Selected + Start.ToString + '-' + (i-1).ToString;
isRange := False;
end;
Continue;
end;
// Continue previous range?
if isRange then Continue;
// Start a new range?
if Next1 and Next2 then
begin
if not(isRange) then Start := i;
isRange := True;
Continue;
end;
// Only single checked item
if not(Selected.IsEmpty) then Selected := Selected + ',';
Selected := Selected + i.ToString;
end;
// Close previous ranged items
if isRange then
begin
if not(Selected.IsEmpty) then Selected := Selected + ',';
Selected := Selected + Start.ToString + '-' + Limit.ToString;
end;
ShowMessage(Selected);
end;