この前質問させて頂いたものです。
この前はごめんなさい。
またSetParentで解らないことがあって教えてください。
親フォームにピクチャーボックスを貼っています。
そのピクチャーボックスに子フォームをSetParentで表示しています。
親フォーム:form1
ピクチャーボックス:pic1
子フォーム:form2
private sub loadform()
dim lngret as long
load form2
with form2
.width=form1.pic1.scalewidth
.height=form1.pic1.scaleheight
.left=0
.top=0
lngret=setparent(.hwnd,form1.pic1.hwnd)
if lngret<>0 then
.visible=true
.move 0, 0, form1.pic1.scalewidth, form1.pic1.scaleheight
end with
end sub
private sub unloadform()
if not form2 is nothing then
unload form2
set form2=nothing
err.clear
end if
end sub
これで子フォームをロードしたりアンロードしたりしています。
親フォームロード時に子フォームをロードすると問題なく、left=0、top=0に表示されるんですが、子フォームをアンロードして再度ロードするとき、left=2040、top=8865に表示されて子フォームが見えなくなります。
left=0、top=0にmoveしているんですが、位置が指定どおりになりません。
解決法ないでしょうか?
vb6(sp6)、win7です。
宜しくお願いします。
ごめんなさい。
end ifが抜けていました。
with form2
.width=form1.pic1.scalewidth
.height=form1.pic1.scaleheight
.left=0
.top=0
lngret=setparent(.hwnd,form1.pic1.hwnd)
if lngret<>0 then
.visible=true
.move 0, 0, form1.pic1.scalewidth, form1.pic1.scaleheight
end if
end with
end sub
APIの
ClientToScreen
ScreenToClient
どっちか忘れましたけど座標変換して.moveしてみては?
いつもどっちか分からなくなりますが多分それではないかと。
ありがとうございます。
いろいろ調べていたんですが、ClientToScreenとScreenToClientどちらもあって。。。
すみません。質問させてください。
moveメソッドは、スクリーン座標にして使うのでしょうか?
サンプルとなるサイト等があれば教えてもらえないですか?
すみません。よろしくお願いします。
申し訳ないです。
SetParentの後に
MoveWindowかSetWindowPos APIを子のダイアログのハンドルに
対して使います。
その時に座標変換が必要だったかと思います。
VBのプロパティは多分使いません。ごめんなさい。
月曜でよければ確認ます。
>MoveWindowかSetWindowPos APIを子のダイアログのハンドルに
MoveWindowかSetWindowPos APIを親のダイアログのハンドルに
>MoveWindowかSetWindowPos APIを親のダイアログのハンドルに
MoveWindowかSetWindowPos APIを子のダイアログのハンドルに
ばかん。見なかったことにして。
管理人さん。気が付いたら消しといてください。
むにさん、ありがとうございます。
何か質問ばかりですみません。
本当に困っています。
>月曜でよければ確認ます。
よろしくお願いします。
まずはごめんなさい。環境を勘違いしていました。
XPでは同様の現象は再現しませんでした。何回やっても
きっちり子になりました。
提示のソースでは私の環境で再現しなかったのですけど
親ダイアログを左上端に寄せた状態だとどうなります?
また、例えばXPで作成したEXEで動かしてみるとか。
SetParent失敗してたりしてないですか?
ありがとうございます。
>また、例えばXPで作成したEXEで動かしてみるとか。
残念ながらXPの環境がないのでXPでEXEを作成できません。
>親ダイアログを左上端に寄せた状態だとどうなります?
親は、親フォームのピクチャーボックスなので。
ちなみにイメージとして、イミディエイトウィンドウみたいな感じです。
>SetParent失敗してたりしてないですか?
エラーは出ていません。
起動するとき、同じコードを使って子フォームを表示していますが、そのときはキレイに表示されます。
教えてください。
手順として、
座標変換してMoveWindowかSetWindowPosを使うで良いのでしょうか?
座標変換は、ClientToScreenとScreenToClientどちらを使うのでしょうか?
お騒がせしてすみませんが、お願いします。
解決しました。
ごめんなさい。
親フォームのピクチャーボックスが非表示になっていました。
子フォームをロードした後ピクチャーボックスを表示していました。
お騒がせしました。