Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с TLabel [D7, XP]


Страницы:   1 2 3

hypnotize ©   (2007-01-18 17:02:00) 

Всем здраствуйте, проблема такая, сделал я ефект появления текста, аля матрица, то биш текст будто печатается, нарастает по одной букве, для сего эфекта использовал я TLabel и TTimer с интервалом 10, вроде как все работает, но сам лейбл во время появления текста моргает, как избавитсяот этого?


Комбинатор   (2007-01-19 11:44:00) [21]

Наверное:

1) надо создать два канваса.
2) рисовать на обоих (по очереди)
* рисовать - в смысле печатать текст (см. DoDrawText у TCustomLabel)
3) затем менять поверхности местами - типа получиться эмуляция буферизации.


Kolan   (2007-01-18 22:57:00) [22]

procedure TForm3.Timer1Timer(Sender: TObject);
begin
I := I + 1;
if Memo1.Lines.Text[I] = ' ' then
begin Form3.Timer1Timer(sender);
  Exit;
end; // Это чтобы пропускать пробелы
Label1.Caption := Label1.Caption + Memo1.Lines.Text[I];
if I > Length(Memo1.Lines.Text) then
  Timer1.Enabled := False;

end;


Проверил. Ниче не моргает при интервале 10. А при 100 супер вообще :).


hypnotize   (2007-01-18 22:20:00) [23]

Пустой проект тоже моргает, но внем слабо заметно, наверно потому что в моём зеленый шрифт по черному сильнее видно, ладно пытаюсь рисовать...


hypnotize   (2007-01-18 22:20:00) [24]

Пустой проект тоже моргает, но внем слабо заметно, наверно потому что в моём зеленый шрифт по черному сильнее видно, ладно пытаюсь рисовать...


default   (2007-01-18 22:12:00) [25]

hypnotize   (18.01.07 22:10) [23]
попробуй в чистом проекте
фигня какая-то
что-то никто не может сказать моргает-ли у него
у меня просто дельфи нету...
пиши пока код отрисовки по букве, это недолго на самом деле
если уж двойная буферизация не помогает...


hypnotize   (2007-01-18 22:10:00) [26]

нет, моргают даже длинные однострочными((((


default   (2007-01-18 22:06:00) [27]

слушай, попробуй сначала с однострочным лейблом
если не моргает, вместо многострочного лейбла можешь использовать несколько однострочных


default   (2007-01-18 21:55:00) [28]

hypnotize   (18.01.07 21:34) [13]

> Текста много и рисовать нужно будет часто, так что это не
> катит.

чё это за фикня?
рисуй по букве, в чём трабл? ширину буквы можно получить, нарисовать буквы знаем как
единственное, в OnPaint(когда твоя строка чем-то по какой-то причине инвалидируется) попробуй всё перерисовывать всё сначала
если будет хреново будешь и в OnPaint перерисовывать только то что надо
вообще странно всё это....не должно ничего моргать на самом-то деле
спроси у кого дельфи стоит у них  у всех моргает?


hypnotize   (2007-01-18 21:48:00) [29]

да я с этого и начал) не помогает


default   (2007-01-18 21:45:00) [30]

hypnotize   (18.01.07 21:34) [13]
попробуй сначала двойную буферизацию для формы установить


hypnotize   (2007-01-18 21:42:00) [31]

Текста много и рисовать нужно будет часто, так что это не катит.


default   (2007-01-18 21:41:00) [32]

если тебя итересует просто вывести текст можешь его в ручную отрисовывать по букве в таймере
а в OnPaint поставишь всю строку выводить(на случай затирания)


hypnotize   (2007-01-18 21:39:00) [33]

Может стоить попробывать на канве этот текст рисовать? Раз компоненты моргают все


hypnotize   (2007-01-18 21:38:00) [34]

2Kolan
Проверил, действительно все работает, только к моему вопросу это не относится =(


default   (2007-01-18 21:36:00) [35]

hypnotize   (18.01.07 21:34) [13]
я в Visual Studio 2005 пробовал, .net контролом Label
видимо всё дело в том, что в .net GDI+ и она буферизует


hypnotize   (2007-01-18 21:34:00) [36]

2Vovan #2
Transparent := False ?
Что тру, что фалс, адинаково моргает :)

2default
Хм, странно, у меня с твоим кодом все равно глючит, может потому что текст много строчный...


Kolan   (2007-01-18 21:33:00) [37]

«Label.Caption := Copy(Memo1.Lines.Text,0,I);»

А нельзя так(нафик Copy:
 Label.Caption := Label.Caption + Memo1.Lines.Text[I];

И тут:
if Copy(Memo1.Lines.Text,I-1,1) = ' ' then
if Memo1.Lines.Text[I] = ' ' then

Ессно не проверял. Просто на мысл навожу.


Kolan   (2007-01-18 21:31:00) [38]

«интервалом 10»

Поставь побольше.


«двойная буферизация только для картинок »

У формы, может?

Урок нормального кода:

var
 I: Integer;

procedure TForm1.TimerTimer(Sender: TObject);
begin
 I := I + 1;
 if Copy(Memo1.Lines.Text,I-1,1) = ' ' then
 begin Form1.TimerTimer(sender);
   Exit;
 end; // Это чтобы пропускать пробелы
 Label.Caption := Copy(Memo1.Lines.Text,0,I);
 if I > 100 then
   Timer.Enabled := False;
end;


теперь можно постараться понять :)


default   (2007-01-18 21:29:00) [39]

hypnotize   (18.01.07 21:23) [8]
обычный код
Label1.Caption = Label1.Caption + "L" в таймере


Vovan #2   (2007-01-18 21:28:00) [40]

Transparent := False ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо