お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"TEditorオーナードローサンプル"

この発言に対し以下のコメントが寄せられています
#01277 H-Triton さん RE:TEditorオーナードローサンプル

本田勝彦さんのTEditorコンポーネントでオーナードローを利用して キャレットがある行のテキストを強調表示するサンプルです。 マウスカーソルの下にある特定の文字を強調表示するなどの応用も 工夫すれば可能です。 // 再描画領域を計算して取得する function GetInvalidRect(Editor: TEditor; aRow: Integer): TRect; var aTop: Integer; begin with Editor do begin aTop:= TopMargin + RowHeight * aRow; Result:= Classes.Rect( LeftMargin, aTop, ClientWidth, aTop + RowHeight - 1); end; end; // キャレットが移動した時に呼び出されるイベント procedure TForm1.Editor1CaretMoved(Sender: TObject); const OldRow: Integer = -1; // 型付定数は静的変数として利用できる var iRect: TRect; begin // キャレットが行を移動した時だけ処理する if Editor1.Row <> OldRow then begin if OldRow > -1 then begin // 以前にキャレットがいた行を通常字体に戻す再描画 iRect:= GetInvalidRect(Editor1, OldRow); // これはTEditorのメソッドではなくAPIです。 InvalidateRect(Editor1.Handle, @iRect, False); end; // 現在キャレットがいる行を強調する再描画 iRect:= GetInvalidRect(Editor1, Editor1.Row); InvalidateRect(Editor1.Handle, @iRect, False); OldRow:= Editor1.Row; end; end; // 行単位でテキストをオーナードローするイベント procedure TForm1.Editor1DrawLine(Sender: TObject; LineStr: String; X, Y, Index: Integer; ARect: TRect; Selected: Boolean); begin // キャレット行が描画される時は Row = Index となる with Editor1 do if Row = Index then Canvas.Font.Style:= [fsBold] else Canvas.Font.Style:= []; Editor1.DrawTextRect(ARect, X, Y, LineStr, ETO_CLIPPED or ETO_OPAQUE); 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