16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TEditorで Nifty URL"
この発言に対し以下のコメントが寄せられています
#00965 H-Triton さん RE:TEditorで Nifty URL
TEditor ver 1.0以降では何もしなくても WebのURLや E-Mailアドレスを
ハイライト表示してくれて大変楽になりました。
が、Nifty URLにはまだ対応していないので、自分でオーナードローする
しかありません。
以下のようなコードを書いて見ましたが、えらく冗長みたいだし、横スク
ロールすると崩れたりで明らかに欠陥があります。
改善できるところがあればご教示下さい。
// 文字列はアルファベット大文字だけで構成されているか?
function IsStrAlphaUpCase(S: string): Boolean;
var
i: Integer;
begin
Result:= False;
for i:= 1 to Length(S) do if not (S[i] in ['A'..'Z']) then Exit;
Result:= True;
end;
// 文字列は数字だけで構成されているか?
function IsStrNumeric(const S: string): boolean;
var
i, d: integer;
begin
Val(S , i, d);
Result:= (d = 0);
end;
// Nifty URLのオーナードロー
procedure TForm1.Editor1DrawLine(Sender: TObject; LineStr: String;
X, Y, Index: Integer; ARect: TRect; Selected: Boolean);
var
Parser: TEditorParser;
i, HX: Integer;
S: string;
HRect: TRect;
NifUrl, Tmp: Boolean;
begin
Editor1.Canvas.Font.Style:= [fsUnderLine];
Editor1.Canvas.Font.Color:= clBlue;
i:= 0;
S:= '';
NifUrl:= False;
Parser:= TEditorParser.Create(LineStr);
try
with Editor1 do while not (Parser.Token = toEOF) do
begin
Tmp:= False;
case i of
0: if Parser.TokenString = 'nifty' then
begin
HX:= Margin.Left +
Parser.SourcePos * (ColWidth + Margin.Character);
Tmp:= True;
end;
1: if Parser.TokenString = ':' then Tmp:= True;
2: if IsStrAlphaUpCase(Parser.TokenString) then Tmp:= True;
3, 5, 7: if Parser.TokenString = '/' then Tmp:= True;
4: if Parser.TokenString = 'MES' then Tmp:= True;
6: if IsStrNumeric(Parser.TokenString) then Tmp:= True;
8: if IsStrNumeric(Parser.TokenString) then NifUrl:= True;
end;
if NifUrl then
begin
S:= S + Parser.TokenString;
HRect:= Classes.Rect(Max(Margin.Left, HX), ARect.Top,
Max(Margin.Left, HX) + Canvas.TextWidth(S), ARect.Bottom);
DrawTextRect(HRect, HX, ARect.Top, S, ETO_CLIPPED or ETO_OPAQUE);
NifUrl:= False;
i:= 0;
S:= '';
end else
if Tmp then
begin
S:= S + Parser.TokenString;
Inc(i);
end else i:= 0;
Parser.NextToken;
end;
finally
Parser.Free;
end;
Canvas.Font.Color:= Font.Color;
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
|