Прокрутка текста заметки с использованием TTimer показывает только первые 3 строки - PullRequest
3 голосов
/ 01 января 2012

что я пытаюсь сделать сейчас, это создать текст прокрутки кредита с использованием компонента TMemo и TTimer

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

строки Tmemo содержат текст кредита, что-то вроде:

Спасибо:
Джунифер Ламда
Исключить пользователя 2
Кодер Моналиса
и т. Д.

Все работает, как и ожидалось, я установил timer.interval в 1 мс, текст прокручивается плавно, но отображаются только 3 первые строки, затем отображается пустое пространство, если только я не щелкаю и не перетаскиваю вручную, используя мышь внутри заметки , затем он отображает несколько строк, затем он снова исчезает, когда я отпускаю.

Я пробовал и с TRichedit, и с TListBox, но проблема сохраняется. Как это могло произойти ?

1 Ответ

4 голосов
/ 01 января 2012

Мне кажется, что 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), чтобы избежать мерцания при прокрутке.

...