|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TEditorでNifty URL その2"
こんばんは〜 H-Tritonです。
キーワードを忘れたため、再掲いたします。m(__)m
仕様を一部見直しました。
TEditor上でハイライト表示された Nifty URL等(Web URL、Mail Addressを
含む)に対するマウス操作の処理です。
なぞった時:
(1)マウスカーソルを手の形に変る
(2)StatusBarにNifty URL等を示する。
(3)Nifty URLの場合はその情報(URL文字列、フォーラム名、会議室番号、
発言番号)をレコード型に格納する。
クリックした時:
(4)Nifty URLの場合はその情報をメッセージボックスに表示する。
(実際のアプリでは、そのURLへジャンプするなどの処理に置き換わる)
(5)Web URLの場合は、Web Browzerを起動してそこへ飛んでゆく。
(6)Mail Addressの場合は、その宛先でメーラーを起動する。
// uses ShellAPIを追加してね。
type
TNifUrlInfo = record
UrlStr: string; // Nifty URLの文字列
ForumName: string; // Niftyのフォーラム名
RoomNo: string; // Niftyの会議室番号
MsgNo: string; // Niftyの会議室発言番号
end;
var
NifUrlInfo: TNifUrlInfo;
// マウスでなぞった時の処理
// ここで呼び出している関数 IsStrAlphaUpCaseとIsStrNumericは
// nifty:FDELPHI/MES/16/965のコードと共用しています。
// コードはそちらにあります。
procedure TForm1.Editor1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
const
NifChar = ['0'..'9','A'..'Z', 'a'..'z', ':', '/'];
var
P: TPoint;
S: string;
i, j: Integer;
StrInfo: TEditorStrInfo;
Parser: TEditorParser;
NifUrl: Boolean;
uInfo: TNifUrlInfo;
begin
Editor1.Cursor:= crDefault;
uInfo.UrlStr:= '';
uInfo.ForumName:= '';
uInfo.MsgNo:= '';
uInfo.RoomNo:= '';
P.x:= X;
P.y:= Y;
with Editor1 do
begin
StrInfo:= StrInfoFromPos(P);
if (StrInfo.Line < 0) or (StrInfo.Line > Lines.Count - 1) then
begin
StatusBar1.SimpleText:= '';
Exit;
end else
if TokenFromPos(P) in [toUrl, toMail] then
begin
Cursor:= crHandPoint;
StatusBar1.SimpleText:= TokenStringFromPos(P);
end else
begin
i:= StrInfo.CharIndex;
S:= Lines[StrInfo.Line];
if not (S[i+1] in NifChar) then
begin
NifUrlInfo:= uInfo;
StatusBar1.SimpleText:= NifUrlInfo.UrlStr;
Exit;
end;
repeat
if Copy(S, i, 6) = 'nifty:' then Break;
Dec(i);
until i = -1;
if i = -1 then Exit;
J:= -1;
Parser:= TEditorParser.Create(S);
try
while Parser.Token <> toEOF do
begin
NifUrl:= False;
if Parser.SourcePos = i-1 then j:= 0;
case j of
0: if Parser.TokenString = 'nifty' then NifUrl:= True;
1: if Parser.TokenString = ':' then NifUrl:= True;
2: if IsStrAlphaUpCase(Parser.TokenString) then
begin
uInfo.ForumName:= Parser.TokenString;
NifUrl:= True;
end;
3, 5, 7: if Parser.TokenString = '/' then NifUrl:= True;
4: if Parser.TokenString = 'MES' then NifUrl:= True;
6: if IsStrNumeric(Parser.TokenString) then
begin
uInfo.RoomNo:= Parser.TokenString;
NifUrl:= True;
end;
8: if IsStrNumeric(Parser.TokenString) then
begin
uInfo.MsgNo:= Parser.TokenString;
NifUrl:= True;
end;
end;
if NifUrl then
begin
uInfo.UrlStr:= uInfo.UrlStr + Parser.TokenString;
if j = 8 then
begin
Cursor:= crHandPoint;
NifUrlInfo:= uInfo;
Break;
end else Inc(j);
end;
Parser.NextToken;
end;
finally
Parser.Free;
end;
StatusBar1.SimpleText:= uInfo.UrlStr;
end;
end;
end;
// クリックした時
procedure TForm1.Editor1Click(Sender: TObject);
var
S: string;
C: Char;
begin
C:= Editor1.TokenFromCaret;
if C in [toMail, toUrl] then
begin
if C = toMail then S:= 'mailto:' + Editor1.TokenStringFromCaret else
if C = toUrl then S:= Editor1.TokenStringFromCaret;
ShellExecute(Handle, 'OPEN', PChar(S), '', '', SW_SHOW);
end else
if NifUrlInfo.UrlStr <> '' then
ShowMessage('Forum Name : ' + NifUrlInfo.ForumName + #13 +
'Room Name : ' + NifUrlInfo.RoomNo + #13 +
'Message No : ' + NifUrlInfo.MsgNo);
end;
http://member.nifty.ne.jp/h-triton/
○ 快速・大容量テキストエディタ「えるの〜と」進化中 ○
Avalon's Friendly Crew #80008 H-Triton (^^) since 1996
Original document by H-Triton 氏 ID:(QZV11422)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|