StringGridのタイプライブラリの使い方


TUU  2003-03-18 23:06:44  No: 3168

基本的過ぎて申し訳ありません。教えてください。(先日の続きなのですが、)
StringGridからOCXを作成しようとしているのですが、DrawCellイベントを
追加する際タイプライブラリからパラメータを設定したいのですがTRect型と
TGridDrawState型が選択出来ず上手く行きません。
ほかの設定方法があるのでしょうか?
ちなみにDel5のEnterpriseを使っています。


にしの  2003-03-18 23:49:23  No: 3169

TRectは、例えばTxRectとして、Recordを追加して作れます。

TGridDrawStateは、定数で作っておいて、フィールドの型はlong型にするなどで回避すればよいと思います。
たぶん、Enumで定義すると2つ以上の組み合わせができません。3つの総組み合わせ分Enum定数を用意すれば問題は解決できますが。


TUU  2003-03-19 00:44:50  No: 3170

返信ありがとうございます。早速レコードと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には互換性がありません」
とも出てしまうのですが、何か根本的な間違いをしている(←勿論私が)ようなのですがどうして
こうなってしまうか教えていただけませんか?


にしの  2003-03-19 02:55:51  No: 3171

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にして、数値を渡すようにしてみてはどうですか。
また試していないのでうまくいくかわかりません。


TUU  2003-03-19 23:31:50  No: 3172

いつもご指導ありがとうございます。
助言いただいた方法を試してみたのですが、受け取ったStateをintegerへ変換することが
上手く行きませんでした。(gdSelected,gdFocused,gdFixedは上手くいったのですが、、)

ただ、結局仕様変更があり、OCXでなくコンポーネントを作成することになりました。折角いろいろ
助言いただいたのに申し訳ないです。納期がありますのでこの件についてはここまでにさせて頂いて、
次の質問をまた挙げさせていただきました。よろしくお願いします(←ズーズーしくてごめんなさい)
念のため[解決]にはしていません(他にみられている方のために)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加