Sign in Join
Wiki copytemporary

ZenGL Tutorial 2/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: ZenGL Tutorial 2/ru

OldNewLine
1+## Создание шрифта ZenGL
2+
3+Создадим шрифт ZenGL. Для решения поставленной задачи нам потребуется скачать генератор шрифтов [ZenFont](http://zengl.org/download.html). Запустив программу, вы увидите что-то похожее на картинку ниже:
4+
5+![](/wiki-images/4/42/Zenfont.png)
6+
7+## Создание программы
8+
9+- Создаем пустой проект и ссылаемся на ZenGL как это было описано в предыдущей статье.
10+
11+- Создадим директории:
12+
13+projectname\bin
14+
15+projectname\data
16+
17+projectname\project
18+
19+- Сохраним проект по пути: "*projectname\project*".
20+
21+- Скопируем шрифт (.ZFI файл) в "*projectname\data*"
22+
23+- Идем в *Project \> Options \> Paths* и в *Target file name* допишем "*..\bin\project1*".
24+
25+## Исходный код
26+
27+``` pascal
28+var
29+ dirRes : String {$IFNDEF DARWIN} = '../data/' {$ENDIF}; // это путь к ресурсам
30+ fnt : zglPFont; // это шрифт, который мы будем использовать
31+```
32+
33+Загрузим шрифт:
34+
35+``` pascal
36+procedure Init;
37+begin
38+ fnt := font_LoadFromFile( dirRes + 'Agency FB-Regular-18pt.zfi' );
39+end;
40+```
41+
42+Процедура рисования (тут мы рисуем текст нашим шрифтом):
43+
44+``` pascal
45+procedure Draw;
46+var
47+ rect: zglTRect;
48+begin
49+ text_Draw( fnt, 0, 0, 'Sample Text. Press ESC to EXIT.' );
50+
51+ text_DrawEx( fnt, 32, 32, 1.5, 0, 'Sample Text with DrawEx - Scale 1.5 - Alpha 150', 150 );
52+
53+ rect.H:=128;
54+ rect.W:=400;
55+ rect.X:=0;
56+ rect.Y:=96;
57+
58+ pr2d_rect(rect.X,rect.Y,rect.W,rect.H,$FFFFFF,100);
59+
60+ text_DrawInRect(fnt,rect,
61+ 'Sample multiline text in rect.' + #10 +
62+ 'Sample multiline text in rect.'+ #10 +
63+ 'Sample multiline text in rect.');
64+end;
65+```
66+
67+Код выхода из программы по нажатию ESC:
68+
69+``` pascal
70+procedure Timer;
71+begin
72+ if key_Press( K_ESCAPE ) Then zgl_Exit();
73+ key_ClearState();
74+end;
75+```
76+
77+## Результат
78+
79+Теперь вы можете увидеть текст напечатанный нашим шрифтом
80+
81+![](/wiki-images/7/75/Zengltext.png)
82+
83+Конечный код будет выглядет примено так:
84+
85+``` pascal
86+program project1;
87+
88+{$IFDEF WINDOWS}
89+ {$R *.res}
90+{$ENDIF}
91+{$DEFINE STATIC}
92+
93+uses
94+ {$IFNDEF STATIC}
95+ zglHeader
96+ {$ELSE}
97+ zgl_main,
98+ zgl_screen,
99+ zgl_window,
100+ zgl_timers,
101+ zgl_keyboard,
102+ zgl_font,
103+ zgl_text,
104+ zgl_textures,
105+ zgl_textures_tga,
106+ zgl_primitives_2d,
107+ zgl_utils,
108+ zgl_math_2d
109+ {$ENDIF}
110+ ;
111+
112+var
113+ dirRes : String {$IFNDEF DARWIN} = '../data/' {$ENDIF};
114+ fnt : zglPFont;
115+
116+procedure Init;
117+begin
118+ fnt := font_LoadFromFile( dirRes + 'Agency FB-Regular-18pt.zfi' );
119+end;
120+
121+procedure Draw;
122+var
123+ rect: zglTRect;
124+begin
125+ text_Draw( fnt, 0, 0, 'Sample Text. Press ESC to EXIT.' );
126+
127+ text_DrawEx( fnt, 32, 32, 1.5, 0, 'Sample Text with DrawEx - Scale 1.5 - Alpha 150', 150 );
128+
129+ rect.H:=128;
130+ rect.W:=400;
131+ rect.X:=0;
132+ rect.Y:=96;
133+
134+ pr2d_rect(rect.X,rect.Y,rect.W,rect.H,$FFFFFF,100);
135+
136+ text_DrawInRect(fnt,rect,
137+ 'Sample multiline text in rect.' + #10 +
138+ 'Sample multiline text in rect.'+ #10 +
139+ 'Sample multiline text in rect.');
140+end;
141+
142+procedure Timer;
143+begin
144+ if key_Press( K_ESCAPE ) Then zgl_Exit();
145+ key_ClearState();
146+end;
147+
148+Begin
149+ {$IFNDEF STATIC}
150+ zglLoad( libZenGL );
151+ {$ENDIF}
152+
153+ timer_Add( @Timer, 16 );
154+
155+ zgl_Reg( SYS_LOAD, @Init );
156+ zgl_Reg( SYS_DRAW, @Draw );
157+
158+ zgl_Enable( APP_USE_UTF8 );
159+
160+ wnd_SetCaption( 'Sample Text' );
161+
162+ wnd_ShowCursor( TRUE );
163+
164+ scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
165+
166+ zgl_Init();
167+End.
168+```
169+
170+---
171+*From the Free Pascal wiki, page "ZenGL Tutorial 2/ru", as it stood on 2020-03-03 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history