16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:TEditorで Nifty URL"
この発言は #00964 H-Triton さんのTEditorで Nifty URL に対するコメントです
nifty:FDELPHI/MES/16/964 H-Tritonさん:自己レスです。
nifty:FDELPHI/MES/10/6669で "NO"rmalさんからいただいたコメントを
参考に描画処理(横スクロールした時の文字表示崩れ)改善しました。
尚、Nifty URLの検出ルーチンは、1文字づつの判定よりも、TEditorに
新しく実装された TEditorParserオブジェクトを利用して Token単位で
行う方が精度が得られると考えて採用しました。
// 文字列はアルファベット大文字だけで構成されているか?
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;
NifUrl: Boolean;
begin
Editor1.Canvas.Font.Style:= [fsUnderLine];
Editor1.Canvas.Font.Color:= clBlue;
i:= 0;
S:= '';
Parser:= TEditorParser.Create(LineStr);
try
with Editor1 do while not (Parser.Token = toEOF) do
begin
NifUrl:= False;
case i of
0: if Parser.TokenString = 'nifty' then
begin
HX:= X + Parser.SourcePos * (ColWidth + Margin.Character);
NifUrl:= True;
end;
1: if Parser.TokenString = ':' then NifUrl:= True;
2: if IsStrAlphaUpCase(Parser.TokenString) then NifUrl:= True;
3, 5, 7: if Parser.TokenString = '/' then NifUrl:= True;
4: if Parser.TokenString = 'MES' then NifUrl:= True;
6, 8: if IsStrNumeric(Parser.TokenString) then NifUrl:= True;
end;
if NifUrl then
begin
S:= S + Parser.TokenString;
if i = 8 then
begin
DrawTextRect(ARect, HX, ARect.Top, S, 0);
i:= 0;
S:= '';
end else Inc(i);
end;
Parser.NextToken;
end;
finally
Parser.Free;
end;
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
|