ちょっと無理難題を押しつけられています。
TStringGridを使った表のアプリケーションです。オプションにはGoRowselectを設定して行全体を選択するようにしています。ここで、セルの任意の列を選択(行1,行3,行4…行nと言うように)して、それらの行を削除するとか、選択されている行だけの、ある列の内容を書き換えたいと言うのです。goRangeSelectでは気に入らず、Microsoft Execlでできるんだからできるはずファ、と注文をつけられて困っています。解法があるでしょうか?
ローテクですが、列数+1のセルに選択のフラグを立てればどうですか?
編集 削除> 解法があるでしょうか?
「見栄えも操作もExcelが欲しいんでしょう?
こういうコンポーネントを使えばできるようになるかもしれません。」
と、フリーではないコンポーネントを見せてやってください。
TMS Grid Pack
http://www.tmssoftware.com/
ExpressSpreadSheet
http://www.devexpress.com/Products/VCL/ExSpreadSheet/
> Microsoft Execlでできるんだからできるはず
「なるほど、バグの量も同じくらい仕込んでおいていいんですね」と、切り返しておくとか?
> 解法があるでしょうか?
解法はあるでしょうが過去にも同様の質問の回答からすると果汁10%さんが
示しておられる様に有料のコンポーネントを使用するか。
Execl風にするのでしたら列数分のフラグ格納用の配列を用意して
1 列の0列目をマウスで押された時のShift,Ctrlの状態を確認
2 GoRowselectをTrueに設定
3 マウスが離された時のShift,Ctrlの状態を確認
4 GoRowselectをFalseに設定
5 1、3の状態を判断してフラグ(選択されている行かどうか)を設定
6 独自に選択された行をフラグを基に着色描画する
と言うような事をしないといけないと思いますのである程度技量がないと
出来ないでしょう。
ちなみに私もこういう動作を自分のプログラムでやりたいですが、まだ
実行に移してません、これでいいのか判りませんが参考までに。
HOtaさんの方法が簡単だと思います。
皆さんありがとうございました。ったく、シロートさんの発送には参りますね。かといって、ExcelでできるものがDelphiではできない、と言うのはDelphianとしては悔しいし…
まずは果汁10%さんの言い回しを使って、作れるけどバグの可能性が高まりますぜ、と脅しながらHOtaさんの解答を元にやってみおることにします。とりあえず結果が出てから解決にチェックしたいと思います。
ありがとうございました。
HOtaさんの方法で割と簡単にできました。とはいえ、コーディングに6時間ほどかかりましたが…
皆さんありがとうございました。