喫茶XRAYトップページ

[スレッド全体
]

[5882] Re5:FMXなStringGrid返信 削除
2012/3/12 (月) 22:04:17 Mr.XRAY
これが実行開始時の状態です.
前のはボタンクリックした時です.


[5883] Re6:FMXなStringGrid返信 削除
2012/3/13 (火) 07:36:13 yoshida
便乗して・・

VCLのOnSelectCellイベントでCellのRectが欲しいようなケースなんですが、
TStringColumn.OnEnterで、LocalRectあたりに期待したけれどダメっぽくて、
かろうじてAbsoluteRectあたりで計算してできるっぽいという感じですかね。

procedure TForm1.FColEnter(Sender: TObject);
begin
 Label1.Text := 'ColEnter:' + inttostr(trunc(TControl(Sender).AbsoluteRect.left)) + ' ' +inttostr(trunc(TControl(Sender).AbsoluteRect.top));
 //Label1.Text := 'ColEnter: ' + inttostr(trunc(TControl(Sender).ClipRect.left)) + ' ' +inttostr(trunc(TControl(Sender).ClipRect.top));
 //Label1.Text := ColEnter: ' + inttostr(trunc(TControl(Sender).LocalRect.left)) + ' ' +inttostr(trunc(TControl(Sender).LocalRect.top));
end;

OnEnterがまだ本気そうじゃないので、クリアしても壁はありますが(あきらめ感)



[5885] Re7:FMXなStringGrid返信 削除
2012/3/13 (火) 08:27:17 Syake
▼ yoshidaさん

> VCLのOnSelectCellイベントでCellのRectが欲しいようなケースなんですが、

私もCellRectを捕まえたいのですが、上手くいきませんっていうか良くわから
ないです。
参考にさせてください。

[5892] Re8:FMXなStringGrid返信 削除
2012/3/13 (火) 19:26:47 yoshida
▼ Syakeさん

> 私もCellRectを捕まえたいのですが、上手くいきませんっていうか良くわから
> ないです。


こちらは、VCLのInplaceEditorなんかもずーとしょぼいので、
マウス/カーソル位置にTEditなど編集コントロールを追従して表示するよう試行しています。
そんな感じでしょうか。
時間があったのでちょっと試しました。

TEditで追従するようにOnSelChanged、Edit1にOnExitを設定します。

procedure TForm1.StringGrid1SelChanged(Sender: TObject);
begin
  with StringGrid1 do          //Selected
  begin
    if Columns[ColumnIndex] = Nil then exit; //ColCount = 1 は無視

    Edit1.Position.X := Columns[ColumnIndex].AbsoluteRect.Left; //AbsoluteRectが適切かわからない
    Edit1.Position.Y := Position.Y + (Selected +1 - TopRow) * RowHeight; //Selected は,Row値
    Edit1.Width := Columns[ColumnIndex].AbsoluteRect.Width;
    Edit1.Text := Cells[ColumnIndex,Selected];
    Edit1.SetFocus;
  end;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  with StringGrid1 do
  begin
    Cells[ColumnIndex,Selected]  := Edit1.Text;
    Edit1.Text := '';
  end;
end;

キー操作など細かい動きは別にしてWin32/MacともほぼOK、
ただ、スクロールでEdit1の位置が反映されません。
このあたりは、スクロール後、GridのUpdateSelectionする手段がないようで、
FMX.Gridソースを修正する必要がありました。
(ソースコピーしてユニット/クラス名変更もアリですが、他の方法ありましたっけ?)
ただし、なぜかMacターゲットの場合はコンパイルエラーがでます(注意&先行不安)

HScrollChange/VScrollChangeのUpdateSelectionの後にOnScrollBarChangeを追加し、
スクロール後、以下で再配置。

procedure TForm1.StringGrid1ScrollBarChange(Sender: TObject);
begin
     StringGrid1SelChanged(Nil);
end;

横スクロールはOKのようですが、
縦は、微妙に位置がずれるので、Y位置の微調整は必要そう。

といったところです。

#しかし、素性が違うモノを強引に同じStringGridとして販売するのはいかがなものかと。
#オブジェクト指向な開発ツール的に(笑)
#いつのまにか閉まっていますね。
http://www.ksdev.com/


[5898] Re9:FMXなStringGrid返信 削除
2012/3/14 (水) 06:55:47 yoshida
はずしていそうですが、ちょっと補足です。

>FMX.Gridソースを修正する必要がありました。

この方法は、win32でもLiveBindingを使うと、コンパイルがダメのようで、やめておいた方がいいです。

たとえば、\Samples\FireMonkey\DataCube\DataRoom.dproj

>[DCC 致命的エラー] Unit7.pas(20): F2051 ユニット Fmx.Bind.Editors は
>異なるバージョンの FMX.Grid.TCustomGrid.SetRowCount によりコンパイルされています。


TGrid周りはUpdate4で、Macで描画/編集操作がいまいち(というか悪化?)で試しましたが、
VCLのような自由度もなく、あくまでLiveBinding向けのGridのようです。
他にも、IDEが遅くなった感とか、固まる頻度が多くなったとか発展途上のようで
今のところ、あまり深入りする価値はなさそうです。
3'dパーティ製Gridを期待しつつ、次のUpdate待ちになりそうです(あるのか?)
FM自体は素晴らしいけど、IDEビジネスへの無理やり感が心配というか。


[5897] Re7:FMXなStringGrid返信 削除
2012/3/14 (水) 06:53:28 yoshida
> procedure TForm1.FColEnter(Sender: TObject);

TControl.FChildrenあたりにCellを持ち、Paint時のRectを保持しているかも〜という感じで
ソースをよく見るとOnEnterのSenderは、Columnですし勘違いしていました。失礼。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82