anchor.diff:        end;
         if Ctl is TListBox then (Ctl as TListBox).ItemIndex:= StrToIntDef(SValue, 0);
         if Ctl is TRadioGroup then (Ctl as TRadioGroup).ItemIndex:= StrToIntDef(SValue, 0);
  -      if Ctl is TCheckGroup then DoSetChecklistState(Ctl, SValue);
  -      if Ctl is TCheckListBox then DoSetChecklistState(Ctl, SValue);
  +      if Ctl is TCheckGroup then DoSetCheckgroupState(Ctl as TCheckGroup, SValue);
  +      if Ctl is TCheckListBox then DoSetChecklistboxState(Ctl as TCheckListBox, SValue);
         if Ctl is TMemo then DoSetMemoState(Ctl as TMemo, SValue);
         if Ctl is TSpinEdit then (Ctl as TSpinEdit).Value:= StrToIntDef(SValue, 0);
         if Ctl is TListView then DoSetListviewState(Ctl as TListView, SValue);
  
positive.code:       C.Items[N].Checked:= StrToBool(SItem);
        Inc(N);
      until false;
      C.ItemFocused:= C.Items[0];
    end;
  end;
  
  
  function DoGetListviewState(C: TListView): string;
  var
    i: integer;
  begin
    if not C.Checkboxes then
      Result:= IntToStr(C.ItemIndex)
    else
    begin
      Result:= '';
      for i:= 0 to C.Items.Count-1 do
        Result:= Result+IntToStr(Ord(C.Items[i].Checked))+',';
    end;
  
  end;
  
  
  procedure DoAddControl(AForm: TForm; ATextItems: string);
  var
    SNameValue, SName, SValue, SListItem: string;
    NX1, NX2, NY1, NY2, N: integer;
    Ctl, CtlPrev: TControl;
  begin
    Ctl:= nil;
  
negative.code: 
  
  procedure DoSetListviewState(C: TListView; SValue: string);
  // index;check0,check1,
  var
    N: integer;
    SItem: string;
  begin
    SItem:= SGetItem(SValue, ';');
    N:= StrToIntDef(SItem, 0);
    if (N>=0) and (N<C.Items.Count) then
      C.ItemFocused:= C.Items[N];
  
    if C.Checkboxes then
    begin
      N:= 0;
      repeat
  