Console spreadsheet для PascalABC.Net
Введение в рисование таблиц при помощи модуля «Console_spreadsheet - 0.01 version» в PascalACB.Net
правитьПланируемое
правитьПланируется добавить функции в модуль:
- анимация перемещения таблиц (2 символа в секунду)
- возможности:
- скрывать значения конкретных ячеек;
- переворачивать значения ячеек;
- работать сразу с несколькими таблицами
- создавать глобальные таблицы с возможностью перемещения от одной части таблицы к другой
Введение
правитьКод модуля для рисования табличек в консольных приложениях, написанных на PascalABC.Net:
// код не изменять, сам его писал
//Unit Console_spreadsheet
//Interface
uses
CRT;
var
Graph_color, Graph_mode: string;
Start3, current_X_ceil_adress, current_Y_ceil_adress, start2, start, spreadsheet_max_size_X: integer;
spreadsheet_max_size_Y: integer;
symbol: string;
grid: boolean;
spreadsheet_max_size_Y_read,spreadsheet_max_size_X_read,Max_value_in_column, SHIFT, current_spreadsheet_column_size: integer;
current_spreadsheet_ceil_string_coordinate: integer;
current_spreadsheet_ceil_column_coordinate:integer ;
current_spreadsheet_background_color: string;
current_spreadsheet_ceil_content, current_spreadsheet_border_color, current_spreadsheet_text_color: string;
string_spreadsheet: array[0..80, 0..80] of string;
Max_values_in_spreadsheet: array[0..80] of integer;
spreadsheet_type: string;
procedure Console_spreadsheet_set_background_color(current_spreadsheet_background_color: string);
begin
if (current_spreadsheet_background_color = 'red') then CRT.TextBackground(red);
if (current_spreadsheet_background_color = 'blue') then CRT.TextBackground(blue);
if (current_spreadsheet_background_color = 'yellow') then CRT.TextBackground(yellow);
if (current_spreadsheet_background_color = 'green') then CRT.TextBackground(green);
//if (current_spreadsheet_background_color='orange') then CRT.TextBackground(orange);
if (current_spreadsheet_background_color = 'black') then CRT.TextBackground(black);
if (current_spreadsheet_background_color = 'white') then CRT.TextBackground(white);
if (current_spreadsheet_background_color <> 'red') or (current_spreadsheet_background_color <> 'blue') or (current_spreadsheet_background_color <> 'yellow') or (current_spreadsheet_background_color <> 'green') or (current_spreadsheet_background_color <> 'orange') or (current_spreadsheet_background_color <> 'black') or (current_spreadsheet_background_color <> 'white') then begin CRT.TextBackground(white); CRT.TextColor(Black); WriteLn('Function parameter «Console_spreadsheet_set_baxkground» receives an invalid value.'); end;
end;
procedure Console_spreadsheet_set_text_color(Console_spreadsheet_text_color: string);
begin
if (current_spreadsheet_text_color <> 'red') or (current_spreadsheet_text_color <> 'blue') or (current_spreadsheet_text_color <> 'yellow') or (current_spreadsheet_text_color <> 'green') or (current_spreadsheet_text_color <> 'orange') or (current_spreadsheet_text_color <> 'black') or (current_spreadsheet_text_color <> 'white') then begin CRT.TextBackground(white); CRT.TextColor(Black);WriteLn('Function parameter «Console_spreadsheet_set_text_color» receives an invalid value.'); end;
end;
procedure Console_spreadsheet_set_border_color(current_spreadsheet_border_color: string);
begin
if (current_spreadsheet_border_color <> 'red') or (current_spreadsheet_border_color <> 'blue') or (current_spreadsheet_border_color <> 'yellow') or (current_spreadsheet_border_color <> 'green') or (current_spreadsheet_border_color <> 'orange') or (current_spreadsheet_border_color <> 'black') or (current_spreadsheet_border_color <> 'white') then begin CRT.TextBackground(white); CRT.TextColor(Black); WriteLn('Function parameter «Console_spreadsheet_set_border_color» receives an invalid value.'); end;
end;
procedure Console_spreadsheet_hide_grid();
begin
grid := false;
end;
procedure Console_spreadsheet_show_grid();
begin
grid := true;
end;
{procedure Console_spreadsheet_adding_values_method_SHIFT(SHIFT: integer; symbol: string);
begin
Method := 1;
end;}
function Console_spreadsheet_set_size_for_X_axis(spreadsheet_max_size_X: integer):integer;
begin
return spreadsheet_max_size_X;
end;
function Console_spreadsheet_set_size_for_Y_axis(spreadsheet_max_size_Y: integer):integer;
begin
return spreadsheet_max_size_Y;
end;
procedure Console_spreadsheet_set_ceil_content(current_spreadsheet_ceil_string_coordinate: integer; current_spreadsheet_ceil_column_coordinate: integer; current_spreadsheet_ceil_content: string);// доделать
begin
if (current_spreadsheet_ceil_string_coordinate > spreadsheet_max_size_X) or (current_spreadsheet_ceil_column_coordinate > spreadsheet_max_size_Y) then
begin
WriteLn('Values coordinates ',current_spreadsheet_ceil_string_coordinate,current_spreadsheet_ceil_column_coordinate);
WriteLn('Values max coordinates ',spreadsheet_max_size_X,spreadsheet_max_size_Y);
CRT.TextBackground(white); CRT.TextColor(Black); WriteLn('The cell is outside the table.');
end
Else
begin
string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate] := current_spreadsheet_ceil_content;
end;
current_spreadsheet_ceil_string_coordinate := 0;
current_spreadsheet_ceil_column_coordinate := 0;
// сбор макс. значений таблицы в столбцах
// begin
for var start := 1 to spreadsheet_max_size_X do
begin
for var start2 := 1 to spreadsheet_max_size_Y do
begin
if (Length(string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate]) > Max_value_in_column) then begin Max_value_in_column := length(string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate]); current_spreadsheet_ceil_column_coordinate := current_spreadsheet_ceil_column_coordinate + 1; end else begin current_spreadsheet_ceil_column_coordinate := current_spreadsheet_ceil_column_coordinate + 1; end;
end;
Max_values_in_spreadsheet[current_spreadsheet_ceil_string_coordinate] := Max_value_in_column;
current_spreadsheet_ceil_string_coordinate := current_spreadsheet_ceil_string_coordinate + 1;
end;
// end
// вывод таблицы
current_spreadsheet_ceil_string_coordinate := 0;
current_spreadsheet_ceil_column_coordinate := 0;
for var start := 1 to spreadsheet_max_size_Y do
begin
// тут остановился
for var start2 := 1 to spreadsheet_max_size_X do
begin// здесь
// назначение цвета для вывода значния ячейки
if (current_spreadsheet_text_color = 'red') then CRT.TextColor(red);
if (current_spreadsheet_text_color = 'blue') then CRT.TextColor(blue);
if (current_spreadsheet_text_color = 'yellow') then CRT.TextColor(yellow);
if (current_spreadsheet_text_color = 'green') then CRT.TextColor(green);
//if (current_spreadsheet_text_color = 'orange') then CRT.TextColor(orange);
if (current_spreadsheet_text_color = 'black') then CRT.TextColor(black);
if (current_spreadsheet_text_color = 'white') then CRT.TextColor(white);
// назначение цвета для вывода значния ячейки - end
// вывод значения ячейки
Write(string_spreadsheet[current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate]);
// вывод значения ячейки
// вывод пробелов до столбца
for var start3 := 1 to Max_values_in_spreadsheet[current_spreadsheet_ceil_string_coordinate] do
begin
Write(' ');
end;
// вывод пробелов до столбца - end
// установка цвета столбца
if (current_spreadsheet_border_color = 'red') then CRT.TextColor(red);
if (current_spreadsheet_border_color = 'blue') then CRT.TextColor(blue);
if (current_spreadsheet_border_color = 'yellow') then CRT.TextColor(yellow);
if (current_spreadsheet_border_color = 'green') then CRT.TextColor(green);
//if (current_spreadsheet_border_color = 'orange') then CRT.TextColor(orange);
if (current_spreadsheet_border_color = 'black') then CRT.TextColor(black);
if (current_spreadsheet_border_color = 'white') then CRT.TextColor(white);
// установка цвета столбца - end
Write('|');
current_spreadsheet_ceil_string_coordinate := current_spreadsheet_ceil_string_coordinate + 1;
end;
// вывод линейки
for var start3 := 1 to spreadsheet_max_size_X do
begin
for var start4 := 1 to Max_values_in_spreadsheet[current_spreadsheet_ceil_string_coordinate] do
begin
Write('-');
end;
Write('+');
end;
// вывод линейки - end
// Переход к следующей строке
current_spreadsheet_ceil_column_coordinate := current_spreadsheet_ceil_column_coordinate + 1;
end;
end;
procedure Console_spreadsheet_condition();
begin
// определить параметры, и доделать потом
end;
begin
Console_spreadsheet_set_size_for_Y_axis(10);
Console_spreadsheet_set_size_for_Y_axis(5);
Console_spreadsheet_set_ceil_content(0,2,'Руэээ');
end.
Конечно, можно было рисовать«с нуля» таблички и выносить туда данные, но зачем? Данный модуль позволяет создавать таблицы «на лету» не без траты времени. Только один минус данного модуля - длинные имена функций для рисования таблиц. Но все-таки, хочу заметить, как создатель данного модуля, на то, что имена функций названы систематизированно, так что запомнить их будет легко.
Кто-то скажет: «Зачем данный модуль, если есть Excel?». Да, действительно функции данного модуля приближены к Excel, но все таки различия есть: рисование в консоли (в отличие от Excel) и малое потребление ОЗУ, что облегчает работу с другими приложениями. Функций в нем предостаточно для рисования красивых и понятных таблиц, хотя и мало цветов для раскраски текста ячеек и самой табличной сетки (border).
Зачем использовать модуль? Иногда следует представить информацию простом и понятном систематизированном виде - таблице. Пока модуль не умеет рисовать графики, но скоро я его "научу" это делать.
Функция «Console_spreadsheet_set_size_for_X_axis(spreadsheet_max_size_X)»
правитьДанная функция позволяет определить длину таблицы (в ячейках) по X. Длина таблицы в ячейках - это количество ячеек, которое может быть в одной строке таблицы. Для использования функции надо вместо spreadsheet_max_size_X писать:
Console_spreadsheet_set_size_for_X_axis({число ячеек в строке});
Например:
Console_spreadsheet_set_size_for_X_axis(5);
Функция «Console_spreadsheet_set_size_for_Y_axis(spreadsheet_max_size_Y)»
правитьДанная функция позволяет определить длину таблицы (в ячейках) по Y. Длина таблицы в ячейках - это количество ячеек, которое может быть в одном столбце таблицы. Для использования функции надо вместо spreadsheet_max_size_X писать:
Console_spreadsheet_set_size_for_Y_axis({число ячеек в столбце});
Например:
Console_spreadsheet_set_size_for_Y_axis(5);
Функция «Console_spreadsheet_hide_grid()»
правитьДанная функция позволяет скрыть сетку на таблице. Для использования функции следует писать:
Console_spreadsheet_hide_grid();
Функция «Console_spreadsheet_show_grid()»
правитьДанная функция позволяет показать сетку на таблице. Для использования функции следует писать:
Console_spreadsheet_show_grid();
Функция «Console_spreadsheet_set_background_color(current_spreadsheet_background_color)»
правитьДанная функция позволяет определить цвет фона для таблицы. Для использования функции надо вместо current_spreadsheet_background_color писать:
Console_spreadsheet_set_background_color({имя цвета (по английски)});
Например:
Console_spreadsheet_set_background_color('red');
Функция «Console_spreadsheet_set_text_color(current_spreadsheet_text_color)»
правитьДанная функция позволяет определить цвет для ячейки с координатами X и Y в таблицы. Для использования функции надо вместо current_spreadsheet_text_color писать:
Console_spreadsheet_set_text_color({X},{Y},{имя цвета (по английски)});
Например:
Console_spreadsheet_set_text_color(24,2,'red');
Функция «Console_spreadsheet_set_ceil_content(current_spreadsheet_ceil_string_coordinate,current_spreadsheet_ceil_column_coordinate,current_spreadsheet_ceil_content)»
правитьДанная функция позволяет определить значение для ячейки с координатами X и Y в таблицы. Для использования функции надо вместо current_spreadsheet_ceil_string_coordinate, current_spreadsheet_ceil_column_coordinate и current_spreadsheet_ceil_content писать:
Console_spreadsheet_set_ceil_content({X},{Y},{значение ячейки});
Например:
Console_spreadsheet_set_ceil_content(2,5,'hello');