(FireMonkry)StringGridで複数行表示するには?


ない  2012-04-09 20:08:53  No: 41895

タイトルのままですが、
複数行表示ってプロパティの設定だけでできるのでしょうか?
かなりのコーディングを駆使して
実現することになるのでしょうか?
サンプルソースとかも探したのですが、どこにも・・・。
ヘルプも特に使えそうにありませんでした。


kim99  2012-04-15 03:22:39  No: 41896

とりあえず、デベロッパーキャンプの資料を読んでみようか。
http://ht-deko.minim.ne.jp/tech044.html
第21回デベロッパーキャンプ(1日目) (2011/03/09:東京 / バーチャル) [リンク]
FireMonkey ファーストインプレッション
に細かく説明されてると思います。


ない  2012-04-18 22:18:18  No: 41897

返信ありがとうございます。
複数行表示のことは
ありませんでした。
やはり、できないのでは・・・。


Nov  2012-04-23 03:46:05  No: 41898

コメントが付かないので、思い切って投稿します。

OnDrawCellイベント相当のものなら、
http://blogs.embarcadero.com/teamj/2011/11/14/2598/
が参考になるかと思います。

FireMonkeyについてまだ理解できてないので、アプローチが間違っているかもしれません。実用性の無いゴミコードですが、参考まで...

(1) フォームのクラス定義の前に次の定義を追加
  TStringColumn = class(FMX.Grid.TStringColumn)
  protected
    function CreateCellControl: TStyledControl; override;
  private
    procedure OnCellPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
    procedure OnCellTyping(Sender: TObject);
    procedure OnCellExit(Sender: TObject);
  end;

(2)各メソッドのコード
// セルコントロールのモディファイ
function TStringColumn.CreateCellControl: TStyledControl;
begin
  Result := inherited;
  TTextCell(Result).OnPaint := OnCellPaint;
  TTextCell(Result).OnTyping := OnCellTyping;
  TTextCell(Result).OnExit := OnCellExit;
  TTextCell(Result).Tag := 0;
end;

// エディット中は透過しない
procedure TStringColumn.OnCellTyping(Sender: TObject);
begin
  TTextCell(Sender).Opacity := 1.0;
  TTextCell(Sender).Tag := 1;
  DoTextChanged(Sender);
end;

// エディット終了で透過する
procedure TStringColumn.OnCellExit(Sender: TObject);
begin
  TTextCell(Sender).Opacity := 0;
  TTextCell(Sender).Tag := 0;
  DoTextExit(Sender);
end;

// エディット中で無ければ表示する
procedure TStringColumn.OnCellPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
begin
  if TTextCell(Sender).Tag=0 then begin
    Canvas.Fill.Color := claBlack;
    Canvas.FillText(ARect, TTextCell(Sender).Text, True, 1.0, [TFillTextFlag.ftRightToLeft],
      TTextAlign.taTrailing, TTextAlign.taLeading);
  end;
end;

セルの編集機能であるTEditは、マルチラインに対応していないようです。
TEditとTStringColumnのペイント処理をもっとうまくやれば、実用的になりそうですが...


Nov  2012-04-23 03:52:11  No: 41899

済みません。誤解を招く表現がありました。
"TEditとTStringColumnのペイント処理"は
"TTextCellとTStringColumnのペイント処理"の方が適切でした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加