掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FMX TStringGrid で列の固定 (ID:149724)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 列幅を固定したいだけなら、 > TStringGird の StringColumn の OnResizedイベントハンドラに > StringColumn1.Width := 100; > とか記述すれば、その列が固定幅になるかと思います。 小細工をろうしなくても、 TStringGrid.Options.Colimnプロパティで列幅は固定できますね。 但し、全ての列が固定化されてしまう為、特定の列だけ固定化させたい時は上記の例で(^^; とにかく質問の意図を正しく汲み取っておらず、失礼しました(汗 > 色々調べて、参考になる動画を見つけました。 > StringGridを2つ使って実現する様です。両者を並べて配置し、左側には固定列のみを表示させ、右側には全てを表示します。左側のスクロール・バーは非表示になっています。 > これで、両者の縦スクロールを同期させれば、OKの様です。 FMXのTStringGirdには、FixedCols, FixedRowsプロパティに相当する機能が無い様なので、 ちょっと変則ですけど、2つのTStringGirdを並べるというアイデアは私も思い付いていました。 但し、2つのTStringGirdのスクロール位置を同期させねばならない。 下記のコードではどうでしょうか。 コンポーネントの配置的には、 まず TLayout を置いて全体の矩形の大きさを決定し、 次にタイトル部分の TStringGrid を Align=Left で配置、 最後にデータ部分の TStringGri dを Align=Client で配置する様な事をやっています。 【 FMXコード 】 uses …, FMX.BehaviorManager; type TForm1 = class( TForm ) Layout1 : TLayout; StringGrid1 : TStringGrid; // 左 ( タイトル側 ) StringGrid2 : TStringGrid; // 右 ( データ側 ) procedure FormCreate( Sender : TObject ); procedure ViewportPositionChange1( Sender : TObject; const OldPosition, NewPosition : TPointF; const Changed : Boolean ); procedure ViewportPositionChange2( Sender : TObject; const OldPosition, NewPosition : TPointF; const Changed : Boolean ); private public end; var Form1: TForm1; implementation procedure TForm1.FormCreate( Sender : TObject ); begin // 左 ( タイトル側 )のスクロールバーを消去 StringGrid1.ShowScrollBars := FALSE; // スクロール慣性移動を禁止 StringGrid1.ScrollAnimation := TBehaviorBoolean.False; StringGrid2.ScrollAnimation := TBehaviorBoolean.False; // スクロールバウンスを禁止 StringGrid1.Bounces := TBehaviorBoolean.False; StringGrid2.Bounces := TBehaviorBoolean.False; // スクロール位置が変更になった時のメソッド割り当て StringGrid1.OnViewportPositionChange := ViewportPositionChange1; StringGrid2.OnViewportPositionChange := ViewportPositionChange2; end; procedure TForm1.ViewportPositionChange1( Sender : TObject; const OldPosition, NewPosition : TPointF; const Changed : Boolean ); begin // 左TStringGridを動かしたら右TStringGridを動かす StringGrid2.ViewportPosition := StringGrid1.ViewportPosition; end; procedure TForm1.ViewportPositionChange2( Sender : TObject; const OldPosition, NewPosition : TPointF; const Changed : Boolean ); begin // 右TStringGridを動かしたら左TStringGridを動かす StringGrid1.ViewportPosition := StringGrid2.ViewportPosition; end; スクロール慣性移動やバウンスの有無はお好みで。 左 ( タイトル側 )のセルの色などは StyleBook で変えると良いと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.