0

これは説明が難しいかもしれませんが、for ... := 1 to 10 do ステートメントを実行したいのですが、for A to N do にしたいのです。この演習の主な目的は、文字列グリッドにデータをロードすることです。では、セル 0,1 0,2 0,3 0,4 0,5 0,6 0,7 を文字 A、B、C、D、E から 14 までロードしてみましょう。これを行う方法私は非常に感謝しています!

4

3 に答える 3

6

これでわかりましたが、プログラミングを学ぶ良い方法かどうかはわかりません (他の人にコードを書いてもらうために、リクエストとして質問することを意味します)。

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  StringGrid1.FixedCols := 1;
  StringGrid1.ColCount := 15;
  for I := 1 to 14 do
    StringGrid1.Cells[I, 1] := Chr(Ord('A') + I - 1);
end;
于 2012-08-06T09:32:56.343 に答える
1

StringGrid コントロールを一度に 1 行ずつ塗りつぶしたい場合は、次のことができます。

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.FixedCols := 1;
  StringGrid1.FixedRows := 1;
  for i := 0 to Min(25, (StringGrid1.ColCount-1) * (StringGrid1.RowCount-1)) do
    StringGrid1.Cells[i mod (StringGrid1.ColCount - 1) + 1,
      i div (StringGrid1.ColCount - 1) + 1] := Chr(Ord('A') + i);
end;

行と列の数に関係なく機能します。

于 2012-08-06T09:45:12.363 に答える
0

TLama の答えを「for ... := 1 to 10 do ステートメントを実行したいが、A to N do を実行したい」と融合させたい

それがしゃれなのか、啓発的なのかはわかりません。

var c: char; i: integer;
    s: string;  
    ...
  i := 0; s:= EmptyStr;
  for c := 'A' to 'N' do begin
      s := s + c + ',';
      Inc(i);
  end;

  SetLength(s, Length(s) - 1); // we do not need last comma there
  StringGrid1.ColCount := i;
  StringGrid1.Rows[0].CommaText := s;

または、TStringBuilder を使用しても同じです。これは、新しい文字列の変更ごとにヒープを再配置するよりも高速です。

uses SysUtils;
    ...
var c: char; i: integer;
    s: string;
    ...
  i := 0;
  with TStringBuilder.Create do try
     for c := 'A' to 'N' do begin
         Append(c + ',');
         Inc(i);
     end;
     s := ToString;
  finally 
     Free;
  end;

  SetLength(s, Length(s) - 1); // we do not need last comma there
  StringGrid1.ColCount := i;
  StringGrid1.Rows[0].CommaText := s;
于 2012-08-06T12:08:10.883 に答える