
No.6ベストアンサー
- 回答日時:
>error C3861: 'rectClickContains': 識別子が見つかりませんでした
誤:if(rectClickContains(e->Location))
正:if(rectClick.Contains(e->Location))
です。上で宣言しているオブジェクト名が「rectClick」なのに、エラーメッセージで出ているオブジェクト名が「rectClickContains」と出ているわけですから、そこからおかしい場所はすぐ特定できます。
こういったエラーの原因特定方法は、自分でプログラムを組んでゆく上で必要になってきます。
あと、提示されているコードでは、「Windows.h」は必要ないと思うのですが・・・一度その部分をコメントにして試してはいかがでしょう?
回答ありがとうございます。
rectClickContainsでなく、rectClick.Containsですね、
. が抜けていました。
おかげさまで、無事プログラム完成しました。
ありがとうございました。
実は、昨日から出来ていて、お礼をしようとしていたのですが、
書き込める所がなく困っていました
返答していただいて、本当によかったです。
どうもありがとうございました。
No.5
- 回答日時:
>しかし、if ((e->X < 100) && (e->Y < 100)) は、
>フォーム上のどの位置か指定しなければならないのに
>どこにも記述していない?
ここで前回の質問の回答が生きてきます。
>if ((e->X < 100) && (e->Y < 100))
System::Drawing::Rectangle rectClick(100, 100, 80, 20);
if (rectClick.Contains(e->Location))
こんな感じかな?
この回答への補足
回答ありがとうございます
: error C3861: 'rectClickContains': 識別子が見つかりませんでした
というエラーが出てしまいました
メイン.cppの方に何か書き足さないとダメなのでしょうか?
<windows.h>とは、リンクできているのですが
メイン.cppソースです
#include "stdafx.h"
#include <windows.h>
#include "Form1.h"
#pragma comment(lib, "user32.lib")
using namespace aviMouseClick;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
Form1.hのイベントのソースです
#pragma endregion
private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if (e->Button == System::Windows::Forms::MouseButtons::Left)//左ボタン
{
System::Drawing::Rectangle rectClick(100, 100, 80, 20);
if(rectClickContains(e->Location))
{
axWindowsMediaPlayer1->Visible = true;
axWindowsMediaPlayer1->Size = System::Drawing::Size(1280, 1024);
axWindowsMediaPlayer1->Ctlcontrols->play();
axWindowsMediaPlayer1->settings->setMode("loop",false);
}
}
}
private: System::Void axWindowsMediaPlayer1_PlayStateChange(System::Object^ sender, AxWMPLib::_WMPOCXEvents_PlayStateChangeEvent^ e) {
if (e->newState == 8){
axWindowsMediaPlayer1->Visible = false;
axWindowsMediaPlayer1->Ctlcontrols->stop();
return;
}
}
自分なりいろいろ試しているのですが・・
御指導おねがいします
No.4
- 回答日時:
#2の補足で出ているエラーは、以下のコードを直せば無くなると思います。
>if (e->Button == ::MouseButtons::Left)//左ボタン
if (e->Button == System::Windows::Forms::MouseButtons::Left)//左ボタン
個人的には、MouseUpではなくMouseClickで実装したほうがいいと思いますが・・・
この回答への補足
回答ありがとうごさいます。
出来ました。
しかし、if ((e->X < 100) && (e->Y < 100)) は、
フォーム上のどの位置か指定しなければならないのに
どこにも記述していない?
今は、フォームの一番左上からになっています
座標を、指定するコードは、やはりイベトの所で記述しなければならないのですか?
あと少しで完成なので、本当に申し訳ないですが
御指導おねがいできないでしょうか?
よろしくお願いします。
Form.hのイベントのコードです
#pragma endregion
private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if (e->Button == System::Windows::Forms::MouseButtons::Left)//左ボタン
{
if ((e->X < 100) && (e->Y < 100))
{
axWindowsMediaPlayer1->Visible = true;
axWindowsMediaPlayer1->Size = System::Drawing::Size(1280, 1024);
axWindowsMediaPlayer1->Ctlcontrols->play();
axWindowsMediaPlayer1->settings->setMode("loop",false);
}
}
}
private: System::Void axWindowsMediaPlayer1_PlayStateChange(System::Object^ sender, AxWMPLib::_WMPOCXEvents_PlayStateChangeEvent^ e) {
if (e->newState == 8){
axWindowsMediaPlayer1->Visible = false;
axWindowsMediaPlayer1->Ctlcontrols->stop();
return;
}
}
No.3
- 回答日時:
前回「QNo.5885411」で質問していた内容の実装ができないってことかなぁ?
先の質問で、Rectangleを利用した例を挙げたを思います。あの方法で実行を制御するのではなく、イベントが発生する範囲を限定したいということでしょうか?
クリックされた位置を判定するだけなら前回の回答や、#2さんの方法が使えると思いますが・・・
この回答への補足
回答ありがとうございます。
実はビルドエラーで成功しませんでした。
なんとか自分でいろいろ書き足したのですが、
わけがわからないコードになってしまい、修復不可能になってしまいました。
せっかく教えてもらったのに申し訳ありません。
今度は、ちゃんと動作するかどうか確認してから
返答するようにがんばります。
No.2
- 回答日時:
> 出来れば100×100ピクセルぐらいのある範囲だけ指定したいのですが
> マウスクリックイベントの記述の方に何か書き足せば良いのでしょうか?
イベントハンドラのパラメータの中にマウスの座標が入っているので、それで判定して特定の範囲の時だけ処理するようにすれば良いだけかと。
private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{
if (e->Button == ::MouseButtons::Left) // 左ボタン
{
if ((e->X < 100) && (e->Y < 100))
{
// 処理
}
}
}
この回答への補足
すばやい回答ありがとうございます。
ビルドしてみたのですが、エラーが出てしまいました。
自分で解決しようとがんばっていますが、うまくいきません。
どうか、助けてください。
お願いします。
エラーコード
error C3083: 'MouseButtons': '::' の左側のシンボルには、型を指定しなければなりません
error C2039: 'Left' : '`global namespace'' のメンバではありません。
error C2678: 二項演算子 '==' : 型 'System::Windows::Forms::MouseButtons' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
'int operator ==(const GUID &,const GUID &)' の可能性があります。
引数リスト '(System::Windows::Forms::MouseButtons, int)' を一致させようとしているとき
Form1.hのイベントのソース
#pragma endregion
private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if (e->Button == ::MouseButtons::Left)//左ボタン
{
if ((e->X < 100) && (e->Y < 100))
{
axWindowsMediaPlayer1->Visible = true;
axWindowsMediaPlayer1->Size = System::Drawing::Size(1280, 1024);
axWindowsMediaPlayer1->Ctlcontrols->play();
axWindowsMediaPlayer1->settings->setMode("loop",false);
}
}
}
メインの.cppのソース
#include "stdafx.h"
#include <windows.h>
#include "Form1.h"
#pragma comment(lib, "user32.lib")
using namespace aviMouseClick;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}
Form1.hの頭の部分
namespace aviMouseClick {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace WMPLib;
using namespace AxWMPLib;
/// <summary>
/// Form1 の概要
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
よろしくお願いします。
No.1
- 回答日時:
単にコントロール以外のフォーム上で、ボタンダウンかボタンアップのイベントメッセージを拾えば良いだけだと思いますが。
フォームのプロパティウインドウでイベントボタン(雷みたいなアイコン)をクリックし、マウスの項にあるMouseDownなりMouseUpの横の空欄をクリックすると、該当するイベントハンドラが追加されるので、そこに処理を書けば良いだけです。
フォーム上の他のコントロール上でも同じことを行いたければ、それぞれのコントロールに対して同様の操作をします。
MouseDownとMouseUpでは、どっちかというとMouseUpを使うのが行儀が良いかな。マウスを押した後でやめたくなったら、そのままフォームの外にマウスを出してから放せば良いから……(MouseDownだと押した時点で処理が決定されてしまう)
この回答への補足
回答ありがとうございます。
質問の内容が、良くなかったですね、
すみませんでした。
この方法だとフォーム上のどこの場所でもイベントが発生するのですよね
出来れば100×100ピクセルぐらいのある範囲だけ指定したいのですが
マウスクリックイベントの記述の方に何か書き足せば良いのでしょうか?
御指導お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
VB.net webアプリケーションで...
-
ユーザーフォームに別シートか...
-
VBAで多数のプログラムを一つの...
-
データベースへ反映されません。
-
ボタンには二列にわたって文字...
-
WebBrowserを使ってOKボタンを...
-
VB.NET2010 Timerの使用
-
[VB.net] ボタン(Flat)のEnable...
-
グラフィカルボタン
-
Visual Basic 2008 で複数のう...
-
エクセルVBA 複数のテキストボ...
-
C#のwebbrowserで何をしている...
-
MS Excelで
-
VBA マクロでの網掛けについて
-
自作関数をメニューボタン表示
-
TabPageが変更された場合
-
VC++.netで、フォーム上のある...
-
Visual C#を用いたボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
セルをマクロのボタンにしたい。
-
VBA CommandButtonの文字ずれ
-
Excel VBA Application.caller...
-
C#プログラムで、ボタンをショ...
-
フォームの再読み込み
-
コマンドボタンやイメージにマ...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel マクロ 閉じるボタン
-
VBAで多数のプログラムを一つの...
-
ボタンをマウスで押し続けたと...
-
VB.net でトグルボタンを実現し...
-
プロシージャからイベントをコ...
-
アイコンとボタンの違い
-
VBAのボタンの位置が変わって困...
-
閉じると「+」になり開くと「-...
-
[Excel VBA]コマンドボタンの入...
-
ASP.Net ラベルの内容をすぐに...
おすすめ情報