TStringGrid でカラム名の省略文字(...)を表示するには?

解決


Del  2008-01-29 02:16:58  No: 29556  IP: 192.*.*.*

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;

編集 削除
igy  2008-01-29 09:00:00  No: 29557  IP: 192.*.*.*

>      uFormat := DT_VCENTER or DT_SINGLELINE;

uFormatにDT_END_ELLIPSISを追加するのではだめですか?

編集 削除
Del  2008-01-29 14:43:36  No: 29558  IP: 192.*.*.*

igy様、レス有難うございます。
うまくいきました。

当初、省略記号を自分で描画するとなるとデータ表示箇所にも
カラム幅に納まらない場合は、省略記号を表示しなければと思いつつ、
とりあえずカラムだけでも省略記号を表示させようと思っていました。

igy様に教えて頂いた方法によりどちら(カラム部,データ表示部)も
実現できました。本当に有難うございました。

編集 削除
Fusa  URL  2008-01-30 09:09:41  No: 29559  IP: 192.*.*.*

解決しているところですが

ちょっと異なりそうですが
関連した内容でまとめてみました。
どうぞ。

長いパス名や長い文字列を一部[...]と表示する方法http://delfusa.main.jp/delfusafloor/technic/technic/046_LongTextPathMinimize.html

編集 削除
Del  2008-02-01 01:51:12  No: 29560  IP: 192.*.*.*

Fusa様、レス有難うございます。
実はファイルパスの省略も知りたかった情報でした。
早速、参考にさせて頂きます。
本当に有難うございました。

編集 削除