2012-01-08 14 views
2

私はDelphiのフォームでメソッド宣言のエラーを修正しましたが、コンパイル時に別のエラーが発生したことを修正し、プロジェクトproject1.exeが例外クラスEStringListError私はそのが機能していない継続押したときに私は、コードneraz:=true; にその点滅を破る押したときにメッセージを表示して「境界の外リストインデックス(0)」。これはリストインデックスが範囲外です(0)

Procedure Reload; 
var 
    i:integer; 
begin 
form1.ListBox1.Clear; 
form1.ListBox2.Clear; 
if neraz then 
HD; 
neraz:=true;//..................here 
form1.Label3.Caption:='free: '+inttostr(vs*32)+' byte'+#10#13+'cluster size = 32 bytes'; 
    i:=TABLE[nk1].nach; 
    KolP1:=0; KolP2:=0; 
    while (FAT[i]<>1024) do begin 
     if TABLE[fat[i]].tip then begin 
      form1.ListBox1.Items.Add('dir>'+TABLE[fat[i]].name); 
      inc(kolP1); 
     end 
     else 
      if TABLE[fat[i]].format='txt' then 
       form1.ListBox1.Items.Add('f_text> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format) 
      else 
       form1.ListBox1.Items.Add('f_bin> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format); 
     if (fat[i]<>0) then 
     i:=fat[i]; 
    end; 
    i:=TABLE[nk2].nach; 
    while (FAT[i]<>1024) do begin 
     if TABLE[FAT[i]].tip then begin 
      form1.ListBox2.Items.Add('dir>'+TABLE[fat[i]].name); 
      inc(kolP2) 
     end 
     else 
      if TABLE[fat[i]].format='txt' then 
       form1.ListBox2.Items.Add('f_text> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format) 
      else 
       form1.ListBox2.Items.Add('f_bin> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format); 
     if (fat[i]<>0) then 
     i:=fat[i]; 
    end; 
    vfail; 
end; 


procedure HD; 
var 
    i: integer; 
begin 
    for i := 0 to 49 do begin 
    with form2.ListView1.Items[i] do begin 
     SubItems[0] := TABLE[i].name; 
     SubItems[1] := TABLE[i].format; 
     if TABLE[i].tip then 
     SubItems[2] := 'folder' 
     else 
     SubItems[2] := 'file'; 
     SubItems[3] := IntToStr(TABLE[i].nach); 
     SubItems[4] := IntToStr(TABLE[i].razmer); 
    end; 
    form2.ListView2.Items[i].SubItems[0] := IntToStr(fat[i]); 
    end; 
end; 
+2

あなたのエラーは「HD」です。 –

+0

「HD」には何がありますか? –

+4

あなたのコードは本当にそのようにフォーマットされていますか?その場合は、コードを正しくインデントする方法を緊急に学習する必要があります。特に、単一の文と複合文のブロックが混在しているためです。それは、最高の時に人生を困難にしますが、インデントの規律がないと、あなたのコードは維持できません。 –

答えて

5

以下の私のコードは、例外クラスEStringListErrorが上昇していますエラー空のTStringsインスタンスのメンバーにアクセスしようとすると、範囲外のインデックスを一覧表示します(0)。その最も可能性の高い候補は、リスト項目のSubItemsプロパティです。

あなたは非常に一般的な罠に陥っているようです。リストビューの列を作成したにもかかわらず、リスト項目ごとにSubItemsリストを記入する必要があります。簡単な解決策は、このようなHDを変更することです:

with form2.ListView1.Items[i] do begin 
    while SubItems.Count<5 do 
    SubItems.Add(''); 
    SubItems[0] := ... 

それは実際にあなたがリスト項目を作成すると同時に、サブアイテムを追加する方が良いかもしれないが。しかし、私はあなたがあなたのプログラムのリストを埋める部分を含んでいないので、そのコードを表示していません。

+0

あなたはその仕事に感謝しています –

関連する問題