C++ Builder XE4 > UI > 구현: 마우스 클릭과 마우스로 범위 선택을 결정
8874 단어 mouseEventcppBuilderdifference우이
C++ Builder XE4
개요
상기를 판별하는 구현을 생각했다.
구현
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE で管理されるコンポーネント
TPanel *Panel1;
TMemo *Memo1;
void __fastcall Panel1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall Panel1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall Panel1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
private: // ユーザー宣言
bool m_bfMouseMove; // マウス移動があったかどうか
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
if (m_bfMouseMove == false) {
Memo1->Lines->Add(L"Click");
} else {
Memo1->Lines->Add(L"Range Select");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
m_bfMouseMove = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
m_bfMouseMove = true;
}
//---------------------------------------------------------------------------
동작 예
비고1
「X, Y위치를 유지해 MouseUp시에 어긋남이 없는지 확인」이라고 하는 방안도 생각했지만, 위의 실장이 심플할 것이다.
Panel1MouseUp()만을 사용하는 구현이 있으면 알고 싶다.
비고 2
왼쪽 클릭시 조금이라도 좌표가 움직이면 클릭으로 인식되지 않는다.
"클릭한 것의 처리되지 않는다"라고 유저에게 생각되는 장면이 있을 것 같다.
좌표의 이동량을 보고, 다소의 이동이면 클릭으로서 처리하는 등의 궁리가 필요할지도 모른다.
Reference
이 문제에 관하여(C++ Builder XE4 > UI > 구현: 마우스 클릭과 마우스로 범위 선택을 결정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/de01db73dfeeedf62cfa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)