StringGridへの表示について


yuuyu  2003-03-18 20:05:38  No: 3164

はじめまして、プログラミングを始めて1週間の超初心者ですが
よろしくお願い致します。

Formに、StringGrid1、ListBox1、Button1を配置し、
Button1をクリックするとListBox1.ItemsをStringGrid1のRowに
表示させる、ということをしたいのですが、
ListBox1.Itemsの1行を、先頭から1〜5文字目までをCells[0,i+1]に
6〜10文字目までをCells[1,i+1]に、というように1行を分割して
表示させることが出来ません。
下記は一応私が書いてみたコードです。
どのようにしたらいいかご指導下さい。

procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
begin
  StringGrid1.RowCount:=ListBox1.Count+1;
  StringGrid1.Visible:=False;
  for i:=0 to ListBox1.Count-1 do
  begin
    StringGrid1.Cells[0,i+1]:=ListBox1.Items.Strings[i];
  end;
 StringGrid1.Visible:=True;

end;


にしの  2003-03-18 20:48:42  No: 3165

まず、TListBoxコンポーネントにCountプロパティは存在しません。Itemsプロパティの、Countプロパティを利用します。

やりたいことは理解されているようですね。ただ、コーディングにそれが反映されていません。
今あるコーディングでは、
> StringGrid1.Cells[0,i+1]:=ListBox1.Items.Strings[i];
・リストボックスの各要素を、グリッドのセル(0,i)に入れる
だけです。

これを、
・リストボックスの各要素の「1文字目から5文字」を、グリッドのセル(0,i+1)に入れる。
・リストボックスの各要素の「6文字目から5文字」を、グリッドのセル(1,i+1)に入れる。
とします。

文字列の一部分を抜き出すには、Copy関数を使用します。Delphiの場合、文字列を文字配列と見立てたときの最初の要素は「1」です。なので、1文字目から5文字は、「Copy(文字列, 1, 5)」となります。

StringGrid1.Visibleを変更しているのは、たぶん描画速度アップのためのおまじないだと思いますが、結構長い処理を行うと、その部分が消えてしまい見栄えはよろしくないですよね。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=18#0190.txt
ここが参考になると思います。


yuuyu  2003-03-18 23:40:16  No: 3166

にしのさんご指導有難う御座いました。

早速、試してみたのですが
StringGrid1.Cells[0,i+1]:=copy(s,1,3);
とすると、先頭から3文字目までを表示するのですが
4〜5文字目までをCol=1、Row=i+1に表示させようと
StringGrid1.Cells[1,i+1]:=copy(s,4,5);とすると
「リストのインデックスが範囲を超えています」
とエラーになります。
なにが問題なのか教えてください。
お願い致します。


にしの  2003-03-19 00:06:52  No: 3167

ColCountは、RowCountのように初期設定してありますか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加