[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/12/05(Tue) 17:02
投稿者名:Neo
Eメール:
URL :
タイトル:
既存のコントロールにメソッドを追加
開発環境 Windows2000 SP4 / VB5.0 SP3

既存のコントロール(今回の場合はBOCのSpread3.0)に
独自のメソッドを追加する方法がわからずに困っています。

クラスファイル(Class1)を追加して
Implements vaSpread と記述してみたのですが、
「Implements のインターフェースが不正です」と
エラーが表示されます。

ヘルプを調べてみたところ、

「インターフェイスまたはクラスをインプリメントする場合、
 関連するすべてのパブリック (Public) プロシージャを含める必要があります。」

と記述してありました。
Spread のメソッドやプロパティを(Class1)に全部記述した上で
更に今回自分が追加したいメソッドを定義しろ ということなのでしょうか。

もしくは、もっと簡単に実現する方法があるのでしょうか?

投稿時間:2006/12/05(Tue) 18:21
投稿者名:大吉末吉
Eメール:
URL :
タイトル:
Re: 既存のコントロールにメソッドを追加
> クラスファイル(Class1)を追加して
> Implements vaSpread と記述してみたのですが、
> 「Implements のインターフェースが不正です」と
> エラーが表示されます。
> Spread のメソッドやプロパティを(Class1)に全部記述した上で
> 更に今回自分が追加したいメソッドを定義しろ ということなのでしょうか。

そうですね。
「Implements」(実装)とはそういうものです。


> 開発環境 Windows2000 SP4 / VB5.0 SP3
>
> 既存のコントロール(今回の場合はBOCのSpread3.0)に
> 独自のメソッドを追加する方法がわからずに困っています。

これは、「継承」でしょうけど・・・
VB5やVB6では、「継承」はできませんから・・・


後は、ユーザコントロールを作成して、内在コントロールにするとか。
#それほど、手間が省けるわけではありませんが、
#既存プロシージャを全部スルーする様に作れば、少しは楽でしょう。

尤も、「BOCのSpread3.0」のライセンスが、
「内在コントロールとしての使用」を許諾しているかは分かりません。
#直感、許諾されていないような気が・・・


BOC(現GrapeCity社)に問い合わせてください。
#ちなみに、確認しないで勝手にやったら駄目ですよ。ライセンス違反になるかも知れませんから。

投稿時間:2006/12/05(Tue) 19:11
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 既存のコントロールにメソッドを追加
> 独自のメソッドを追加する方法がわからずに困っています。

UserControl にラッピングするという方法がありますが、あまりお奨めはできません。
VB6 には、実装継承がサポートされていないからです。(インターフェイス継承は可能)


なので、コントロール自体にメソッドを直接追加するのではなく、
  Public Sub Anything(ByVal x As 何とかコントロール)
のように、そのコントロールのインスタンスを受け取って処理するようなクラス
(あるいはモジュール)を作るというのは如何でしょう?

もし、Decoratorパターン(?) っぽい作りにするなら、こんな手法があります。
http://web.archive.org/web/20041012230232/www.gj.il24.net/~nakasima/vb/tech/excontrol/index.htm


> クラスファイル(Class1)を追加して
> Implements vaSpread と記述してみたのですが、

Implements は、インターフェイスのみを継承しますので、それぞれのメソッドの処理実装は、
元のオブジェクトに委譲するか、あるいは自力実装する必要があります。


> 「インターフェイスまたはクラスをインプリメントする場合、
>  関連するすべてのパブリック (Public) プロシージャを含める必要があります。」

コードウィンドウ右上のコンボボックスを選択すると、指定したインターフェイスが持つ
Public メンバの定義が、コードウィンドウに展開されます。それを繰り返して、
そのインターフェイスが持つすべての Public メンバを展開してください。

あとは、展開された各プロシージャに、それぞれのメソッドに応じた実装を書くことになる、と。

投稿時間:2006/12/06(Wed) 10:49
投稿者名:Neo
Eメール:
URL :
タイトル:
Re^2: 既存のコントロールにメソッドを追加
大吉末吉さん、魔界の仮面弁士さん レス有難う御座います。

Decoratorって面白いですね。
今回は使えませんが隙があったら使ってみようと思います。

技術系の掲示板で、よく見かけますが
俺も自分の実現したい事を具体的に書けていませんでした。

まず、やりたい事というか、やらなければいけない事は

・MSFlexGridで作成してある画面があります。
・セルの数がMax値(35000?)を超えた為、Spreadに置き換えます。
・MSFlexGridとSpreadで、PropertyやMethodの名前が違う箇所がある為、
 改修する必要があるのですが、ソースが膨大な為、正直乗り気がしません。
 ※MSFlexGridならTextMatrixで読み書きするけどSpreadならSetTextとGetTextを使う等

そこで、SpreadにTextMatrixってメソッドを追加すればソースは触らなくて済むのではないか
と思って足掻いていたのです。

投稿時間:2006/12/06(Wed) 11:00
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 既存のコントロールにメソッドを追加
> ・MSFlexGridで作成してある画面があります。
> ・セルの数がMax値(35000?)を超えた為、Spreadに置き換えます。

MSFlexGrid を、MSHFlexGrid に変更してみてはいかがでしょう?
セル数制限もありませんし、プロパティやメソッドの互換性も高いですよ。