c++ builder XE4, 10.2 Tokyo > Hint > 클릭하면 목록 표시
18133 단어 #migratedcppBuilderTHintInfo우이
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
- code v0.3は動作確認済
gmail에서는 「To」의 송신처명의 맨 오른쪽에 있는 「아래쪽 화살표」를 누르면, 송신처 주소 리스트 등이 표시된다.
이것에 가까운 UI를 구현할 수 없는 것일까.
C++ Builder에서 클릭시 Hint를 표시하려고했습니다.
코드 v0.1
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
static const String kDummyList = L"[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Memo1->Clear();
Memo1->Lines->Add(kDummyList);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Click(TObject *Sender)
{
Memo1->ShowHint = true;
String msg = Memo1->Lines->Text;
msg = StringReplace(msg, L",", L",\r\n", TReplaceFlags()<<rfReplaceAll);
Memo1->Hint = msg;
}
//---------------------------------------------------------------------------
Memo1에서 클릭 할 때마다 목록이 표시됩니다.
열람성은 올랐다.
편집하기 쉬운가 하면 그렇지 않다. 1 어드레스의 삭제, 추가는 실시하기 어렵다.
code v0.2 > MouseLeave() 추가
v0.1 코드의 경우 Memo1에서 멀리 다시 Memo1에 올 때 힌트가 표시됩니다. 이것을 회피하기 위해, MouseLeave()를 추가해 보았다.
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
static const String kDummyList = L"[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Memo1->Clear();
Memo1->Lines->Add(kDummyList);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Click(TObject *Sender)
{
Memo1->ShowHint = true;
String msg = Memo1->Lines->Text;
msg = StringReplace(msg, L",", L",\r\n", TReplaceFlags()<<rfReplaceAll);
Memo1->Hint = msg;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1MouseLeave(TObject *Sender)
{
Memo1->ShowHint = false;
}
//---------------------------------------------------------------------------
Memo1에서 벗어날 때 MouseLeave ()가 실행되어 ShowHint가 false가됩니다. 다시 Memo1에 왔을 때는 클릭할 때까지는 Hint는 표시되지 않는다.
Memo1의 스크롤 바 클릭시는 Hint가 표시되지 않기 때문에 방해가 되지 않는다.
code v0.3 > 컴포넌트 가변 대응 (Sender 사용)
Memo1Click()이나 Memo1MouseLeave()의 처리에서 「Memo1」과 같이 고정의 컴퍼넌트로 하면(자) 다른 컴퍼넌트로 사용할 수 없다.
Sender를 사용하도록 변경했다.
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
static const String kDummyList = L"[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
L",[email protected]"
;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Memo1->Clear();
Memo1->Lines->Add(L"1\r\n" + kDummyList);
Memo2->Clear();
Memo2->Lines->Add(L"2\r\n" + kDummyList);
Memo3->Clear();
Memo3->Lines->Add(L"3\r\n" + kDummyList);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Click(TObject *Sender)
{
if (dynamic_cast<TMemo *>(Sender) == NULL) {
return;
}
TMemo *dstPtr = (TMemo *)Sender;
dstPtr->ShowHint = true;
String msg = dstPtr->Lines->Text;
msg = StringReplace(msg, L",", L",\r\n", TReplaceFlags()<<rfReplaceAll);
dstPtr->Hint = msg;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1MouseLeave(TObject *Sender)
{
if (dynamic_cast<TMemo *>(Sender) == NULL) {
return;
}
TMemo *dstPtr = (TMemo *)Sender;
dstPtr->ShowHint = false;
}
//---------------------------------------------------------------------------
그리고는 Memo1Click()이나 Memo1MouseLeave()를 다른 이름으로 하고, OnClick, OnMouseLave에 그 함수를 사용하는 것으로 공통화한다.
Reference
이 문제에 관하여(c++ builder XE4, 10.2 Tokyo > Hint > 클릭하면 목록 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/ec51c0627c3ec46a53da텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)