掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
色分けをやってみたいんですけど…。 (ID:1055)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> Boyer-Mooreアルゴリズムは、場合によっては最初のテーブル作成で時間がかかる場合があります。 > 単純探索でも結構早く動作すると思いますよ。 そうなんですか、 なら、一種類の文字検索のときは、そのほうがよさそうですね。 でも、今回は、複数の文字(15種類)を検索しようとしてるので、 標準方法よりこっちのほうがはやそうです^^; 文字列の中を探すのも、一回で済みますし。 (このコンポーネント、複数の文字列をすばやく検索できるように、BM法を拡張したものだそうです) > Perform関数は、SendMessageのように見えて、そうではないようです。 > ソースをみるとわかりますが、WindowProcを直に呼んでいます。 そうなんですかぁ、Personalなので、ソースはないです。勉強になります。 で、全部の記述をPerformに変えてみたんですけど、だめでした。 いろがえの部分を、SelAttributesに変えてみたら、いちおう普通にできたので、他のところでは失敗してないみたいです。 TCharFormatのところも、デバッグで調べてみましたけど、問題ないみたいです。 (途中で見失ったということはないと思います…、たぶん…) PerForm(EM_EXSETSEL, 0, lParam(@CR)); // SelAttributes.Color := CFont[FoundPatternIndex].crTextColor; // これだと成功 PerForm(EM_SETCHARFORMAT, SCF_SELECTION, lParam(@CFont[FoundPatternIndex]));//書式決定 Application.ProcessMessages; こんな感じです。 範囲の検索はこんな感じです。 11..14:begin // (か[か{か'が検索された EndFound := AnsiStrPos(FoundPos,EndChar[FoundPatternIndex - 11]); if not Assigned(EndFound) then Continue; // 終了符が見つからない(脱出) CR := NewCharRange(fp,EndFound - @str[0] + 1); end; // FoundPos コンポーネントが文字を発見した位置ポインタ // EndChar ),],},'などが入ったPCherの配列(いちいち定数をキャストするより早い?)、色分け目的の文字 // str エディタないの文章そのもののポインタ // NewCharRange CharRange構造体を一行で書く^^;関数 最初に with Edit,EBMSearch.Create(Self) do begin // Edit エディタ // EBMSearch BM法複数文字列検索コンポーネント。 // FDelphiにあったソースではコンパイルできなかったので、registerをつけて、継承さきをTComponentに変更しました。 を書いてます。もしかしてこれが原因ということはないですよね…。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.