Урок 27 Визуальные эффекты.Эффект печатной машинки.
July 5, 2006
в колонках играет Edward Shearmur - Grand Central
Этот эффект позволит вам нагонять пафосу в ваших программах, а особенно в играх.
Для его осуществления мы используем компоненты TTimer со вкладки
System и TMemo(надеюсь не надо говорить, где он находится...после 26 уроков можно было и запомнить)
Для начала мы сделаем так, чтобы наша форма была на весь экран и Memo полностью занимал нашу форму.Не спешите делать это вручную, все равно получится криво...
Для этого в событии onCreate нашей формы напишем:
//устанавливаем положение и размеры формы
Form1->Top=0;
Form1->Left=0;
Form1->Width=Screen->Width;
Form1->Height=Screen->Height;
Form1->FormStyle=fsStayOnTop;//делаем нашу форму поверх всех окон
Form1->BorderStyle=bsNone; //убираем рамку вокруг формы
Теперь изменим св-ва Memo1. В инспекторе объектов поменяйте:
Align=alClient
Color=clBack
BorderStyle=bsNone
Font->Color=clGreen
Font->Style->fsBold=true
Остальные св-ва по вашему усмотрению.
Нажав F9 вы увидите очень чёрный экран с зелёной надписью.Страшо?Чуствуете себя хакером наверно..к сожалению время чёрно-зелёных мониторов прошло, но ностальгия всё равно мучает...
Кстати, форма закрывается нажатием Alt+F4, как и все окна в Виндовсе.Можно это исправить, если поменять свойство формы KeyPreview на true и записать следующий код в событие формы onKeyPress:
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key==VK_ESCAPE){Close();}//при нажатии ESC наша форма закроется.
}
Теперь кинем на форму ещё один Memo(назовём его Memo2) и сделаем его невидимым: св-во visible=false.
нажмите на квадратную кнопку около Lines и впишите любой текст.
Теперь объявим две переменные в заголовочном файле unit1.hв секции private:
private: // User declarations
int i,j;
Переходим обратно в Unit1.cpp и в событие onCreate формы добавляем следующий код:
i=0;
j=Memo2->Text.Length();//присваиваем переменной количество символов в тексте
Memo1->Clear(); //очистка Memo1
Timer1->Enabled=true;//запуск таймера
Осталось немного.В событии Timer1 onTimer напишите:
i++;
if(i==j){Timer1->Enabled=false;}
Memo1->Text=Memo1->Text+Memo2->Text.SubString(i,1);
Этот код будет перебирать по одному символу из Memo2 и добавлять его в конец Memo1.Когда счётчик i достигнет значения последнего символа в Memo2 - то таймер остановиться. !НЕ забудьте установить интервал таймера поменьше, иначе пользователь вашей программы может уснуть, ожидая, пока весь текст появится.Я рекомендую значения Timer1->Interval от 1 до 150мс
Всё!Можно запускать!
Author of article - MA F*CKA CREW 2006
www.builderhelper.3dn.ru
builder.helper@rambler.ru