クラスから描画したPictureBoxを、Formのリサイズに更新させるには


トム  2005-06-21 16:14:17  No: 90554

クラスからクラス内のFormにPictureBoxを描画させようとしています。
(クラス外からのグラフ描画を行いたいため)

Form内で描画関連の関数が完結している場合は、Formのリサイズ時にこれらの関数を呼べばPictureBoxの再描画ができますが、今回のように、クラスからPictureBoxの描画を行っている場合は、Formのリサイズ時にどうやって再描画させればいいかわかりません。どうすればいいか教えてください。お願いします。


ねろ  2005-06-21 17:26:39  No: 90555

開発環境を教えてください。


トム  2005-06-22 05:41:22  No: 90556

VB6.0です。


3−t  2005-06-22 06:00:26  No: 90557

Formリサイズ時にそのクラスの描画メソッドを呼ぶだけでは?
というか、問題がつかみきれてません。


トム  2005-06-23 05:54:00  No: 90558

実は、外部からクラスの関数を使って、グラフの定義(Scaleや軸設定等)を含めて描かせることをしようとしています。このため、グラフのリサイズをした際に、この定義の部分をどうやって呼べばいいのかわかりません。できれば具体的に教えていただけますか?


3−t  2005-06-23 06:15:32  No: 90559

というかやりたいことがハッキリ伝わってこないので具体的に教えようもない。

クラス内のFormって何?
FormにPictureBoxを描画させるってどういうこと?

自分では分かってるんだろうけど、この文章を見た人で分かる人はいるんでしょうか?
自分には無理でした。頭の良い方にまかせます。


3−t  2005-06-23 07:22:12  No: 90560

無理やり質問を下記のように解釈し勝手に回答してみました。

下記のようなクラスを作成し、クラス内で割り当てられたPictureBoxにグラフを
描画しています。

--------------- クラスモジュール(MyClass.cls)ここから
Private mPctBox As PictureBox

Public Property Set MyPic( objPic as PictureBox )
  Set mPctBox = objPic
End Property
Public Property Get MyPic() As PictureBox
  Set MyPic = mPctBox
End Property

Public Sub Draw()
  'mPctBox内の描画処理
End Sub
--------------- クラスモジュールここまで

フォームモジュール内で
  Set objPic = New MyClass
  Set objPic.MyPic = PictureBox1
のようにピクチャーボックスコントロールをMyClassオブジェクトにセットして
PictureBox1のリサイズをフォームモジュール内で行ったとき、MyClassオブジェクト
に再描画させるにはどうすればいいのでしょうか?

回答)
フォームモジュール内でPictureBoxのリサイズを行った後にMyClassのDrawメソッドを呼ぶ。

Drawメソッドが非公開の場合
クラス内でmPictBoxをWithEvents付きで宣言し、mPictBox_Resizeイベントプロシージャ
内で描画処理を行う。


トム  2005-06-23 11:02:43  No: 90561

3−t様  丁寧にご説明いただき、ありがとうございます。
また、私の文章力のない部分をフォローしてご説明いただき、本当に感謝いたします。

さて、私のやりたいことは、ご回答いただいた、WithEvents付きで実現できるのではないかと思っています。このやり方をもう少し詳しく教えていただけますか?すなわち、Witheventsを使って、MyClassにResize時の描画処理をやらせる方法を詳しく教えていただきたいです。よろしくお願いします。


LESIA  2005-06-23 17:51:28  No: 90562

Option Explicit

Private WithEvents mForm As Form

Public Property Set MyForm(objForm As Form)
  Set mForm = objForm
End Property

Public Property Get MyForm() As Form
  Set MyForm = mForm
End Property

Private Sub mForm_Resize()
    'Resize時の描画処理
End Sub

というようなクラスを作り、名前をclsFormにして、
フォームモジュールに、以下のように書けば、
クラス内でFormのイベント処理が出来ます。

Option Explicit

Private objForm As clsForm

Private Sub Form_Load()
    Set objForm = New clsForm
    Set objForm.MyForm = Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set objForm = Nothing
End Sub


トム  2005-06-27 01:05:44  No: 90563

多数ご回答をいただきありがとうございます。

再度、やりたいことを書かせていただきます。
■グラフ描画のためのDLLを作成したい。
■グラフの仕様(グラフ種類、数、体裁etc)は決めず、
  外部から同DLLを操作することでグラフを描画させる。
  (DLLを使用するユーザーが自由に設定できるようにする)
■上記の仕様で、グラフウインドウのリサイズ時に再描画できるようにする。

上記がやりたいことですが、つまるところ、DLLを操作する側で、
リサイズ時の信号をグラフウインドウから受け取る方法がわかれば
上記の仕様が実現できるとわかりました。この方法を教えてください。
よろしくお願いします。


3−t  2005-06-27 01:53:31  No: 90564

LESIAさんのコードから何もヒントが得られませんでしたか?
せっかく回答してもらってるんだからちょっとは考えてみたら?


トム  2005-06-30 12:39:50  No: 90565

LESIAさん、3-tさん  回答ありがとうございます。
一度試してみます。わからないときは、またよろしくお願いします。


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

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






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