基本的過ぎて申し訳ありません。教えてください。(先日の続きなのですが、)
StringGridからOCXを作成しようとしているのですが、DrawCellイベントを
追加する際タイプライブラリからパラメータを設定したいのですがTRect型と
TGridDrawState型が選択出来ず上手く行きません。
ほかの設定方法があるのでしょうか?
ちなみにDel5のEnterpriseを使っています。
TRectは、例えばTxRectとして、Recordを追加して作れます。
TGridDrawStateは、定数で作っておいて、フィールドの型はlong型にするなどで回避すればよいと思います。
たぶん、Enumで定義すると2つ以上の組み合わせができません。3つの総組み合わせ分Enum定数を用意すれば問題は解決できますが。
返信ありがとうございます。早速レコードとEnumを追加してみたのですが
〜Implのページにおいて、
1行目 procedure TProgresGrid.DrawCellEvent(Sender: TObject; ACol, ARow: Integer;
2行目 Rect: TRect; State: TGridDrawState);
3行目 begin
4行目 if FEvents <> nil then FEvents.OnDrawCell(ACol,ARow,Rect,State);
5行目 end;
となっているところの4行目で「TOleEnumとTGridDrawStateには互換性がありません」の
コンパイルエラーが出てしまいます。また同様に「OleVariantとTRectには互換性がありません」
とも出てしまうのですが、何か根本的な間違いをしている(←勿論私が)ようなのですがどうして
こうなってしまうか教えていただけませんか?
OnDrawCellの引数にあわせて、別途変数を用意して渡せばよいと思います。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=39#0277.txt
を参考にすると、集合型は数値に表せます。
TGridDrawState = set of (gdSelected, gdFocused, gdFixed);
なので、
gdSelectedが1,gdFocusedが2,gdFixedが4だと思います。
# 未確認です
OnDrawCellのStateを、longにして、数値を渡すようにしてみてはどうですか。
また試していないのでうまくいくかわかりません。
いつもご指導ありがとうございます。
助言いただいた方法を試してみたのですが、受け取ったStateをintegerへ変換することが
上手く行きませんでした。(gdSelected,gdFocused,gdFixedは上手くいったのですが、、)
ただ、結局仕様変更があり、OCXでなくコンポーネントを作成することになりました。折角いろいろ
助言いただいたのに申し訳ないです。納期がありますのでこの件についてはここまでにさせて頂いて、
次の質問をまた挙げさせていただきました。よろしくお願いします(←ズーズーしくてごめんなさい)
念のため[解決]にはしていません(他にみられている方のために)
ツイート | ![]() |