いつもお世話になっております。標記の件について相談させてください。
1 不具合の再現方法
・使用するコンポーネントは、TurboPack SynEditの最新版。
・フォームにSynEdit1と構文強調表示用のコンポであるSynPasSyn1
を配置。
・SynEdit1のフォント名をMSゴシックにし、Highlighterとして
SynPasSyn1を指定。
・SynPasSyn1のNumber(整数)のFont.StyleをBoldに設定。
2 不具合の内容
上記をコンパイルして、ひたすら数字を打ち続ける(例:2222222222…)
すると、通常であれば、Caretは打った文字の直後に表示されるはずが、
だんだん入力した文字の中に食い込んで表示される。
(イメージ:222222222|222)
※CharWidthといったプロパティ値を少し大きくすれば解決するかとも
思ったのですが、その場合、Boldでない文字を打ったとき、今度は
キャレットが何もない領域に表示されてしまいました。
詳しくないのですが・・・・
Delphi 12.1 のGetItでSynEdit for VCL 2024.02 をインストールし、
フォントをMSゴシックにしたときBoldの文字でCaretの位置がずれるのを確認いたしました。
一方、Delphi 10.2.3のSynEdit for VCL 1.3では、この現象は発生しなかったです。
GitHub - TurboPack/SynEdit
https://github.com/TurboPack/SynEdit
の
Releases · TurboPack/SynEdit · GitHub
https://github.com/TurboPack/SynEdit/releases
には
> Last release based on GDI painting
> As the project has now moved to text painting using DirectWrite,
とあるので、最新版では DirectWrite を使っているみたいですね。
最新版にこだわらなければ、少し古いバージョンを検討してみるのもよいかもしれません。
ご多忙な中、貴重なご助言ありがとうございます。実際、どこの部分で描画しているのか、休みを使って一生懸命追おうとしましたが、コードの波に押し寄せられ、うまく辿り着けないでおりました。
描画方法が変わったのですね。カラーの絵文字なども描画できるようになり、密かに喜んでいたのですが、少し残念です。
ただ、実使用上は通常の文字の正常な描画環境が確保できるのであれば、現状は問題ないかな、という感じです。
当面は古い環境で使ってみて、時期を見て再トライする方向にしたいと思います。
後ほど結果はご報告いたします。
先ほど、
https://github.com/TurboPack/SynEdit/releases/tag/LastGDIbased
(Last release based on GDI painting)
をダウンロードし、Alexandria\Delphiフォルダ内の「SynEditDelphi.groupproj」
を使って「EmbarcaderoR Delphi 11 バージョン 28.0.48361.3236」
に インストールしようとしました。
その結果、ユニット「SynEditRegexSearch」の中にある、次の
3か所で「未定義の識別子:SetAdditionalPCREOptions」という
エラーが出て、インストールが完了しませんでした。
FRegEx.SetAdditionalPCREOptions
RegEx.SetAdditionalPCREOptions(PCRE_UCP);
RegEx.SetAdditionalPCREOptions(PCRE_UCP);
この3行を無理やりコメントアウトすると、何とかインスト
ールできるのですが、可能であれば、極力そのままの形でイ
ンストールしたいと思っています。
もしこの部分の手直し方法をご存じの方がいればご教示を
お願いできれば幸いです。見たところ、Delphi 標準の正規表
現ライブラリ?のメンバ関数名が変わったのかな?とも思え
ました。
> もしこの部分の手直し方法をご存じの方がいれば
正しいかは、わからないのですが、
最新版のファイル SynEditRegexSearch と入れ替えて試しにコンパイルしてみるとか・・
Embarcadero® Delphi 11 バージョン 28.0.44500.8973 だけど
インストールしてもエラーは出ないね
回答ありがとうございます。
確かにご指摘のとおり、3行部分だけをなんとかすればインストールできるのでは、という発想から、最新版のユニットと比較したところ、この三行以外は基本同じでした。
そのため、ユニットを最新版に入れ替えましたところ、無事インストールできました。
これから動作を検証してみたいと思います。
AAAAA様、時間をとって検証いただき、ありがとうございます。改めて最初からやってみたのですが、やはり3行部分で引っかかりました。
そのため、上記のような対応で回避いたしました。
ツイート |