Не подскажите как сделать примерно вот так:
В черном окне выводиться инструкции, в белом мы рисуем. (crt подключил только для наглядности)GraphABC.SetConsoleIO
или CurrentIOSystem := new IOStandardSystem
. (второе это содержимое процедуры GraphABC.SetConsoleIO
)
А как это использовать? Подключать CRT?
Это устанавливает ввод/вывод (IO) на стандартное, как без подключения GraphABC. То есть writeln
, println
, как хотите. А CRT
довольно бесполезный и урезанный модуль, если из него что то надо - лучше посмотрите как реализовано там и сделайте у себя в программе так же.
Для меня не важно. Буду делать так:
GraphABC.SetConsoleIO; for var t:=25 to 34 do begin writeln(lan.str[t]); end; GraphABC.SetGraphABCIO;
И это сработало.
А ну если так то можно и без SetConsoleIO
, можно использовать System.Console.WriteLine
. Оно не так хорошо превращает объекты в строку, но для этого можно ещё использовать функцию _ObjectToString
, с ней будет выводить как writeln
.
Не знаете как получить чистую консоль как в crt?
Чтоб посмотреть как что то работает - пишем коротенькую программу с CRT
:
uses CRT;
begin
CRT.ClrScr;
end.
Открывает исходники CRT
нажав ПКМ на его имени или на любом имени из него (как ClrScr
) и Перейти к определению
(или зажать Ctrl и нажать ЛКМ по тому же имени).
Далее нажимаем ПКМ
на имени функции которую хотим посмотреть (то есть ClrScr
) и Перейти к реализации
(или опять же, Ctrl + ЛКМ) - курсор перебрасывает к следующей функции:
procedure ClrScr;
begin
Console.Clear;
end;
В начале CRT
прописано uses System
поэтому в его исходниках можно писать Console
вместо System.Console
. То есть чтоб отчистить окно надо вызвать System.Console.Clear
.
Ээ то есть можно писать
System.console.clear
Вместо > uses system; > Begin > Console.clear; > End.
Да. System
это пространство имён, когда вы пишете uses System
- вы делаете так что все имена из System
вливаются в основное пространство имён. Так не только с System
работает, а с любым пространством имён.
Центрировать строку можно так:
uses GraphABC;
procedure center;
begin
Window.Clear;
Line(Window.Center.X - 10, Window.Center.Y, Window.Center.X + 10, Window.Center.Y);
Line(Window.Center.X, Window.Center.Y - 10, Window.Center.X, Window.Center.Y + 10);
DrawTextCentered(Window.Center.X, Window.Center.Y, Window.Center.X, Window.Center.Y, 'текст по центру');
end;
begin
center;
OnResize := center;
end.
В GraphABC
есть процедура, вроде бы TextOutCenter(x,y,x1,y1:integer;s:string)
точно не помню. Я воспользовался ей. Она рисует прямоугольник и центрирует текст в нем.
И да наткнулся на вашу строчку WriteLnFormat('Очки, выпавшие на кубиках: {0} и {1}{3}Сумма очков = {2}', r1, r2, r1+r2, NewLine);
Что означают цифры в фигурных скобках?
Во-первых, см.последняя строка процедуры center моего ответа, а не TextOutCenter… А во-вторых, код из моего ответа всегда выводит текст по центру окна. Даже при изменении его размера!
В круглых скобках номера аргументов (начиная с 0). К примеру:
WriteLnFormat('Это {0}, а это {1}.{2}И ещё {0} и {1}.', 'раз', 'два', NewLine);
WriteLnFormat
это особый вид функции Format
(которая в свою очередь вызывает System.Format
), которая не возвращает, а выводит результат на экран. Как работает System.Format
можно посмотреть здесь.
Как получить аргументы командной строки? Возможно ли это вообще в паскале? Может как то через System.Reflection
или System.Runtime
?
Рад, что Вам это нужно. В моих программах так:
var Args: array of System.string := System.Environment.GetCommandLineArgs(); // Получаем аргументы
var ImageName: System.string;// Имя файла(если именно оно Вам нужно)
if (Args.Length > 1) and (Args[1] <> '[REDIRECTIOMODE]') and (Args[1] <> '[RUNMODE]')// Отсеиваем всё, кроме имени файла
Then ImageName := Args[1];// Получаем имя
В массиве помимо имён файлов, с которыми может запускаться программа будут всевозможные другие аргументы.
Help\Справочник по языку\Системный модуль PABCSystem\Системные подпрограммы
function ParamStr(i: integer): string; Возвращает i-тый параметр командной строки
function ParamCount: integer; Возвращает количество параметров командной строки
Не то?