アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんかいVBを初めて扱っています。

マウスのドラッグで範囲を選択し画像を取得してPictureBox2 に表示
ということをVB6で作成しようとしています。

参考になりそうなサイトは見つけたのですが、
http://hanatyan.sakura.ne.jp/dotnet/zu06.htm
VBのバージョンが違うのでコンパイルは通りません。

関数の名前が変わっているから出来ないのか、
同じ機能は無いから違う方法を取らなければいけないのか?
わからないことだらけで、ハマっています。

もし、何でも良いのでご存知の方がいらっしゃいましたら、
何卒、ご教授宜しくお願い致します。

A 回答 (2件)

課題か何かですか?


選択範囲を表示するところだけですけど…。
参考にして画像を取得する部分と表示する部分はご自分で考えてください。

Formを1つ作ってそのフォームにPictureBoxを一つ貼り付けてください。

Option Explicit
Dim sPosX As Single
Dim sPosY As Single
Dim ePosX As Single
Dim ePosY As Single

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (Button And vbLeftButton) <> 0 Then
sPosX = X
sPosY = Y
ePosX = X
ePosY = Y
End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (Button And vbLeftButton) <> 0 Then
Picture1.DrawStyle = 2
Picture1.Cls
Picture1.Line (sPosX, sPosY)-(ePosX, ePosY), , B
ePosX = X
ePosY = Y
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (Button And vbLeftButton) <> 0 Then
Picture1.DrawStyle = 0
Picture1.Cls
Picture1.Line (sPosX, sPosY)-(ePosX, ePosY), , B
End If
End Sub

この回答への補足

ありがとうございました。
対応は完了し、画像が消えずに枠を表示することが出来ました。

補足日時:2008/06/04 15:12
    • good
    • 0
この回答へのお礼

参考意見ありがとうございます。
お恥ずかしいのですが、課題ではなく仕事です。
範囲指定の枠が表示出来ました!

しかし、範囲指定するために画像の中をクリックすると
画像が消えてしまいます。
現在対応中です。

お礼日時:2008/06/04 11:22

VB6だけでやろうとすると結構大変です



というのも VB6には画像のブロック転送の機能がありません
したがってピクチャーボックスの画素をGetPixel/SetPixelをつかってループで処理するといった方法をとらないといけにからです

andy_kun氏のルーチンを参考にして 指示されて矩形をピクセル単位でアクセスしましょう
通常VB6で扱うグラフィックスの単位は TWIPです
これをPixel単位にするにはScreen.TwipsPerPiexlX/Screen.TwipsPerPiexlYなどから算出します

nPosX = sPosX / Screen.TwipsPerPiexlX
といった具合です

別の方法として ピクチャーボックスのScaleModeを3のvbPixelsにしておくとMouseMove/MouseDown/MouseUpなどで扱うX/Yはピクセル単位になります

WinAPIのScreenToClient/ClientToScreen/BitPltなどを使うと画像のブロック転送が可能です

また転送先のピクチャーボックスのAutoRedrawプロパティをTrueにしておくことも大切です

この回答への補足

BitPltを使用したのですが、期待通りのブロック転送にはなりませんでした。
ScreenToClient/ClientToScreenは調べているのですが、
使い方が良くわからず、試せていません。

宜しければご教授願います。
宜しくお願い致します。

補足日時:2008/06/04 16:51
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
VB6だと大変なんですかぁ・・・。

現在、andy_kun氏のルーチンを参考に範囲指定の対応中です。
その後、redfox63氏の回答を参考に完成させたいと思います。

お礼日時:2008/06/04 11:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!