Код:
procedure window_dialog_sub1;
begin
case w_items[w_dialog_i,1] of
view_science_1: write(s_text[w_items[w_dialog_i,2]]);
view_civ_1: write(civ_text[w_items[w_dialog_i,2]]);
view_city_1: write(c_text[w_items[w_dialog_i,2]]);
view_unit_1: write(u_text[w_items[w_dialog_i,2]],' ',u[w_items[w_dialog_i,2],u_at],'/',
u[w_items[w_dialog_i,2],u_def],'/',u[w_items[w_dialog_i,2],u_speed]);
view_building_1: write(b_text[w_items[w_dialog_i,2]]);
view_tax_1:
begin
tax_view:=(w_items[w_dialog_i,2]-1)*10;
write(tax_view,'%');
end;
end;
end;
procedure window_clear_put;
{
w_dialog_center - окно по центру
w_dialog_x - x левого верхнего угла окна, если w_dialog_center=0
w_dialog_y - y левого верхнего угла окна, если w_dialog_center=0
w_dialog_w - ширина окна
w_dialog_h - высота окна
w_dialog_color1 - цвета рамки
w_dialog_color2 - цвета окна
}
begin
if w_dialog_center=1 then
begin
w_dialog_x:=(32-w_dialog_w)/2;
w_dialog_y:=(24-w_dialog_h)/2;
end;
color(w_dialog_color2);
WindowSet(w_dialog_x,w_dialog_y,w_dialog_w,w_dialog_h);
WindowClear;
for i2:=0 to w_dialog_w-1 do
begin
SpritePutClear(FRAME_H,w_dialog_color1,i2+w_dialog_x,w_dialog_y);
SpritePutClear(FRAME_H,w_dialog_color1,i2+w_dialog_x,w_dialog_y+w_dialog_h-1);
end;
for i2:=0 to w_dialog_h-1 do
begin
SpritePutClear(FRAME_V,w_dialog_color1,w_dialog_x,i2+w_dialog_y);
SpritePutClear(FRAME_V,w_dialog_color1,w_dialog_x+w_dialog_w-1,i2+w_dialog_y);
end;
SpritePutClear(FRAME_LU,w_dialog_color1,w_dialog_x,w_dialog_y);
SpritePutClear(FRAME_RU,w_dialog_color1,w_dialog_x+w_dialog_w-1,w_dialog_y);
SpritePutClear(FRAME_LD,w_dialog_color1,w_dialog_x,w_dialog_y+w_dialog_h-1);
SpritePutClear(FRAME_RD,w_dialog_color1,w_dialog_x+w_dialog_w-1,w_dialog_y+w_dialog_h-1);
end;
procedure window_dialog;
{
Параметры процедуры window_dialog:
вход:
w_dialog_center - окно по центру
w_dialog_x - x левого верхнего угла окна, если w_dialog_center=0
w_dialog_y - y левого верхнего угла окна, если w_dialog_center=0
w_dialog_w - ширина окна
w_dialog_h - высота окна
w_dialog_items - количество элементов
w_items[] - параметры элементов: номер таблицы, номер элемента
w_dialog_text1 - заголовок 1 окна
w_dialog_text2 - заголовок 2 окна
w_dialog_color1 - цвета рамки
w_dialog_color2 - цвета окна
w_dialog_color3 - цвета окна и элементов
w_dialog_color4 - цвета окна и курсора
w_dialog_cancel - возможность отказа от выбора (1=да/0=нет)
выход:
w_dialog_case - выбранный элемент (0, если отказ от выбора)
промежуточные:
w_dialog_i1 - первый видимый элемент
w_dialog_i2 - последний видимый элемент
w_dialog_cursor - вертик.координата курсора
}
begin
w_dialog_case:=1;
w_dialog_cursor:=1;
w_dialog_i1:=1;
if (w_dialog_h-4)>w_dialog_items
then w_dialog_i2:=w_dialog_items
else w_dialog_i2:=w_dialog_h-4;
window_clear_put;
color(w_dialog_color2);
gotoxy((w_dialog_x+1)*2,w_dialog_y+1);
writeln(w_dialog_text1);
gotoxy((w_dialog_x+1)*2,w_dialog_y+2);
writeln(w_dialog_text2);
repeat
color(w_dialog_color3);
WindowSet(w_dialog_x+1,w_dialog_y+3,w_dialog_w-2,w_dialog_h-4);
WindowClear;
for w_dialog_i:=w_dialog_i1 to w_dialog_i2 do
begin
gotoxy((w_dialog_x+1)*2,w_dialog_y+3+w_dialog_i-w_dialog_i1);
window_dialog_sub1;
end;
color(w_dialog_color4);
gotoxy((w_dialog_x+1)*2,w_dialog_y+2+w_dialog_cursor);
for w_dialog_i:=1 to (w_dialog_w-2)*2 do
write(' ');
gotoxy((w_dialog_x+1)*2,w_dialog_y+2+w_dialog_cursor);
w_dialog_i:=w_dialog_case;
window_dialog_sub1;
repeat
readkey(key1,key2,key3);
if key1=81 then
if w_dialog_case>1 then
begin
w_dialog_case:=w_dialog_case-1;
w_dialog_cursor:=w_dialog_cursor-1;
if w_dialog_case<w_dialog_i1 then
begin
w_dialog_i1:=w_dialog_i1-1;
w_dialog_i2:=w_dialog_i2-1;
w_dialog_cursor:=w_dialog_cursor+1;
end;
end;
if key1=65 then
if w_dialog_case<w_dialog_items then
begin
w_dialog_case:=w_dialog_case+1;
w_dialog_cursor:=w_dialog_cursor+1;
if w_dialog_case>w_dialog_i2 then
begin
w_dialog_i1:=w_dialog_i1+1;
w_dialog_i2:=w_dialog_i2+1;
w_dialog_cursor:=w_dialog_cursor-1;
end;
end;
if key1<>0 then delay(10);
until key1<>0;
if key1=32 and w_dialog_cancel=1 then w_dialog_case:=0;
until key1=13 or w_dialog_case=0;
color(0);
clrscr;
end;