TStringGrid でカラムの幅が変更されたときにカラム名が
表示しきれない場合はは、省略文字を'...'を表示させたいのですが
何か関数はあるのでしょうか?
とりあえず、自分で書いてみましたがいまいちです。
よろしくお願いします。
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
uFormat: UINT;
ARect: TRect;
AText, TmpText: string;
WText: WideString;
DotStr: string;
begin
with Sender as TStringGrid do begin
SetBKMode(Canvas.Handle, Windows.TRANSPARENT);
Canvas.FillRect(Rect);
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clSilver;
//固定行の場合
if ARow = 0 then begin
ARect := Rect;
WText := Cells[ACol, ARow]; //ワイド文字にセット
TmpText := WText;
DotStr := '';
while Canvas.TextWidth(TmpText + DotStr) + 3 > (Rect.Right - Rect.Left) do begin
//全て'.' にならないように1文字は残す
if Length(WText) = 1 then
Break;
Delete(WText, Length(WText), 1);
TmpText := WText;
DotStr := DotStr + '.';
end;
AText := TmpText + DotStr;
uFormat := DT_VCENTER or DT_SINGLELINE;
DrawText(Canvas.Handle, PChar(AText), Length(AText), ARect, uFormat);
Canvas.MoveTo(Rect.Right-1, Rect.Top+1);
Canvas.LineTo(Rect.Right-1, Rect.Bottom-2);
Exit;
end;
end;
end;
> uFormat := DT_VCENTER or DT_SINGLELINE;
uFormatにDT_END_ELLIPSISを追加するのではだめですか?
igy様、レス有難うございます。
うまくいきました。
当初、省略記号を自分で描画するとなるとデータ表示箇所にも
カラム幅に納まらない場合は、省略記号を表示しなければと思いつつ、
とりあえずカラムだけでも省略記号を表示させようと思っていました。
igy様に教えて頂いた方法によりどちら(カラム部,データ表示部)も
実現できました。本当に有難うございました。
解決しているところですが
ちょっと異なりそうですが
関連した内容でまとめてみました。
どうぞ。
長いパス名や長い文字列を一部[...]と表示する方法http://delfusa.main.jp/delfusafloor/technic/technic/046_LongTextPathMinimize.html
Fusa様、レス有難うございます。
実はファイルパスの省略も知りたかった情報でした。
早速、参考にさせて頂きます。
本当に有難うございました。