タイトルのままですが、
複数行表示ってプロパティの設定だけでできるのでしょうか?
かなりのコーディングを駆使して
実現することになるのでしょうか?
サンプルソースとかも探したのですが、どこにも・・・。
ヘルプも特に使えそうにありませんでした。
とりあえず、デベロッパーキャンプの資料を読んでみようか。
http://ht-deko.minim.ne.jp/tech044.html
第21回デベロッパーキャンプ(1日目) (2011/03/09:東京 / バーチャル) [リンク]
FireMonkey ファーストインプレッション
に細かく説明されてると思います。
返信ありがとうございます。
複数行表示のことは
ありませんでした。
やはり、できないのでは・・・。
コメントが付かないので、思い切って投稿します。
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のペイント処理をもっとうまくやれば、実用的になりそうですが...
済みません。誤解を招く表現がありました。
"TEditとTStringColumnのペイント処理"は
"TTextCellとTStringColumnのペイント処理"の方が適切でした。
ツイート | ![]() |