学校の課題の為VB6.0でマウスを使用したプログラムを作成しているのですが、
MouseDownイベントとMouseMoveイベントで解らないことがあるので、
知っているかた、お願いします。

マウスの右ボタンと左ボタンの区別をつけるにはどうしたらいいのでしょうか?
例えば「左の時は描画し、右の時は描画しない」と言う感じで…

わからなくて困っています。ぜひ、お願いします。

A 回答 (2件)

マウスイベントの引数Buttonにボタンの種類の情報が入っています。


これで良かったと思います。

Select Case Button
Case vbLeftButton
'左ボタン処理
Case vbRightButton
'右ボタン処理
Case vbMiddleButton
'中ボタン処理
End Select
    • good
    • 0
この回答へのお礼

大変、参考になりました。月曜日の提出に間に合いそうです。
どうも、ありがとうございました。

お礼日時:2001/02/18 00:04

補足を。


MouseDown の際は qwerty 様の回答どおりなのですが、 MouseMove の際には複数のボタンが押されている場合がありますので、それを考慮する必要があるなら、考慮しましょう。
たとえば、
If Button and vbLeftButton Then
で、左ボタンが押されている状態
If Button and vbRightButton Then
で、右ボタンが押されている状態
で、
If Button and (vbLeftButton or vbRightButton) Then
で、左右のボタンが押されている状態
になります。

参考URL:http://www.asia.microsoft.com/japan/developer/li …
    • good
    • 0
この回答へのお礼

回答ありがとうございました。参考にさせて頂きます。

お礼日時:2001/02/18 00:05

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qイベントevt?evt.target:event.srcElement;の意味合い

以下の理解で合っているのでしょうか?
よくイベントの取得で

エレメント.onclick = function(evt){
var e = evt?evt.target:event.srcElement;
}
でeにイベントオブジェクトの発生元要素をセットしているのを見かけますが、
これは、ブラウザーの違いの吸収なのでしょうか?

firefoxでは、イベントハンドラー関数にイベントオブジェクトが渡されるので、渡されたイベントオブジェクトよりevt.targetで発生元要素をセットし、一方IEでは、eventという名前のオブジェクトが存在している(?)ので、イベントハンドラー関数にイベントオブジェクトが渡されず、event.srcElementで発生元要素をセットする。
 ※Opera、Safariは何でも良い

IEの場合、後から、イベントが追加されたらeventオブジェクトはどうなるのでしょうか?ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?

Aベストアンサー

> ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?
attachEvent() を使えば、複数のイベントハンドラを定義できそうです。(未検証)
また、attachEvent() の第一引数からイベントオブジェクトを取得できる、とbabu_babooさんに教わりました。
http://okwave.jp/qa5081024.html?ans_count_asc=1

ただ、attachEvent は実行順が不定という欠点があるので、現実的には「出来ない」という結論になると思います…。

addEventListenerとattachEventでは実行される順番が違う at HouseTect, JavaScripter Blog
http://hisasann.com/housetect/2008/09/addeventlistenerattachevent.html
IEのイベント実行順序は不定? - inamenaiの日記
http://d.hatena.ne.jp/inamenai/20080915/p1

IEが addEventListener() に対応してくれればいいのですが…。

> ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?
attachEvent() を使えば、複数のイベントハンドラを定義できそうです。(未検証)
また、attachEvent() の第一引数からイベントオブジェクトを取得できる、とbabu_babooさんに教わりました。
http://okwave.jp/qa5081024.html?ans_count_asc=1

ただ、attachEvent は実行順が不定という欠点があるので、現実的には「出来ない」という結論になると思います…。

addEventListenerとattachEventでは実行される順番...続きを読む

QExcel VBAでマウスの左クリックのイベントを検知するには

お世話になります。

ExcelのVBAを利用して、マウスが左クリックされた際、そのイベントを
検知する方法はありますでしょうか?

使用しているExcelは2003です。

よろしくお願いします。

Aベストアンサー

■ マウスやキーボードのイベントを取得する
http://home.att.ne.jp/zeta/gen/excel/c04p07.htm

こちらが参考になりそうです。

Qmousewheelイベントについて

あまりしないことだと思うのですが。
質問させていただきます。

ボタンをクリックしてmousewheelイベントを発生させることはできるでしょうか。
下記の様に書いたのですが、
event.wheelDelta = -120; //or 120
が無視されました。

function click_hoge(){
var event = document.createEventObject();
event.eventType="mousewheel";
event.wheelDelta = -120; //or 120
document.body.fireEvent( "onmousewheel", event );
}

失礼いたします。

Aベストアンサー

eventオブジェクトのwheelDeltaプロパティは、
現状のブラウザ(IE、Chrome、Firefox、Safari)では
読み出しのみで、値をセットをする事は出来ません。

http://msdn.microsoft.com/en-us/library/ms535142%28v=VS.85%29.aspx
http://help.dottoro.com/ljekedtv.php


WheelEventイベントの発火自体出来ます。
IEは、
 var evt = document.createEventObject();
 evt.detail = 0;
 elment.fireEvent ("onmousewheel",evt);
IE以外は、
 var evt = document.createEvent("WheelEvent");
 var detail = 0;
 evt.initUIEvent("mousewheel",true,true,document.defaultView,detail);
 elment.dispatchEvent(evt);
です。DOM Level 3 Eventインターフェースが実装されれば、
 var evt = document.createEvent("WheelEvent");
 evt.initWheelEvent("wheel",true,true,document.defaultView,0,0,0,0,0,0,
  document.body,null,0,-120,0,0);
 elm.dispatchEvent(evt);
とできそうですが....

現状の対処として、イベント自体は発火してますから、
detailプロパティにホイール量を仮セットしておいて、
onmousewheelのイベントハンドラー関数で、
event.wheelDeltaを参照する代わりに、event.detailを参照して
スクロールなり何なりの処理を自分で書いてあげれば、
思ったことが出来るかも。

http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
http://help.dottoro.com/ljrxdxdw.php
http://msdn.microsoft.com/en-us/library/ms536390%28VS.85%29.aspx

eventオブジェクトのwheelDeltaプロパティは、
現状のブラウザ(IE、Chrome、Firefox、Safari)では
読み出しのみで、値をセットをする事は出来ません。

http://msdn.microsoft.com/en-us/library/ms535142%28v=VS.85%29.aspx
http://help.dottoro.com/ljekedtv.php


WheelEventイベントの発火自体出来ます。
IEは、
 var evt = document.createEventObject();
 evt.detail = 0;
 elment.fireEvent ("onmousewheel",evt);
IE以外は、
 var evt = document.createEvent("WheelEvent");
 var detail = 0;
 e...続きを読む

Qマウスの左ボタンを押したまま範囲指定

よく、Windowsのアプリケーションで、マウスの左ボタンを押したままマウスを動かすと、細い線で起点から四角形があらわれ範囲指定ができるアプリケーションがあります(Wardで文章に貼り付けた図形を複数選択する時など)が、VB6でもこのようなアプリケーションを作ることは可能でしょうか?可能であればプログラミングの方法を教えていただきたいのですが、ご存知の方いらっしゃいましたらよろしくお願いします。

Aベストアンサー



参考URL:http://www.mitene.or.jp/~sugisita/family/papa/vb/api_gra.html

QDLL内のイベントをハンドリング

VB2008にて、外部DLL(VB2008作成)を使用しようと考えています。

外部DLLの仕様書には、メソッド、イベント、プロパティが記載されており、
外部DLLの発生させるイベントをハンドリングしたいのですがうまくいきません。

「参照の追加」にてDLLを指定し、ソース内で該当DLLのクラスもインスタンス化し、
DLL内のメソッドは使用できています。

イベントに関して仕様書には
Event001(Byval arg1,Byval arg2)、Event002(Byval arg1,Byval arg2)、Event003…
このように記載されています。


該当DLLのインスタンス化したものをTestClassとして、
Public Event TestEvent Handles TestClass.Event001
という記載では駄目でした。

外部DLLのイベントのハンドリングについて、ご教授頂けましたら幸いです。

Aベストアンサー

まず、

Private WithEvents TestClass As Class1

などのように宣言します。(クラスを Class1 としました。また、必要であれば、Protected や Public にしても構いません。)
すると、コードのウィンドウの上にある二つ並んだコンボボックスの左側で TestClass が選択できるようになります。TestClass を選択して、次に、右側のコンボボックスから Event001 を選択すると

Private Sub TestClass_Event001(ByVal arg1 As Object, ByVal arg2 As Object) Handles TestClass.Event001

End Sub

が自動的に生成されると思います。
(手入力も可)

Qボタンをマウスで押し続けたときのイベント

VB2005,Frameworks2を使用しています。

フォームに設置したButtonは、通常マウスをクリックする度にイベントが発生しますが、これをボタンをマウスで押している間だけイベントを発生されたいのですがその様なイベントやボタンの設定が見つかりません。

やはりタイマー等を使わないと再現できないのでしょうか?
よろしくお願いします。

Aベストアンサー

繰り返し処理ならMouseDownでタイマースタート、MouseUpでタイマー停止、がシンプルだと思われます。
ボタンを押している間だけ何らかの処理が進行するようなものなら、マルチスレッドですかね。MouseDownでスレッドスタート、MouseUpでスレッドを停止させるようなフラグをONにするか、スレッド強制終了させるか。。。
どちらにしても、イベントのプロシージャからは即座に脱出しないとパフォーマンスに影響します。

Qイベント日付(複数または連続した日付)をデータベースで管理する方法について

イベント情報のデータベースを作成していますが、
どのように日付情報をデータベースとして持たせたらよいのか悩んでいます。
効率的な方法がありましたら教えていただけると幸いです。
長文になり、失礼いたします。

[目的]
イベント毎に開催日時や主催者などのデータベースを構築し、開催日時で検索を行いたい。

[悩みどころ]
開催日時が、”2008年9月24日”のように1日で終わるものであれば問題ないのですが、”2008年9月24~28日”のような連続した日付や、”2008年9月24日、2008年9月26日”のような連続しない複数日の場合に、どのようなデータベース構造を持たせるべきなのか悩んでいます。

[現状の案]
現状は、イベントテーブルと日付テーブルを分けて管理する方法を考えていますが、これが一般的な方法なのでしょうか。

<EVENT_TABLE>
event_id:(auto increment)
event_name:イベントの名前

<DATE_TABLE>
date_id:(auto increment)
event_id:EVENT_TABLE.event_id を指すID
date:イベント開催日単日

イベントの開催日が1日であれば、一つのevent_idと一つのdate_id。
イベントの開催日が、連続した三日であれば、一つのevent_idと三つのdate_id。
イベントの開催日が、連続しない三日であれば、一つのevent_idと三つのdate_id。

イベント情報のデータベースを作成していますが、
どのように日付情報をデータベースとして持たせたらよいのか悩んでいます。
効率的な方法がありましたら教えていただけると幸いです。
長文になり、失礼いたします。

[目的]
イベント毎に開催日時や主催者などのデータベースを構築し、開催日時で検索を行いたい。

[悩みどころ]
開催日時が、”2008年9月24日”のように1日で終わるものであれば問題ないのですが、”2008年9月24~28日”のような連続した日付や、”2008年9月24日、2008年9月26日”のような連続...続きを読む

Aベストアンサー

一般的かどうかはわかりませんが、
複数のテーブルをJOINするのが好みかどうかとか、
データベースの効率を考えるとどうかと言うので決まってくるのでしょう。

私はあまりJOINしたくないと言う気持ちだけの話でANo.1のご回答にあるような感じでしてしまいます。
これに、連続しない開催の場合は、初日のイベントIDを他の開催日のデータに持たせて関連づけておけば、重なるデータ(イベント名など、他詳細情報もこちらに記録されるのだと思っています)は初日の方にだけ記録しておいても、なんとかなるのかなと思います。
と言うのが、私の今までの経験から思いつく事でした。

ANo.2で質問者様の方法で十分との事でしたので、よくよく考えてみると、なるほどその方が拡張性があるのかなと思ったりもしています。
データベース効率はどちらがいいのかわかりませんが、今お考えになられている方法から遠のくと難しくなるかも知れませんので、別の問題が起こらない間はそのまま進めてみられた方がいいのかと思います。

「DATE_TABLE」は、連続していようとしていまいと関係なく、開催している日分のデータがあると言う事と考えてよろしいでしょうか。
日時で検索するのでしたら、「DATE_TABLE」には、その日の開始時刻と終了時刻を記録しておくようになるのかも知れません。
最終日だけ早めに終わったりするようなイベントもあるのでしたら、「EVENT_TABLE」側で時刻を持つよりもいいのかなと思います。

一般的かどうかはわかりませんが、
複数のテーブルをJOINするのが好みかどうかとか、
データベースの効率を考えるとどうかと言うので決まってくるのでしょう。

私はあまりJOINしたくないと言う気持ちだけの話でANo.1のご回答にあるような感じでしてしまいます。
これに、連続しない開催の場合は、初日のイベントIDを他の開催日のデータに持たせて関連づけておけば、重なるデータ(イベント名など、他詳細情報もこちらに記録されるのだと思っています)は初日の方にだけ記録しておいても、なんとか...続きを読む

QVB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?

タイトルのとおりなのですが、
VB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?
教えてくださいーー

Aベストアンサー

お世話になります。

ボタンを押そうが何をしようが、
PostBack するたびに、Page_Load は走りますよ。
そこで判断をしたいのであれば、
Page.Load イベント内で以下の様に記述してやれば
よいかもしれません。

If IsPostBack Then
  ' 初めてページを読み込んだ時処理
Else
  ' そうでない時処理
  If Not Request("ボタンの name") Is Nothing Then
    ' ボタン押下により発生した PostBack
  End If
End If

参考URL:http://msdn2.microsoft.com/ja-JP/library/system.web.ui.page.ispostback.aspx

QActionscript3.0 子のイベントを削除

Actionscript3.0で親のムービーから子のイベント指定して削除することは可能でしょうか?

親のステージに配置したmymcの中でballをENTER_FRAMEを使い動かしています。
親のステージに配置したbtnをクリックすることで、
ENTER_FRAMEを削除したいのですが、
下記のスクリプトだと、親のほうでmyenterframeが未定義と表示されてしまいます。

どのように記述すればよいのでしょうか?
よろしくお願いいたします。


ーーーーーーーーーーーーーーーーー親ーーーーーーーーーーーーーーーーー
btn.addEventListener (MouseEvent.CLICK, myclick);
function myclick(event:MouseEvent):void{
mymc.removeEventListener(Event.ENTER_FRAME, myenterframe);
}

ーーーーーーーーーーーーーーーーーmymcーーーーーーーーーーーーーーーーー
addEventListener(Event.ENTER_FRAME, myenterframe);
function myenterframe(evt:Event):void {
ball.x++;
}

Actionscript3.0で親のムービーから子のイベント指定して削除することは可能でしょうか?

親のステージに配置したmymcの中でballをENTER_FRAMEを使い動かしています。
親のステージに配置したbtnをクリックすることで、
ENTER_FRAMEを削除したいのですが、
下記のスクリプトだと、親のほうでmyenterframeが未定義と表示されてしまいます。

どのように記述すればよいのでしょうか?
よろしくお願いいたします。


ーーーーーーーーーーーーーーーーー親ーーーーーーーーーーーーーーーーー
btn.addEventListener ...続きを読む

Aベストアンサー

myenterframeはmymcの名前空間にいるので

mymc.removeEventListener(Event.ENTER_FRAME, mymc.myenterframe);

とやれば動くんじゃないですかね


ちなみに僕はこういうことするときはmymc側に
リスナーを全てremoveする為の
destroyメソッドとか用意するようにしてます

そういうふうにしておけばmymcにremoveしたいリスナーが増えたり
親のclick以外からもmymcのリスナーをremoveしたいとなったときも
書き換えが楽になるのでオススメ

Qroadイベントで描画できない?

すいませんもう一丁お願いします...

えと
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1305647
の内容をroadイベントで実行しようとしても何も起きないのですが、方法はありますか?

Aベストアンサー

DEF_ほにゃらら
は、定数(デファイン)です。

この場合、DEF_BMPだから
BMPのファイルパスを定数として、宣言しているという暗黙事項ですよ。



>picturebox1に最初から入ってる画像なんです
画面がアクティブになる前って、VB6でもできないんじゃ・・・(できるとしたらすいません)

追記ですが、.NETのピクチャボックスにはAutoRedrawというプロパティを持っていないので、実現したいピクチャボックスのPaint時に(Formでもそうなのですが)再描画ロジックを入れ込まなければ、前面に別ウィンドウが表示されると、絵が消えてしまいます。

これらの問題も含め解消すべく、画面のOnLoadイベントを使用せず、PictureBox2.Paintイベントを利用し、描画するタイミングをずらしましょう。


先頭に宣言
Private bmap As Bitmap
Private rectSrc As RectangleF

ピクチャボックス2の描画イベントハンドラ
Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint
  '絵がまだ未設定の時だけ
  'Picture2の絵を差し替えたいときは、bmap = Nothingを、別のタイミングでしてあげたらいい
  If bmap Is Nothing Then
    '絵を読み込む
    bmap = New Bitmap(Me.PictureBox1.Image)
    '切り取り範囲を指定
    rectSrc = New RectangleF(0, 0, bmap.Width / 2, bmap.Height / 2)
  End If

  '表示(AutoRedraw =Trueを実現する意味もある)
  e.Graphics.DrawImage(bmap, 0, 0, rectSrc, GraphicsUnit.Pixel)
End Sub

画面が閉じるときのイベント
Protected Overrides Sub OnClosed(ByVal e As System.EventArgs)
  '破棄
  bmap.Dispose()
End Sub

DEF_ほにゃらら
は、定数(デファイン)です。

この場合、DEF_BMPだから
BMPのファイルパスを定数として、宣言しているという暗黙事項ですよ。



>picturebox1に最初から入ってる画像なんです
画面がアクティブになる前って、VB6でもできないんじゃ・・・(できるとしたらすいません)

追記ですが、.NETのピクチャボックスにはAutoRedrawというプロパティを持っていないので、実現したいピクチャボックスのPaint時に(Formでもそうなのですが)再描画ロジックを入れ込まなければ、前面に別ウィンドウが表...続きを読む


人気Q&Aランキング

おすすめ情報