2017-11-10 3 views
1

런타임에 텍스트를 만들고 채우는 TRichMemo 개체가 있습니다.새 텍스트를 추가 할 때 TRichMemo가 텍스트 특성을 재설정하지 못하도록하는 방법

10 초마다 기능을 트리거하는 타이머가 있습니다. 함수는 다음과 같습니다.

procedure TServerSideForm.NewLineTimerTimer(Sender: TObject); 
var 
    timeForward: TDateTime; 

    timerText: wideString; 

    startRange, endRange: longInt; 
begin 
    timeForward := Time; 
    timeForward := IncSecond(timeForward, ServerSideForm.NewLineTimer.Interval div 1000); 

    //... 

    timerText := TimeToStr(Time) + ' - ' + TimeToStr(timeForward); 


    startRange := Length(WindowMemo.Text); 

    WindowMemo.Text := WindowMemo.Text + sLineBreak + sLineBreak + timerText + sLineBreak + sLineBreak; 

    endRange := Length(WindowMemo.Text) - 1; 


    WindowMemo.SetRangeColor(startRange, endRange, clGreen); 

    //... 
end;  

모든 것이 완벽하게 작동하며 원하는 범위의 텍스트가 녹색이됩니다.

그러나 내 새 텍스트를 TRichMemo에 추가하면 모든 것이 검은 색 텍스트로 다시 설정됩니다.

왜 이런 일이 발생합니까? 이 리셋이 일어나지 않도록하는 방법이 있습니까?

p. SetRangeParams 기능을 사용할 때와 동일한 상황이 발생합니다.

답변

2

type StringText에 액세스하는 대신 Append 메서드를 사용하십시오. 형식이 아닌 리터럴 만 유지되므로이 방법을 사용하십시오.

변경

WindowMemo.Text := WindowMemo.Text + sLineBreak + sLineBreak + timerText + sLineBreak + sLineBreak; 

2

당신은 당신이 언급 한 라인을 대체 할 수있는 나누기 텍스트 withot 라인을 추가로 결정하는 방법

WindowMemo.Append(sLineBreak + sLineBreak + timerText + sLineBreak + sLineBreak); 

uses RichMemoUtils; 
...  
InsertColorStyledText(WindowMemo,timerText,Random($FFFFFF),[],Length(WindowMemo.Text) -1); 
+0

append 문제는 내부적으로 간단합니다 :'Lines.Add (text)'입니다. 따라서 다른 함수에서 텍스트에 단일 문자를 추가하기 때문에 원하지 않는 추가 linebreak를 추가합니다. –

+0

@lilbroomstick 귀하의 회신에 답변을 추가했습니다. –

+0

정말 고마워요! 이게 내가 필요한거야. –

관련 문제