tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルこんなことできるのかな?
記事No11535
投稿日: 2008/02/26(Tue) 13:40
投稿者だめおやじ
 亀の歩みでVb進歩しており感謝しております。
 次のことを考えておりますが、可能なのかも解りません。もし、可能であればご教示願います。
 ピクチャボックスにピクチャボックス(2)をセットして、EXEファイルで実行後
マウスでピクチャボックス(2)をドラッグして任意の場所に移動することが可能で
しょうか。

[ツリー表示へ]
タイトルRe: こんなことできるのかな?
記事No11538
投稿日: 2008/02/26(Tue) 14:00
投稿者K.J.K.
ドラッグした結果を任意の場所で検出し、そこにPictureBoxを再配置するコードを
書けばいいのでは。

それがFormの外に出て、単独のWindowとしても成り立つようにしたいのであれば、
更にそういうコードを書くようにすることになるでしょう。

[ツリー表示へ]
タイトルRe: こんなことできるのかな?
記事No11539
投稿日: 2008/02/26(Tue) 14:20
投稿者花ちゃん
下記と同様では。
http://hanatyan.sakura.ne.jp/vbhlp/gra_image.htm

[ツリー表示へ]
タイトルRe^2: こんなことできるのかな?
記事No11540
投稿日: 2008/02/26(Tue) 14:38
投稿者だめおやじ
>  下記と同様では。
>  http://hanatyan.sakura.ne.jp/vbhlp/gra_image.htm
< 早速のご教授ありがとうございます。コードを組み込ませていただきます。
< ワード検索が下手でお手数かけました。取り急ぎお礼まで。

[ツリー表示へ]
タイトルRe^3: こんなことできるのかな?
記事No11554
投稿日: 2008/02/27(Wed) 15:49
投稿者だめおやじ
> >  下記と同様では。
> >  http://hanatyan.sakura.ne.jp/vbhlp/gra_image.htm
>  おかげさまで解決できました。ありがとうございました。

[ツリー表示へ]
タイトルRe^4: こんなことできるのかな?
記事No11593
投稿日: 2008/03/01(Sat) 14:26
投稿者だめおやじ
> 花ちゃん様へ指導いただき下記より解決できましたが、Picture1にPicture2を貼付
 てPicture1の範囲でPicture2を移動したいのですが解決できません。追加コ−ドは
 コ−ド内に記載してあります。ご教授願います。
 Picture1の移動は正常に作動しています。

> Picture2は「x、y」の取得が悪いのかPicture1の範囲を超えてドラッグされます

      記

>  http://hanatyan.sakura.ne.jp/vbhlp/gra_image.htm

 コード

Dim lngImageHeight As Long
Dim lngImageWidth  As Long
'***************追加分************
Dim lngPicture1Height As Long 
Dim lngPicture1Width  As Long 
Dim lngPicture2Height As Long 
Dim lngPicture2Width  As Long 
'***************ここまで************
Dim lngX As Long
Dim lngY As Long

Private Sub Command10_Click() '追加分
If lngPictureHeight = 0 Then                '初めてクリックした時
    lngPictureHeight = Picture2.Height   '変数に元の画像サイズを記録する
    lngPictureWidth = Picture2.Width
End If
   ' Picture1.Stretch = True
     Picture2.Height = lngPictureHeight
     Picture2.Width = lngPictureWidth
    
End Sub

Private Sub Command3_Click()
'画像の読込
If lngImageHeight = 0 Then           '初めてクリックした時
    lngImageHeight = Image1.Height   '変数に元の画像サイズを記録する
    lngImageWidth = Image1.Width
End If
    Image1.Stretch = True
    Image1.Height = lngImageHeight
    Image1.Width = lngImageWidth
  Set Image1.Picture = LoadPicture("C:\還暦.jpg") 
End Sub

Private Sub Command1_Click()
    '拡大のMAXの設定
    If lngImageHeight * 2 <= Image1.Height Then Exit Sub
    'イメージのサイズが変更できるように
    Image1.Stretch = True
    'クリックの都度10%づつ拡大する
    Image1.Height = Image1.Height * 1.1
    Image1.Width = Image1.Width * 1.1
End Sub

Private Sub Command2_Click()
    '縮小のMAXの設定
    If lngImageHeight * 0.3 >= Image1.Height Then Exit Sub
    'イメージのサイズが変更できるように
    Image1.Stretch = True
    'クリックの都度10%づつ縮小する
    Image1.Height = Image1.Height * 0.9
    Image1.Width = Image1.Width * 0.9
End Sub

Private Sub Command4_Click()
    Image1.Move 50, 50
End Sub
Private Sub Image1_MouseDown(Button As Integer, Shift _
                                 As Integer, x As Single, y As Single)
    lngX = x                 '現在の表示位置を取得
    lngY = y
    Image1.Drag vbBeginDrag
End Sub
'***************追加分************

Private Sub Picture1_MouseDown(Button As Integer, Shift _
                                 As Integer, x As Single, y As Single)
    lngX = x
    lngY = y
    Picture1.Drag vbBeginDrag
     Set Picture1.Picture = LoadPicture("C:\還暦.jpg")
End Sub
Private Sub Picture2_MouseDown(Button As Integer, Shift _
                                 As Integer, x As Single, y As Single)
    lngX = x
    lngY = y
    Picture2.Drag vbBeginDrag
     Set Picture2.Picture = LoadPicture("C:\還暦.jpg")
End Sub
Private Sub Picture1_DragDrop(Source As Control, x As Single, y As Single)
    Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
End Sub
Private Sub Picture2_DragDrop(Source As Control, x As Single, y As Single)
    Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
End Sub
'***************ここまで************
Private Sub Form_DragDrop(Source As Control, x As Single, y As Single)
    'ドロップ位置がフォーム上の場合
    Source.Move x - lngX, y - lngY
End Sub

Private Sub Command6_Click()
    'クリックする度に500Twip 上に移動
    Image1.Move (Image1.Left), (Image1.Top - 500)
End Sub

Private Sub Command7_Click()
    'クリックする度に500Twip 下に移動
    Image1.Move (Image1.Left), (Image1.Top + 500)
End Sub

Private Sub Command8_Click()
    'クリックする度に500Twip 左に移動
    Image1.Move (Image1.Left - 500), (Image1.Top)
End Sub

Private Sub Command9_Click()
    'クリックする度に500Twip 右に移動
    Image1.Move (Image1.Left + 500), (Image1.Top)
End Sub
Private Sub Image1_DragDrop(Source As Control, x As Single, y As Single)
    'ドロップ位置に表示
    Source.Move (Image1.Left + x - lngX), (Image1.Top + y - lngY)
End Sub

[ツリー表示へ]
タイトルRe^5: こんなことできるのかな?
記事No11594
投稿日: 2008/03/01(Sat) 14:59
投稿者
>  Picture1の範囲でPicture2を移動したいのですが解決できません。

Picture2はPicture1の中に配置されているんですよね?
例えばデザイン画面でPicture1の位置だけを動かすとPicture2も一緒に動く状態です。

>  Picture2は「x、y」の取得が悪いのかPicture1の範囲を超えてドラッグされます

範囲を超えない仕組みは自分で作るしかないような。
Picture2の座標はPicture1上(左上が原点)での座標になるので
上方向と左方向はマイナス値になったら0にしてあげることで
Picture1の見えている部分からはみ出さなくなります。
下方向と右方向はPicture1の表示範囲(ScaleHeight、ScaleWidth)と
Picture2の座標(Top、Left)と大きさ(Height、Width)で計算して
範囲内に収まるようにしてあげるといいでしょう。

[ツリー表示へ]
タイトルRe^6: こんなことできるのかな?
記事No11598
投稿日: 2008/03/01(Sat) 21:10
投稿者だめおやじ
< 琴さんへ早速の返事ありがとうございます。
>> Picture2はPicture1の中に配置されているんですよね?
< そのとおりです。
> >例えばデザイン画面でPicture1の位置だけを動かすとPicture2も一緒に動く状態です。
< そのとりです
> > 範囲を超えない仕組みは自分で作るしかないような。
> >Picture2の座標はPicture1上(左上が原点)での座標になるので
> >上方向と左方向はマイナス値になったら0にしてあげることで
> >Picture1の見えている部分からはみ出さなくなります
< このようなコードを書きましたがドラッグした位置には表示されませんでした。
 何か悪いんでしょうね。
If Picture1.Left + x - lngX < 0 Then
x = 0
    Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
End If
If Picture1.Top + y - lngY < 0 Then
y = 0
   Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
End If
x = 0
y = 0
If Picture1.Left + x - lngX < 0 Or Picture1.Top + y - lngY < 0 Then
    Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
End If


< これから先のアドバイスは、未知の分野でけんとうもつきませんせした。頑張ってみます。
> 下方向と右方向はPicture1の表示範囲(ScaleHeight、ScaleWidth)と
> Picture2の座標(Top、Left)と大きさ(Height、Width)で計算して
> 範囲内に収まるようにしてあげるといいでしょう。
< 右お礼まで。

[ツリー表示へ]
タイトルRe^7: こんなことできるのかな?
記事No11607
投稿日: 2008/03/03(Mon) 09:15
投稿者
> < このようなコードを書きましたがドラッグした位置には表示されませんでした。
>  何か悪いんでしょうね。
> If Picture1.Left + x - lngX < 0 Then
> x = 0
>     Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
> End If
> If Picture1.Top + y - lngY < 0 Then
> y = 0
>    Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
> End If
> x = 0
> y = 0
> If Picture1.Left + x - lngX < 0 Or Picture1.Top + y - lngY < 0 Then
>     Source.Move (Picture1.Left + x - lngX), (Picture1.Top + y - lngY)
> End If

何か勘違いをされてるような…。
試しにPicture2のTopとLeftをデザイン画面で0にしてみてください。
恐らくPicture1内の左上に配置されているはずです。

Picture2の位置(TopとLeft)は、Picture1内での位置(Form内ではない)なので
Picture2の位置を算出するときにはPicture1のTopやLeftは使わないはずですよ。

[ツリー表示へ]