お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"TEditor オーナードロー"




今 10番会議室で話題の高性能エディタコンポーネント TEditrorのオーナー
ドローで予約語をハイライト表示(文字色を変えて下線付で表示)するサンプル
コードです。
この方法は、デリミターに依存しないので Niftyのログなど自由に書かれたテ
キストでも有効です。

(1)プロパティ設定
   DrawStyle:dsOwnerDraw
   ReserveFontColor:適当なハイライト色を指定する。
   ReserveWordList :ハイライトしたい予約語を登録する。
    Addメソッドで実行時にアプリユーザーが登録できるようにする、あるいは
    テキストに含まれる URLなどを検出してリストに追加するなど)

(2)Mathユニットをインクルードする。
uses Windows, Messages, ...(中略) .... , Math;

(3)デリミターを無効にする。
procedure THTEMain.FormCreate(Sender: TObject);
begin
  Editor.Delimiters:= [];
end;
こうすると、OnDrawWordイベントハンドラーの引数 WordStrに
1行文の文字列が渡される。

(4)OnDrawWordイベントハンドラーに以下のコードを記述する。

procedure TForm1.Editor1DrawWord(Sender: TObject; WordStr: String;
  Reserved: Boolean; Rect: TRect; X, Y, RowNumber: Integer);
var
  i, p, HX: Integer;
  HRect: TRect;
  R: string;
begin
  with Editor do
  begin
    // フォントをデフォルトに戻す
    Canvas.Font.Color:= Font.Color;
    Canvas.Font.Style:= Font.Style;
    // とりあえず普通に文字を書き込む
    Canvas.Brush.Color:= Color;
    Canvas.FillRect(Rect);
    Canvas.TextRect(Rect, X, Y, WordStr);
    // 予約語の部分だけ指定した色とスタイルで上書きする。
    for i:= 0 to ReserveWordList.Count - 1 do
    begin
      R:= ReserveWordList[i];
      p:= Pos(R, WordStr);
      if p > 0 then
      begin
        Canvas.Font.Color:= ReserveFontColor;
        Canvas.Font.Style:= [fsUnderLine];
        HX:= X + Canvas.TextWidth(Copy(WordStr, 1, p - 1));
        HRect:= Classes.Rect(Max(LeftMargin, HX), Y,
          Max(LeftMargin, HX + Canvas.TextWidth(R)), Rect.Bottom);
        Canvas.TextRect(HRect, HX, Y, R);
      end;
    end;
  end;
end;


           ○ 極楽通信環境 AvalonU  nifty:FAVALON/LIB/3/59 ○
           ● 極道録眼鏡「えるつぅ」 nifty:FAVALON/LIB/3/60 ●
         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