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;
申し訳ございません。
二重で投稿しておりましたので
こちらは削除してくさだい。
とりあえず解決にチェックしておきます。
ツイート | ![]() |