名前 題名 ▼ 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/ GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link