2012-01-01 2 views
3
는 내가 지금 어떻게하려고하는 것은

procedure TAboutBox.Timer1Timer(Sender: TObject); 
begin 
Memo1.ScrollBy(0,-1); 
end; 

잇는 TMemo 라인의 텍스트를 포함 잇는 TMemo 컴포넌트와 TTimer를 사용하여 scroling 신용 텍스트를 만드는 것입니다

처음 3 개 라인을 보여줍니다 같은 신용, 뭔가 :

감사합니다에 :
Junifer 람다
Exemple 사용자 2
코더 Monalisa
등 등

모든 것이 예상대로 작동합니다. timer.interval을 1ms로 설정했습니다. 텍스트 스크롤이 원활하게 이루어 지지만 3 번째 첫 번째 줄만 표시됩니다. 그런 다음 메모에서 마우스를 사용하여 수동으로 클릭하고 끌지 않으면 빈 공간이 표시됩니다. 몇 줄을 표시하면 내가 풀 때 다시 사라집니다.

TRichedit과 TListBox를 모두 사용해 보았지만 문제가 지속됩니다. 어떻게 될 수 있니?

+3

1ms? 너무 작지 않아? – Baatar

+0

예, win32에서 TTimer가 Windows 타이머를 사용하고 간격이 USER_TIMER_MINIMUM (0x0000000A)에 잘립니다. – az01

+1

TMemo/TRichEdit/TlistBox를 제외한 대체 답변을 고려합니까? – menjaraz

답변

4

ScrollBy은 원하는대로 할 수없는 것으로 보입니다. 게다가 나는 TMemo도 필요하다고 생각하지 않는다.

나는 이것을 레이블로하고 이것을 타이머 이벤트로 옮길 것이다. 이처럼 :

procedure TScrollingTextForm.FormCreate(Sender: TObject); 
begin 
    Label1.Caption := 
    'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do '+ 
    'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad '+ 
    'minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip '+ 
    'ex ea commodo consequat. Duis aute irure dolor in reprehenderit in '+ 
    'voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur '+ 
    'sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt '+ 
    'mollit anim id est laborum.'; 
    Label1.Top := ClientHeight; 
end; 

procedure TScrollingTextForm.Timer1Timer(Sender: TObject); 
begin 
    Label1.Top := Label1.Top - 1; 
end; 

나는 스크롤 할 때 깜박임을 피하기 위해 이중 (DoubleBuffered := True)를 버퍼 양식을 만드는 데 필요한 것을 발견했다.

+4

폼의'OnPaint' 이벤트에서 텍스트를 사용자 지정하는 것이 약간 더 우아 할 것이라고 생각합니다. –

+0

@andreas 나는 당신이 옳다고 생각하지만 나는 아주 간단한 대답을 목표로 삼고 있었다. 새해 복 많이 받으세요! –

+0

솔루션은 완벽하게 작동하지만 TLabel이 움직일 때 깜박 거리면서 덜 우아 해집니다. Onpaint 이벤트의 양식에 코드를 넣으려고했지만 여전히 깜박입니다. ? –