
Графика в Linux/Kylix
Xakep, номер #035, стр. 035-071-1
Horrific (smirnandr@mail.ru) www.cydsoft.com/vr-online/
Кто сказал, что работа с графикой в Linux - болезнь гемора? Кто сказал, что Linux нормально работает только в текстовом режиме? Да, графическая оболочка в Linux притормаживает по сравнению с окнами. Но это не значит, что работа невозможна.
НАЧНЕМ-Сссс
С помощью Kylix работа с графикой в Linux превращается в увлекательнейшее занятие. Сегодня я покажу тебе, как создать простенькую анимацию. Для этого заготовь какой-нибудь рисунок любого размера, желательно не более 100 на 100. То, что приготовил я, ты можешь увидеть на рисунке 1. Признаюсь честно, что картинку я нагло стырил, потому что сам я рисовать не умею. Глядя на то, как я рисую, можно сказать, что для меня слово художник происходит от того слова, которое пишут на заборе :).
СРАЗУ ПОшКОДИМ
Запускай Kylix и создавай новый проект. Перейди в редактор кода и найди описание закрытых переменных (об этом мы говорили в самой первой статье). Допиши туда следующее:
private
{ Private declarations }
fbitmap:TBitmap;
X, Y, XR,YR:Integer;
Я дописал сюда несколько переменных, которые буду использовать при анимации. fbitmap - я объявил как объект TBitmap, т.е. точечный рисунок. X, Y, XR и YR - сделал целыми числами. Первые две переменные (X и Y) я буду использовать для хранения текущей позиции картинки. Вторые две будут хранить скорость движения картинки.
ГОТОВНОСТЬ №1
Создай обработчик события для формы OnCreate. Напиши там то, что написано в листинге 1, а я сейчас поясню, что там происходит. В первой строке я инициализирую переменную fbitmap. Для этого надо ей присвоить TBitmap.Create. Почему именно это надо присвоить? Да потому что переменная fbitmap типа TBitmap, поэтому нужно вызвать именно его метод Create. Почему fbitmap нужно инициализировать? Потому что это объект, который использует память, а во время инициализации выделяется необходимая память и инициализируются необходимые свойства значениями по умолчанию.
Определить переменные, которые надо инициализировать, очень легко. Если название ее типа начинается с буквы Т, то инициализация обязательна. Все, что начинается с Т, это объекты. Они используют память и требуют инициализации. Для этого нужно вызвать метод Create (иногда называется конструктором) объекта, как мы это делаем с картинкой.
Во второй строке я загружаю картинку. У нашего объекта fbitmap есть метод LoadFromFile. В качестве параметра нужно указать имя файла, который нужно загрузить. Если файл находится в той же директории, то можно указать только имя. Если где-то в другом месте, то придется указывать полный путь.
Далее я присваиваю переменным Х и Y значение 0. Это будет начальное положение картинки. А переменным XR и YR - значение 5. Это будет скорость движения картинки.
ГОТОВНОСТЬ №2
Теперь создай обработчик события OnPaint. Напиши там все, что показано в листинге 2. Мы уже занимались рисованием в Delphi, здесь это происходит точно так же. Сейчас я тебе напомню, как это делается.
Для рисования используется объект TCanvas. У большинства компонентов уже есть свойство Canvas (по-русски холст), которое ты можешь использовать для вывода графики. У главной формы тоже есть такое свойство, так что им мы и воспользуемся.