2

(私の問題をよりよく理解し、定義できる場合は、誰かがタイトルを編集してください。)

私が抱えている問題は、リッチエディットのスタイルの書式設定がデフォルトの「何もない」別名に「戻り」[]、その後、太字や斜体など、設定したものに戻ることです。

障害があるのは、それがどのように問題を引き起こしているのかわからないためだと思いますが、リッチエディットの行数をチェックし、特定のポイントに達するまで最初の行を削除する手順 (REMainLinesCheck) です (表示するため)。一度に最大 14 行) のように:

while REMain.Lines.Count > 14 do
  REMain.Lines.Delete(0); 

リッチエディットに行を追加する他の手順で上記の手順が 6 回発生しますが、変更されるのRichEdit.SelAttributes.Styleは 1 つだけで、次のように太字の行が 1 つだけ追加されます。

REMain.SelAttributes.Style := [fsBold];
REMain.Lines.Add('something');
REMainLinesCheck;

そのため、その 1 つを除いてすべてのオカレンスを削除し、突っ込み始めました。実際に正常に追加された通常の太字の行と削除された余分な行が実際に機能していることを確認するのにそれほど時間はかかりませんでした-問題ありません。しかし、REMainLinesCheck プロシージャを別のプロシージャに再導入するとすぐに (わかりやすくするために、Proc3Lines と呼びます。3 行を追加し、余分な行のチェックを呼び出すためです)、この Proc3Lines に続くすべての行は Bold にする必要があります。ではありません... 私がここで経験したことから、REMainLinesCheck は Proc3Lines で何かを行うようです。

明らかに、相互に呼び出すプロシージャの輪ではありませんが、コードの他の部分はこの RichEdit とは何の関係もありませんRichEdit.SelAttributes.Style。同じユニットの別のリッチエディットで、その行のスタイルをそのように変更しましたが、それは何らかの形で関連する可能性はありません... そうでしょうか? (いいえ、そうではありません、私はちょうどチェックしました。)

基本的に:一体何Delphi?これより簡単になることはありませんが、私はまだ失敗しています。誰かがこれを説明および/または修正できますか? 質問してください。不明な点があれば、できる限り詳しく説明します。

4

2 に答える 2

6

新しく追加された行にフォーマットを適用するには、次を使用します。

procedure TForm1.Button1Click(Sender: TObject);
var
  LineIndex: Integer;
begin
  LineIndex := RichEdit1.Lines.Add('Something');
  RichEdit1.SelStart := RichEdit1.Perform(EM_LINEINDEX, LineIndex, 0);
  RichEdit1.SelLength := RichEdit1.Perform(EM_LINELENGTH, RichEdit1.SelStart, 0);
  RichEdit1.SelAttributes.Style := [fsBold];
end;
于 2012-05-18T00:43:07.777 に答える
0

これは私のために働いています:

procedure TformStart.Proc;
var
endtxtpos: integer;
begin
  endtxtpos := Length(REMain.Text);
  REMain.Lines.Add('something');
  REMain.SelStart := endtxtpos-(REMain.Lines.Count-1);
  REMain.SelLength := Length('something');
  REMain.SelAttributes.Style := [fsBold];
end;

しかし、私はそれ以上よくわからないので、批判して、どうすればもっとうまくできるか提案してください.

于 2012-05-18T08:34:03.993 に答える