Topic: массив добавить элемент

Дмитрий, не подскажете с кодом. При добавление элемента в массив позже выводит ошибку. Уже юзел гугл, ни знаю что делать.

procedure setting_ButtonZp3_OnClick (Sender: string; var Cancel: boolean);
var
arrStr: array of string;
str,str1,str2:  string;
i,si,key : integer;
begin

  str:= setting.EditZP2.Text; // к примеру->'fgfhhg.hjk'
  si:=Length(str); key:= 1;
  key:= 1;
  for i:=1 to si do
  begin
   if str[i] = '.' then
   begin
   arrStr[key]:= str1;
   key:=key+1;
   str1:='';
   Continue;
   end;
   str1:=str1+str[i];
  end;
  if str1<>'' then arrStr[key]:= str1;
 // arrStr := SplitString(str, '.');  <-это не работает
 if (Length(arrStr)=2) and (Length(arrStr[2])<4) and (Length(arrStr[2])>1) then
begin
  ShowMessage('Вы указали сайт:'+str);    //  arrStr[1]
 end
  else
  ShowMessage('Вы указали не адрес сайта!'+IntToStr(key));
end;

По сути я хочу создать массив разбив строку по точке.

Re: массив добавить элемент

Вы используете динамический массив (arrStr: array of string;) перед использованием которого необходимо определить его размер, пример:

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
var
    arrStr: array of string;
begin
    SetLength(arrStr, 3); // устанавливаем размер массива
    arrStr[0] := 'one';
    arrStr[1] := 'two';
    arrStr[2] := 'three';
end;

т.е. ваш цикл должен быть примерно таким

si:=Length(str); 
key:= 0;
for i:=1 to si do
begin
     if str[i] = '.' then
     begin
        SetLength(arrStr, key+1);
        arrStr[key]:= str1;
        key:=key+1;
        str1:='';
        Continue;
      end;
      str1:=str1+str[i];
end;


если вам необходимо разбить строку на массив используя символ разделитель, то проще так

s := 'fgfhhg.hjk';
arrStr := SplitString(s, '.');
Dmitry.