トップ回答者
VB6.0でのPictureBoxのコピー

質問
-
VB6.0でピクチャーボックスをコピーするにはどうすればいいでしょうか
メモリ上にPictureBoxの配列を確保し、画面上のPictureBoxを保存する関数を作成したのですが
エラーになってしまいます。
画面上からメモリ上のPictureBoxにコピーする場合は何か特殊な宣言が必要なのでしょうか。
'構造体宣言
Private Type TFListRec
pF As PictureBox 'ピクチャーボックス
sFnm As String 'ファイル名
End Type
Private LIST_PIC(10) As TFListRec
'イメージを取得(するはずの関数)
Public Sub GetPicture(iIndex As Integer, ByRef pImg As PictureBox)
pImg = LIST_PIC(iIndex).pF
End Sub
'イメージをワークメモリに追加(するはずの関数)
Public Function AddPicture(pImg As PictureBox, strFullPath As String) As Boolean
Dim strFPath() As String
Dim sFnm As String
AddPicture = True
g_strErr = ""
On Error GoTo END_ERR:
'ファイル名の取得
strFPath = Split(strFullPath, "\")
sFnm = strFPath(UBound(strFPath))
LIST_PIC(1).sFnm = sFnm 'ファイル名
LIST_PIC(1).pF = pImg.Image 'ピクチャーの保存(ここでエラー)
LIST_PIC(1).pF.Picture = pImg.Image 'ピクチャーの保存(ここでエラー)
LIST_PIC(1).pF = pImg.Picture 'ピクチャーの保存(ここでエラー)
LIST_PIC(1).pF.Image = pImg 'ピクチャーの保存(ここでエラー)
On Error GoTo 0
Exit Function
END_ERR:
'失敗
Dim er AS string
er = Err.Description 'オブジェクト変数または With ブロック変数が設定されていません。
AddPicture = False
End Function
回答
-
いちろう さんからの引用 Set g_Tpic(1).pF = New PictureBox
「newキーワードの使用法が不正です」失礼しました。 なんとなく気にはしてましたが試さずに書いてしまいました。
#なんかVB6は遠い昔になってしまった。。。
インスタンスを作りたいなら、Me.Controls.Add メソッドでインスタンス作成と追加をする必要があります。
その上で(n).pFに設定してください。
Pictureプロパティのみでよいならインスタンス云々は無しにして、
pF の型をStdPictureとして、PictureBoxを保存するのではなく、Picture プロパティを保存してみてください。
-
構造体メンバーのpFのインスタンス用のコントロール配列オブジェクトをフォームに準備します
たとえば Picture2(0) といった具合の物です
ピクチャーボックスをフォームなどに貼り付けて Indexプロパティを0に、VisibleプロパティをFalseに設定します
Form_Loadイベントなどで
Code Snippetdim n as integer
for n=0 to 10
if n > 0 then
' インデックス0は登録済みなので Loadしない
Load Picture2(n)
end if
set List_PIC(n).pf = Picture2(n)
next
といった具合でインスタンスを 構造体のメンバーに代入しておきます
データの設定関数では
LIST_PIC(n).pF.Picture = pImg.Image
のみでいいと思います
すべての返信
-
いちろう さんからの引用 Set g_Tpic(1).pF = New PictureBox
「newキーワードの使用法が不正です」失礼しました。 なんとなく気にはしてましたが試さずに書いてしまいました。
#なんかVB6は遠い昔になってしまった。。。
インスタンスを作りたいなら、Me.Controls.Add メソッドでインスタンス作成と追加をする必要があります。
その上で(n).pFに設定してください。
Pictureプロパティのみでよいならインスタンス云々は無しにして、
pF の型をStdPictureとして、PictureBoxを保存するのではなく、Picture プロパティを保存してみてください。
-
構造体メンバーのpFのインスタンス用のコントロール配列オブジェクトをフォームに準備します
たとえば Picture2(0) といった具合の物です
ピクチャーボックスをフォームなどに貼り付けて Indexプロパティを0に、VisibleプロパティをFalseに設定します
Form_Loadイベントなどで
Code Snippetdim n as integer
for n=0 to 10
if n > 0 then
' インデックス0は登録済みなので Loadしない
Load Picture2(n)
end if
set List_PIC(n).pf = Picture2(n)
next
といった具合でインスタンスを 構造体のメンバーに代入しておきます
データの設定関数では
LIST_PIC(n).pF.Picture = pImg.Image
のみでいいと思います
-
結論から言うとだめでした
保存するのはPictureプロパティのみで良いので試してみたのですが・・・
構造体宣言
Private Type TFListRec
pF As StdPicture 'ピクチャー
sFnm As String 'ファイル名
End Type
Private LIST_PIC(10) As TFListRec
と宣言し直し
Set LIST_PIC(1).pF = New StdPicture
LIST_PIC(1).pF = pImg.Picture 'ピクチャーの保存(プロパティの使い方が不正です)
とすると、
プロパティの使い方が不正です
というエラーになります。
Set LIST_PIC(1).pF = New StdPicture
を無しにするとやはり
'オブジェクト変数または With ブロック変数が設定されていません。
とやはりエラーになってしまいます。
色々ありがとうございます。
StdPictureなど今まで試していないことも教えて頂いたので
もう一度ちょっと整理して、また書き込んでみます。 -
こんにちは。中川俊輔 です。
まどかさん、redfox63さん、回答ありがとうございます。
いちろうさん、フォーラムのご利用ありがとうございます。
その後いかがでしょうか?
有用な情報と思われたため、まどかさん、redfox63さんの回答へ回答済みチェックをつけさせていただきました。
追加の質問等ありましたら、是非投稿してください!
回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。いちろうさんはチェックを解除することもできますので、ご確認ください。
それでは!