TDBGrid
500 文字を表示する列は通常の画面幅よりも広いため、列幅の内部制限に達しているのではないかと思います。(VCL ソースを調べたい場合は、これをチェックしてください。 から始めてGrids.pas
ください。)
通常、 はTDBGrid
1 つの列に多くのテキストを表示しません。これはユーザーによる大量のスクロールにつながり、幅の広いテキストを読むための水平スクロールはほとんどの人にとって非常に煩わしいものです。
これを行う通常の方法はftMemo
、実質的に無制限のテキスト コンテンツを含めることができる type フィールドを使用することです。列が に割り当てられているTDBGrid
場合、グリッド列には が表示され(MEMO)
、アプリケーションは列のクリックまたはダブルクリックを処理して、 付きのセカンダリ フォームを表示するTEdit
かTRichEdit
、列の内容全体を表示/編集します。
オブジェクトインスペクタで使用して、次の列が定義された名前付きのTDBGrid
にアタッチされた例を次に示します (役に立ちませんが、例です) 。TClientDataSet
CDS
CDS.FieldDefs
Column Persistent Name FieldType Size
------ --------------- --------- ----
ID CDSID ftInteger 0
Name CDSName ftString 25
Notes CDSNotes ftMemo 0
基になるデータセットが存在しないため、 を割り当て、FileName
次のコードを使用して実行時に作成します。
procedure TForm1.FormCreate(Sender: TObject);
begin
if not FileExists(CDS.FileName) then
begin
CDS.CreateDataSet;
CDS.Active := True;
CDS.InsertRecord([1, 'John Smith', 'This is some longer text'#13'for testing.']);
CDS.InsertRecord([2, 'Fred Jones', 'A note about Fred goes'#13'here for now.']);
CDS.Active := False;
end;
CDS.Active := True;
end;
TDataSource
フォームに a を置き、に設定DataSource
しCDS
ます。を追加しTDBGrid
、 に設定しDataSet
ましたDataSource1
。
オブジェクト インスペクタで を選択しTDBGrid
、[イベント] タブに移動して、イベントに次を追加しますOnCellClick
(もちろん、表示のためだけです)。
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.FieldName := 'CDSNotes' then
ShowMessage(Column.Field.AsString); // Display other form here instead
end;
CDSNotes
の行 1 の列をクリックした後の表示は次のTDBGrid
とおりです。
で長いテキスト列の部分的なコンテンツを表示する必要がある場合TDBGrid
は、次のようなものを使用できます。
procedure TForm2.CDSNotesGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
// Again, a trivial example using an arbitrary chunk of the first 20
// characters just for demo purposes.
if DisplayText then
Text := Copy(Sender.AsString, 1, 20)
else
// Not for display only; return all the text.
Text := Sender.AsString;
end;
上記のサンプル アプリでこれを行うと、表示が次のように変わります。