[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/04(Fri) 16:12
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
Line(線)のイベント取得
すいません。お願い致します。
フォーム上にLine(線)を引き、その線を「ドラッグ」で
移動しようとした時に、イベントを発生させたいのです。

例えば、フォームの真中あたりに「上から下」に向けて
線が引いてあります。
その「上」の始点部分をドラッグして「左」に持っていくと
その線もそれに合わせて「左」に動いていき、結局「左肩
上がり」の線にしたいのです。
(Officeのオートシェイプの線をドラッグしたのと同様な感じ)

で、マウスを放すと、何かしらのイベントを取得して
メッセージ等を表示したいのです。

これをVBで実施することは可能なのでしょうか?

投稿時間:2005/02/04(Fri) 18:45
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re: Line(線)のイベント取得
ユーザーコントロールを使えば出来そうな予感。

投稿時間:2005/02/04(Fri) 18:50
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re: Line(線)のイベント取得
じゃんぬねっと です。

Line コントロールでやろうとするんじゃなくて、
たとえば、フォームに直接貼っているのならフォーム側のイベントでやれば良いかと。
問題は、ドラッグした位置に Line コントロールがあるかどうかの判断だけですね。

投稿時間:2005/02/04(Fri) 19:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Line(線)のイベント取得(簡単な方法)
フォームにラインコントロールとラベルを貼り付けて下さい。
ラインコントロールの一方にラベルを貼り付け、そのラベルをドラッグする
ことで移動できます。
下記のテストではラインを縦に引きその上部にラベル小さくして配置。

Option Explicit

Private XPos    As Long
Private YPos    As Long

Private Sub Form_Load()
    'OLE ドロップ イベントを発生させます。
    Label1.OLEDropMode = vbOLEDropManual
End Sub

Private Sub Form_DragDrop(Source As Control, _
                                    X As Single, Y As Single)
'フォーム上にドロップした時の補正
    Source.Move X - XPos, Y - YPos
    Line1.X1 = X - XPos
    Line1.Y1 = Y - YPos
End Sub

Private Sub Label1_DragDrop(Source As Control, X As Single, Y As Single)
    '同一コントロール内でドロップした場合の補正
    Source.Move (Label1.Left + X - XPos), (Label1.Top + Y - YPos)
    Line1.X1 = Label1.Left + X - XPos
    Line1.Y1 = Label1.Top + Y - YPos
End Sub

Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'ドラッグ開始位置の保存とドラッグの開始
    YPos = Y
    XPos = X
    Label1.Drag vbBeginDrag
End Sub

投稿時間:2005/02/07(Mon) 21:11
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
Re^2: Line(線)のイベント取得(簡単な方法)
ガッ様、じゃんぬねっと様、花ちゃん様、
ご返答有難う御座います。

花ちゃん様のコードを利用してやってみます。

もう2点程、お聞きしたいのですが、
1.ドラッグ中に「ラベル」は『動いている』感じになって
いますが、「線」を動かしている感じにはならないのでしょうか?
(Office製品のオートシェイプのような感じです)

2.ドラッグ中にマウスの形を変えたいのですが、ドラッグ開始
は、「Label1_MouseMove」でイベントを取っているのですが、
ドラッグ終了のイベントはどのように取るのが基本なのでしょうか?

すいませんが、宜しくお願い致します。

投稿時間:2005/02/07(Mon) 23:25
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Line(線)のイベント取得(簡単な方法)
少しは、自分でヘルプを調べたり、試したりする気になれませんか? 
サンプルを提供しているのですから。
それに、質問しておきながら返信が遅いのはどう言う事でしょうか?
(休みの間に誰かやっておいてくれって事ですか)
回答した人は責任があるから、何度と無く再質問が投稿されてないかチェック
しているのですよ。

> 1.ドラッグ中に「ラベル」は『動いている』感じになって
> いますが、「線」を動かしている感じにはならないのでしょうか?

Private Sub Form_DragOver(Source As Control, X As Single, _
                                    Y As Single, State As Integer)
    Source.Move X - XPos, Y - YPos
    Line1.X1 = X - XPos
    Line1.Y1 = Y - YPos
End Sub


> 2.ドラッグ中にマウスの形を変えたいのですが、ドラッグ開始
> は、「Label1_MouseMove」でイベントを取っているのですが、
Label1_MouseMove イベント って使っていましたっけ。

Private Sub Form_Load()
    'OLE ドロップ イベントを発生させます。
    Label1.OLEDropMode = vbOLEDropManual
    Set Label1.DragIcon = LoadPicture("DRAG1PG.ICO")
End Sub

投稿時間:2005/02/08(Tue) 13:47
投稿者名:ゆーみん
Eメール:
URL :
タイトル:
Re^4: Line(線)のイベント取得(簡単な方法)
> 少しは、自分でヘルプを調べたり、試したりする気になれませんか? 
> サンプルを提供しているのですから。
> それに、質問しておきながら返信が遅いのはどう言う事でしょうか?
> (休みの間に誰かやっておいてくれって事ですか)
皆様方、すいませんでした。また、色々とご教授有難う御座います。

花ちゃん様のコード試してみます。
有難う御座いました。