Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Ввыводим текст и графику, используя DelphiX

Встречаются два квакера.
- Hу как жизнь?
- Да так, процентов на тридцать.

Итак, цель нашего первого урока - вывести текст и графику. Сначала определимся, куда же пихать эти самые текст и графику. Сначала поставьте на форму DXDraw, при этом в свойствах, в разделе "Options" измените "doFullScreen" и "doFlip" на "True", чтобы при запуске программа заполняла весь экран. Запустите и проверьте. Если вы видите черный экран, все нормально. Выходить придется Ctrl-Alt-Del'ом, так как процедуры выхода из программы мы еще не написали. "Рабочий стол" готов.

Теперь нарисуйте какую-нибудь картинку, по размерам экрана. Я возьму "Космос"( черный экран и белые точки, рисуется распылителем в Paint'e), сохраняем, как "cosmos.bmp". Вроде этого:

Теперь нарисуем то, что должно будет двинаться по "космосу" в следующих уроках, а пока это самое будет просто отображаться. Я опять же нарисую в Paint'у летающую тарелку(жирный овал,"tarelka.bmp"), вроде этого:

Копируем эти рисунки, в папку с Дельфи-проектом. Ставим на форму DXSpriteEngine и DXImageList. Выбираем в их свойстве "DXDraw" "DXDraw1", уже сконфигурированный нами в предыдущем абзаце. В свойствах Имаг-листа(DXImageList) выбираем "Items". В раскрывшемся окне создаем два объекта, назовем их "cosmos" и "tarelka", в свойстве "Picture" укажем путь к "cosmos.bmp" и "tarelka.bmp" соответственно.

Теперь самое сложное: поскольку ДельфИкс создавал какой-то, хоть и очень умный, но один человек, а не корпорация, нам придется ВРУЧНУЮ прописывать класс спрайтов(рисунков). Открываем редактор кода, в части "Implementation", после "Var" пишем "type" и с новой строчки:


TCosmos = class(TImageSprite)
public
  constructor Create(AParent: TSprite); override;
end;

TTarelka = class(TImageSprite)
public
  constructor Create(AParent: TSprite); override;
end;

Разбираемся: "Tcosmos" - имя будущего класса, "Class(TImageSprite)" - указывает, что будущий класс относится к ImageSprite'ам, "Public" - указывает, что следующий раздел глобальный, "Constructor" - указывает, что следующая процедура относится к подклассу конструкторов, "Create(AParent: TSprite); Override;" - надо заучить как молитву, т.к. эта процедурка будет создавать ВСЕ спрайты в ваших программах, "End;" обозначает, что описание класса завершено.

Но процедуры мало Описать, их надо ещё и ПРОписать. В этом же разделе, после описания всех классов, пишем:


constructor Tcosmos.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := Form1.ImageList1.Items.Find('cosmos');
  X := x;
  Y := x;
  Z := z;
  Width := Image.Width;
  Height := Image.Height;
  PixelCheck := True;
end;

Учить точно так же, как и описание этого самого конструктора. Изменятся будут только подчеркнутые элементы. "Form1.ImageList1.Items.Find('cosmos')" - путь к спрайту "cosmos", меняться будут толко имена спрайтов. "x" - координата по горизонтали, у всех фоновых рисунков равна единице. "y" - координата по вертикали, у всех фоновых рисунков также равна единице. "z" - глубина рисунка, при наслоении двух спрайтов отображается тот, у которого "z" больше, у всех фоновых рисунков равна минус единице. Также пишем и тарелку:


constructor Ttarelka.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := Form1.ImageList1.Items.Find('tarelka');
  X := 50;
  Y := 50;
  Z := 1;
  Width := Image.Width;
  Height := Image.Height;
  PixelCheck := True;
end;

Как видите, изменилась только подчеркнутая часть. Итак, описания закончены.

Теперь перейдем непосредственно к выводу на экран. Создаем DXTimer, в событие onTimer пишем:


if not DXDraw.CanDraw then
  exit;
DXDraw.Surface.Fill(0);
SpriteEngine.Move(1000 div 10);
SpriteEngine.Dead;
SpriteEngine.Draw;

with DXDraw.Surface.Canvas do
begin
  Brush.Style := bsClear;
  Font.Color := clWhite;
  Font.Size := 8;
  Textout(20, 3, 'Так выводится текст под ДельфИкс);
  Release;
End;

DXDraw.Flip;

Разбираем: а разбирать тут и нечего, учить надо, это процедура инициализации DirectX! Второй абзац - процедура вывода текста, последняя строка отрисовывает все объекты. Теперь смотрив события формы и создаем обработчик события onCreate. Пишем:


Ttarelka.create(SpriteEngine.Engine);
Tcosmos.create(SpriteEngine.Engine);

Запускаем, и видим тарелку на звездном фоне!

Если не видим, то тут три возможности:

  • обратиться к офтальмологу
  • включить монитор
  • проверить формат рисунков: ДельфИкс поддерживает только .bmp и .dib, если у вас рисунок другого формата, нужно пойти на хитрость: в Picture Editor'e надо сначала нажать "copy", а потом "paste", тогда оба рисунка сконвертируются в формат .bmp

Готовую программу можно скачать здесь или на сайте автора http://instrumentari.narod.ru и свериться, если что-то не работает

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay