Richedit에 메세지를 보내서 처리하시면 될 것 같습니다.
기본 기능만 구현해 보았습니다. 새 폼에 RichEdit를 하나 놓으시고 아래 소스를 해당하는 이벤트에 집어 넣으시면 됩니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int LINKSTART = 0, LINKEND = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
TPoint tpPosition;
int itPosition;
tpPosition.x = X;
tpPosition.y = Y;
itPosition = RichEdit1->Perform(EM_CHARFROMPOS, 0, reinterpret_cast<LPARAM>(&tpPosition));
if(LINKSTART && LINKEND && (itPosition >= LINKSTART && itPosition <= LINKEND)) {
RichEdit1->Cursor = crHandPoint;
} else {
RichEdit1->Cursor = crDefault;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
TPoint tpPosition;
int itPosition;
tpPosition.x = X;
tpPosition.y = Y;
itPosition = RichEdit1->Perform(EM_CHARFROMPOS, 0, reinterpret_cast<LPARAM>(&tpPosition));
if(LINKSTART && LINKEND && (itPosition >= LINKSTART && itPosition <= LINKEND))
ShellExecute(NULL, "OPEN", "
http://www.borlandforum.com/", NULL, NULL, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
String stString;
RichEdit1->Lines->Clear();
RichEdit1->Lines->Add("RICHEDIT 컨트롤 테스트");
RichEdit1->Lines->Add("");
RichEdit1->Lines->Text = RichEdit1->Lines->Text + "볼랜드 포럼으로 들어가시려면 ";
RichEdit1->SelStart = RichEdit1->Text.Length() - 1;
LINKSTART = RichEdit1->SelStart;
RichEdit1->SelLength = 0;
RichEdit1->SelAttributes->Color = clNavy;
RichEdit1->SelAttributes->Style = TFontStyles() << fsUnderline;
RichEdit1->SelText = "이곳";
RichEdit1->SelStart = RichEdit1->Text.Trim().Length();
LINKEND = RichEdit1->SelStart;
RichEdit1->SelLength = 0;
RichEdit1->SelAttributes->Color = clBlack;
RichEdit1->SelAttributes->Style = TFontStyles();
RichEdit1->SelText = " 을 눌러주세요";
RichEdit1->Lines->Add("상단을 누르면 이동됩니다");
RichEdit1->Lines->Add("");
RichEdit1->Lines->Add("RICHEDIT 컨트롤 테스트 끝");
}
//---------------------------------------------------------------------------
maze 님이 쓰신 글 :
: MSN에서 보면.....파일 송수신할때....수락...취소....가 창에 뜨는데....
:
: 이것처럼 RichEdit에서 특정 문자가 다른 문자들과 구별이 되고 이를 클릭했을때...
:
: 특정 이벤트를 발생시키려고 합니다...
:
: 어떻게 해야 할까요?
:
: 다른 컴포넌트에서 가능한가요?
: