Add ListBox1ItemsAdd("Roman") Примердля ListBox'а. Для вставки строки в определенное место служит метод Insert
![]()
|
Мультипликация. Метод базовой точки.Под мультипликацией обычно понимается движущийся и меняющийся рисунок. В простейшем случае рисунок может только двигаться или только меняться. Обеспечить перемещение рисунка довольно просто: надо сначала вывести рисунок на экран, затем через некоторое время стереть его и снова вывести этот же рисунок, но уже на некотором расстоянии от его первоначального положения. Подбором времени между выводом и удалением рисунка, а также расстояния между старым и новым положением рисунка (шага перемещения), можно добиться того, что у наблюдателя будет складываться впечатление, что рисунок равномерно движется по экрану. Метод базовой точкиСледующая простая программа показывает, как можно заставить двигаться изображение, сформированное из графических примитивов. Окно и форма программы приведены на рис. 3.14. ![]() Рис. 3.14. Окно и форма программы На поверхности формы находится один-единственный компонент Timer, который используется для генерации последовательности событий, функция обработки которых обеспечивает вывод и удаление рисунка. Значок компонента Timer находится на вкладке System (рис. 3.15). Следует обратить внимание, что компонент Timer является невизуальным. Это значит, что во время работы программы компонент в диалоговом окне не отображается. Поэтому компонент Timer можно поместить в любую точку формы. Свойства компонента Timer приведены в табл. 3.7. ![]() Рис. 3.15. Значок компонента Timer Таблица 3.7. Свойства компонента Timer.
Компонент Timer генерирует событие OnTimer. Период возникновения события onTimer измеряется в миллисекундах и определяется значением свойства interval. Следует обратить внимание на свойство Enabled. Оно дает возможность программе "запустить" или "остановить" таймер. Если значение свойства Enabled равно false, то событие onTimer не возникает. В рассматриваемой программе вывод изображения выполняет функция ship, которая рисует на поверхности формы кораблик. В качестве параметров функция ship получает координаты базовой точки. Базовая точка (X0, Y0) определяет положение графического объекта в целом; от нее отсчитываются координаты графических примитивов, образующих объект (рис. 3.16). Координаты графических примитивов можно отсчитывать от базовой точки не в пикселах, а в относительных единицах. Такой подход позволяет легко выполнить масштабирование изображения. ![]() Рис. 3.16. Базовая точка (х0, у0) определяет положение объекта Мультипликация. Метод базовой точки.Перед тем как нарисовать кораблик на новом месте, функция обработки события от таймера стирает кораблик, нарисованный в процессе обработки предыдущего события onTimer. Изображение кораблика стирается путем вывода прямоугольника, перекрывающего его. Функции обработки события OnTimer, функция Ship и функция FormCreate, обеспечивающая настройку таймера, приведены в листинге 3.6. Листинг 3.6. Простая мультипликация. int х = -68, у = 50; // начальное положение базовой точки // рисует на поверхности формы кораблик void __fastcall TForml::Ship(int x, int y) { int dx=4,dy=4; // шаг сетки // корпус и надстройку будем рисовать // при помощи метода Polygon TPoint pi[7]; // координаты точек корпуса TPoint p2[8]; // координаты точек надстройки TColor pc,bc; // текущий цвет карандаша и кисти // сохраним текущий цвет карандаша и кисти рс = Canvas › Pen › Color; be = Canvas › Brush › Color; // установим нужный цвет карандаша и кисти Canvas › Pen › Color = clBlack; Canvas › Brush › Color = clWhite; // рисуем… 11 корпус pl[0].x = x; pl[0].y = y; pl[l].x = x; pl[l].y = y-2*dy; pl[2].x = x+10*dx; pi[2].у = y-2*dy; pl[3].x = x+ll*dx; pl[3].y = y-3*dy; pl[4]-x = x+17*dx; pi[4].у =y-3*dy; pl[5].x = x+14*dx; pi[5].у =y; pl[6].x = x; pl[6].y =y; Canvas › Polygon(pl,6); // надстройка p2[0].x = x+3*dx; p2[0].y = y-2*dy; p2[l].x = x+4*dx; p2[l].y = y-3*dy; р2[2].х = x+4*dx; p2[2].y = y-4*dy; р2[3].х = x+13*dx; p2[3].y = y-4*dy; р2[4].х = x+13*dx; p2[4].y = y-3*dy; р2[5].х = x+ll*dx; p2[5].y = y-3*dy; р2[6].х = x+10*dx; p2[6].y = y-2*dy; р2[7].х = x+3*dx; p2[7].y = y-2*dy; Canvas › Polygon(p2.7); Canvas › MoveTo(x+5*dx,y-3*dy); Canvas › LineTo(x+9*dx,y-3*dy); // капитанский мостик Canvas › Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy); // труба Canvas › Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); // иллюминаторы Canvas › Ellipse(x+ll*dx,y-2*dy,x+12*dx,y-l*dy); Canvas › Ellipse(x+13*dx,y-2*dy,x+14*dx,y-l*dy); // мачта Canvas › MoveTo(x+10*dx,y-5*dy); Canvas › LineTo(x+10*dx,y-10*dy); // оснастка Canvas › Pen › Color = clWhite; Canvas › MoveTo(x+17*dx,y-3*dy); Canvas › LineTo(x+10*dx, y-10*dy); Canvas › LineTo(x,y-2*dy); // восстановим цвет карандаша и кисти Canvas › Pen › Color = рс; Canvas › Brush › Color = be; } // обработка события OnTimer void__fastcall TForml::TimerlTimer(TObject *Sender) { // стереть кораблик – закрасить цветом, совпадающим // с цветом фона (формы) Canvas › Brush › Color = Forml › Color; Canvas › FillRect(Rect(x-1,y+l,x+68,y-40)); // вычислить координаты базовой точки х+=3; if (x > ClientWidth) { // кораблик "уплыл" за правую границу формы х= -70; // чтобы кораблик "выплывал" из-за левой границы формы y=random(Forml › ClientHeight); } // нарисовать кораблик на новом месте Ship(х, у);) // обработка события OnCreate для формы void__fastcall TForml::FormCreate(TObject *Sender) { /* Таймер можно настроить во время разработки программы (в процессе создания формы) или во время работы программы. */ // настройка и запуск таймера Timerl › Interval = 100; // период события OnTimer – 0.1 сек. Timerl › Enabled = true; // пуск таймера } |