いつも参考にしています。
DBGridで不明点が出てきたので相談させてください。
列タイトルを複数行表示するにはどうすればいいのでしょうか?
行幅変更するのは下記コードで出来たのですが,
文字列を複数行にして表示することが出来ません。
(文字列に #13#10 を加えてみました。変化無し)
過去ログ検索すると出来る雰囲気はあるのですが・・・
https://www.petitmonte.com/bbs/answers?question_id=1383
ご存じの方がいれば教えて頂けると幸いです。
よろしくお願いします。
行幅変更方法:TStringGrid(DBGrid1).RowHeights[0] := 30;
これの事ですか?。
unit MutiTitleDBGroid;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBGrids, Grids;
type
TMutiTitleDBGrid = class(TDBGrid)
private
{ Private 宣言 }
procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TGridDrawState); override;
protected
{ Protected 宣言 }
public
{ Public 宣言 }
published
{ Published 宣言 }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMutiTitleDBGrid]);
end;
{ TMutiTitleDBGrid }
procedure TMutiTitleDBGrid.DrawCell(ACol, ARow: Integer; ARect: TRect;
AState: TGridDrawState);
const
AlignFlags : array [TAlignment] of Integer =
( DT_LEFT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
DT_RIGHT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
DT_CENTER or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX );
var
Text : string;
Flags: LongInt;
begin
inherited DrawCell(ACol, ARow, ARect, AState);
if (ARow = 0) and (ACol <> 0) and (FieldCount > 0) then
begin
// 縁を残して塗りつぶす
InflateRect(ARect, -1, -1);
Canvas.FillRect(ARect);
// DBGridのTitleFontプロパティを使う
Canvas.Font.Assign(TitleFont);
// カラムのTitle.Captionを使用する
Text := Columns[ACol-1].Title.Caption;
// 文字列に";"があるかを判断して2行に分ける
if (Pos(';', Text) > 0) then
begin
// 2行の場合
Flags := DT_VCENTER or AlignFlags[Columns[ACol-1].Title.Alignment];
// 文字列を分割し、CRLFを入れる
Text := Copy(Text, 1, Pos(';', Text)-1) + #13+#10 +
Copy(Text, Pos(';', Text)+1, Length(Text));
end else
// 1行の場合DT_SINGLELINEを付けて行の真ん中に表示する
Flags := DT_SINGLELINE or DT_VCENTER or
AlignFlags[Columns[ACol-1].Title.Alignment];
// 表示
DrawText(Canvas.Handle, PChar(Text), Length(Text), ARect, Flags);
end;
end;
end.
返信ありがとうございます。
DrawCellをオーバーライドしないとダメだったんですね。
定数宣言の部分はいまいち分かっていませんが,
参考にして無事組み込むことが出来ました。
ありがとうございました。
ツイート | ![]() |