//---------------------------------------------------------------------------
#include <vcl.h>
#include <Registry.hpp>//自分で書く
#pragma hdrstop
#include "Unit1.h"
#include "wchar.h"//自分で書く(書かなくても多分動くけど)
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
UnicodeString Hyperlink = u"";//URL。自分で書く
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//デザイン画面のフォームをダブルクリックすると
//自動的に中身が空のこのメソッドが作られる。
//ダブルクリック後は、ここに、フォームが作られて最初に実行する処理を書く
float size;
int len;
UnicodeString url;
RichEdit1->Text = u"ABCEEFHIJKLMNOPQR\nSTUVabcdefg ";
len = RichEdit1->Text.Length();
url = u"http://www.nabeta.tk";
RichEdit1->Text = RichEdit1->Text + url + " 12345678\nhijk";
//選択文字列(文字背景が青)の先頭位置指定(入力カーソル位置指定にもなる)
RichEdit1->SelStart = 3;
RichEdit1->SelLength = 5;//選択部分(文字背景が青)の文字数指定
RichEdit1->SelAttributes->Color = clRed;//選択文字列の色を赤に指定
RichEdit1->SelStart = 11;//選択文字列の先頭位置
RichEdit1->SelLength = 4;//選択文字列数
RichEdit1->SelAttributes->Color = clGreen;//選択文字列の色を緑指定
//選択文字列のサイズを約1.8倍にする。
size = (float)RichEdit1->SelAttributes->Size;
size *= 1.8;
RichEdit1->SelAttributes->Size = (int)size;
RichEdit1->SelLength = 0;
//URLを青色にして下線を引く
RichEdit1->SelStart = len - 1;
RichEdit1->SelLength = url.Length();
RichEdit1->SelAttributes->Color = clBlue;
RichEdit1->SelAttributes->Style = RichEdit1->SelAttributes->Style << fsUnderline;
RichEdit1->SelLength = 0;
RichEdit1->SelStart = 0;
}
//ウェブブラウザ起動
void webbrowser(UnicodeString url)
{
// レジストリからhttp関連付けソフトを調べる
TRegistry* reg = new TRegistry();
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKeyReadOnly("SOFTWARE\\Classes\\http\\shell\\open\\command");
UnicodeString stdprog = reg->ReadString("");
delete reg;
char* lpvEnvironment = NULL;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.lpDesktop = NULL;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
si.lpTitle = NULL;
wchar_t command[512];
command[0] = (wchar_t)0;
wcscpy(command, stdprog.c_str());
wchar_t *pos = wcschr(&command[1], (wchar_t)'"');
if(pos == NULL){
return;
}
*(pos+1) = NULL;
wcscat(command, url.c_str());//URL set
CreateProcess(NULL,command,NULL,NULL,FALSE,
NORMAL_PRIORITY_CLASS | CREATE_SEPARATE_WOW_VDM,
lpvEnvironment,NULL,&si,&pi);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
//デザイン画面のRichiEdit1をクリックし、
//オブジェクトインスペクタ(Object inspector)のタブをイベント(Events)にして、
//onMouseMove をダブルクリックすると自動的に空のこのメソッドが作られる。
//マウスカーソルがRichiEdit1の上で動いた時にここが呼ばれる。
TPoint pt;
int charIndex,row,col;
pt = Point(X, Y);
charIndex = RichEdit1->Perform(EM_CHARFROMPOS, 0, Integer(&pt));
row = RichEdit1->Perform(EM_EXLINEFROMCHAR, 0, charIndex);
col = charIndex - RichEdit1->Perform(EM_LINEINDEX, row, 0);
if(row == 1 && col >= 12 && col <=31){
//マウスカーソルがURLの文字列の上だったらマウスカーソルを変える。
RichEdit1->Cursor = crHandPoint;
Hyperlink = u"http://www.nabeta.tk";
}
else{
//マウスカーソルがURLの上でないなら形状をデフォルトにする。
RichEdit1->Cursor = crDefault;
Hyperlink = u"";
}
Label1->Caption = IntToStr(row); //マウスカーソル位置の文字の桁数
Label2->Caption = IntToStr(col); //マウスカーソル位置の行番号Line Number
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1Click(TObject *Sender)
{
//デザイン画面のRichiEdit1をクリックし、
//オブジェクトインスペクタ(Object inspector)のタブをイベント(Events)にして、
//onClick をダブルクリックすると自動的に空のこのメソッドが作られる。
//RichiEdit1の上でマウスを左クリック時にここが呼ばれる。
if(Hyperlink != u""){
webbrowser(Hyperlink);
}
}
//---------------------------------------------------------------------------
ソースファイルも用意しています。
プロジェクトファイル、ヘッダファイル、画面設計ファイルを含むコンパイルするための全てのファイルがあります。
実行ファイルも入れています。
VCL TRichEdit ソースファイルダウンロードsource file download
C++ Builder 10.1 Berlin Starter Edition サンプルブログラム example
C言語の話
あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ