Модуль для удобной работы с консолью
Содержит методы для создания псевдоокон и последовательности открытий "окон" внутри консоли
С помощью этого модуля можно запросто создать интерфейс для игры или софтовой программы
Кроме всего прочего, содержит и другие полезные средства.
Содержание:
1. Установка в директорию PascalABC.NET
2. Использование без установки в директорию
3. Блоки KTX.Block
4. Блоки KTX.KeyBlock
5. Класс KTX.Drawing и его использование
6. Методы KTX.Console
1) Для работы необходима среда PascalABC.NET последней версии
2) Скопируйте .pas файл в папку LibSource директории PascalABC.NET
3) Скопируйте .pcu файл в папку Lib директории PascalABC.NET
4) Если нужно использовать модуль, напишите в начале программы uses KTX;
Для полноценной работы необходима Windows XP и старше, на Windows 10 требуется включить опцию консоли "Использовать прежнюю версию консоли". Без этой опции работать будет далеко не всё (Особенно это касается изменения размера окна).
1) Для работы необходима среда PascalABC.NET последней версии
2) Скопируйте .pas и .pcu файлы в папку с вашей программой
3) Напишите в начале программы uses KTX;
Любой блок задаётся следующим образом:
var b := new KTX.Block;
У блока есть три основных свойства:
Status — показатель, который влияет на продолжение цикла по текущему блоку, после создания имеет значение true, зачение false выставляется методом .Close
Input — строка, введённая пользователем в консоль, заполняется с помощью .Read
, обнуляется с помощью .Reload
Output — целое число, ни на что не влияет, просто дополнительная переменная. Обнуляется до integer.MinValue
в .Reload
каждую итерацию цикла. Обычно используется как индекс массива при выводе списков.
И одно дополнительное:
OutIsDigit — возвращает true, если Input является целым числом. Внутри себя единожды на итерацию проводит вычисление Output, которое получает числовое представление Input, из-за чего очень удобно использовать конструкцию if (b.OutIsDigit) and (b.Output > 100) then
Что бы использовать блок, нужно начать цикл, в котором в качестве условия будет указано название блока. Рекомендется использовать цикл while. Типичный блок выглядит так:
uses KTX;
begin
var b := new KTX.Block;
while b do
begin
b.Reload;
//Интерфейс блока
b.Read;
//Условия переходов между блоками
end;
end.
b.Reload
всегда должно быть перед всем остальным, так как оно очищает консоль
Самым первым условием обычно прописывается выход из блока: if b.Input='0' then b.Close;
Простейшая программа, выводящая меню будущей игры:
uses KTX;
begin
var menu := new KTX.Block;
while menu do
begin
menu.Reload;
Console.DrawOn(1,1,'(1) Новая игра');
Console.DrawOn(1,2,'(2) Продолжить игру');
Console.DrawOn(1,3,'(3) Настройки');
Console.DrawOn(1,4,'(0) Выход');
menu.Read;
if menu.Input = '0' then menu.Close;
end;
end.
Для вывода списков используются методы Console.Resize(<начальная позиция списка>, <размер списка>)
и b.ReadWithResize(<начальная позиция списка>, <размер списка>)
Следующий код реализует список из 50-ти элементов, в каждый из которых можно "заглянуть".
uses KTX;
begin
var b := new KTX.Block;
while b do
begin
b.Reload;
var first := 1;
var count := 50;
Console.Resize(first, count);
for var i:=0 to count-1 do
Console.DrawOn(1, first+i, $'({i+1}) ...');
b.ReadWithResize(first, count);
if b.Input = '0' then b.Close;
if (b.OutIsDigit) and (b.Output > 0) and (b.Output <= count) then
begin
var bb := new KTX.Block;
while bb do
begin
bb.Reload;
Console.DrawOn(1, 1, $'Элемент списка #{b.Output}');
bb.Read;
if bb.Input = '0' then bb.Close;
end;
end;
end;
end.
KeyBlock'и нужны для системы последовательного открывания блоков, как в KTX.Block, но с главным отличием — в качестве ввода используется не строки, введённые с клавиатуры, а сами клавиши клавиатуры. Простейший KeyBlock задаётся одной строкой:
var a := new KTX.KeyBlock(() -> StandardKeyBlocksBuilders.BuildCleanKeyBlock.ToKeyBlock);
Что бы создать любой KeyBlock используются строители этого типа — KeyBlockBuilder'ы.
Задаются они легко:
var b := new KTX.KeyBlockBuilder;
Что бы выделить KeyBlock из строителя используется фукнция .ToKeyBlock b.ToKeyBlock
Но рекомендуется описывать строителя в лямбде конструктора KeyBlock'а.
Как, например, в этом случае:
uses KTX;
begin
var b := new KTX.KeyBlock(() ->
begin
var k := new KTX.KeyBlockBuilder;
k.AddStage(1,100,1);
k.StandardStage := 0;
k.CheckStages := true;
k.AddExiter(Key.Escape);
k.AddConfirmer(Key.Enter);
k.AddIncreasers(Key.DownArrow, Key.S);
k.AddDecreasers(Key.UpArrow, Key.W);
Result := k.ToKeyBlock;
end);
while b do
begin
b.Reload;
Console.DrawOn(1,1,b.Stage[0]);
b.Read;
if b.Confirm then b.CurrentStage+=20;
end;
end.
В этом примере стрелками вы сможете изменить значение числа (позиции) на 1, нажав Enter — увеличить на 20. Escape закроет текущий блок.
Если вы хотите задать собственные зависимости клавиш внутри блока, можете просто выключить стандартную проверку позиций k.CheckStages := false;
, а также не заполнять Exiters (клавиши выхода) и Confirmers.
Этот раздел разрабатывается
На что способен KTX.Drawing (new-конвертация, теперь уже старая):
На что он способен сейчас:
Этот раздел разрабатывается
Этот раздел разрабатывается
Вы можете встраивать этот .pcu-модуль в свои программы без указания меня как автора, но обязательно указать где-либо Made with KTX.StrFull
или Используется KTX.StrFull
Если же всё-таки вы желаете указать меня как автора, то достаточно указать ссылку на этот репозиторий, указать где-либо KTX by Alexandr Kotov
или оставить ссылку на мою страничку ВКонтакте
Изменять, модифицировать и распостранять можно.