2012-01-01 4 views
3

を示しTMemoオブジェクトのコンポーネントを使用してscroling信用テキストを作成することで、TTIMERスクロールTTIMERを使用してメモテキストは私が今やろうとしていますものだけを最初の3行

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

TMemoオブジェクトラインはのテキストを含みますクレジット、のようなもの:

ありがとうへ:
Junifer、ラムダ
Exempleユーザーなどなど2
コーダーモナリザ

すべてが期待どおりに動作しています。私は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イベントのフォームにコードを挿入しようとしましたが、まだ点滅しています。 ? –