これは説明が難しいかもしれませんが、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 までロードしてみましょう。これを行う方法私は非常に感謝しています!
質問する
1744 次
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 に答える