3

インターネットの集合的な不思議な人に挨拶します。

TEdit(実際にはBerg NextSuiteのTNxEditですが、TEditの派生語です)で特定の単語に下線を付けようとしています。ただし、これを行うには、その単語のピクセル座標を知る必要があります。

これは、テキストの先頭が表示されている場合はかなり簡単ですが、テキストの先頭が最後からスクロールされている場合は、その方法を理解できません。

特定の単語の正確な座標を直接決定する方法はありますか?それができない場合、編集で表示されるテキストと表示されないテキストを判別しますか?または他の独創的な方法。

編集1:現在の回答のいくつかをカバーするには:

要件は、TNxGridコンポーネントの列にスペルチェッカーを実装することです。これにより、TNxEditに制限されます。使用するコンポーネントを選択できれば、今までに切り替えていただろう:(

線画ができます。TNxEditにはキャンバスがあり、正しい座標を計算できるので、非常に楽しく下線を描くことができます。

編集テキストの開始が表示されている場合、つまり前面からスクロールしない場合は、TextExtentを使用して正しい開始位置と行の長さを判断できます。

この問題は、テキストの先頭が前面からスクロールアウトされたシナリオで発生します。前面からどれだけスクロールされているかを判断できないということは、ラインの開始位置を特定できないことを意味します。ハイライトしたい単語も部分的にスクロールすると、行の長さが問題になります。

4

2 に答える 2

8

テキストの特定の部分の座標を取得するには、EM_POSFROMCHARを使用(メッセージの送信)してみてください。例えば:

pPoint: TPoint;
SendMessage(Wnd, EM_POSFROMCHAR, WPARAM(@pPoint), charIndex);

ただし、下線を引くと、コントロールをサブクラス化してカスタムペイントを実装する必要がある可能性が高いことに注意してください。したがって、@ GolesTrolが行った提案は価値があります。つまり、必要な機能をすでにサポートしている既存のコントロールから選択してみてください。

于 2012-09-23T18:10:06.857 に答える
-1

TEditはシステムWin32EditクラスのDelphiラッパーであり、特定の単語にアンダースコア属性を設定する機能を提供していません。また、TEditはそのような機能を追加していません。TRichEditによると、より強力なクラス、delphiのコンポーネントの使用を検討することをお勧めします。複雑なタスクに直面したい場合は、フォント(GetTextExtentExPointなどを参照)を指定して文字列の範囲を計算し、xの開始/終了位置を取得してみてください。線、(編集の境界線を考慮してxオフセットを追加します)、HDC(TCanvas)に線を引きます

于 2012-09-23T18:08:41.353 に答える