Помощь новичкам

Не подскажите как сделать примерно вот так:

В черном окне выводиться инструкции, в белом мы рисуем. (crt подключил только для наглядности)

GraphABC.SetConsoleIO или CurrentIOSystem := new IOStandardSystem. (второе это содержимое процедуры GraphABC.SetConsoleIO)

1 лайк

А как это использовать? Подключать CRT?

Это устанавливает ввод/вывод (IO) на стандартное, как без подключения GraphABC. То есть writeln, println, как хотите. А CRT довольно бесполезный и урезанный модуль, если из него что то надо - лучше посмотрите как реализовано там и сделайте у себя в программе так же.

1 лайк

Правда считывание с консоли кажись сломано и починено уже не будет.

1 лайк

Для меня не важно. Буду делать так:

GraphABC.SetConsoleIO;
for var t:=25 to 34 do
begin
writeln(lan.str[t]);
end;
GraphABC.SetGraphABCIO;

И это сработало.

А ну если так то можно и без SetConsoleIO, можно использовать System.Console.WriteLine. Оно не так хорошо превращает объекты в строку, но для этого можно ещё использовать функцию _ObjectToString, с ней будет выводить как writeln.

1 лайк

Не знаете как получить чистую консоль как в 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.

1 лайк

Ээ то есть можно писать

System.console.clear

Вместо > uses system; > Begin > Console.clear; > End.

Да. System это пространство имён, когда вы пишете uses System - вы делаете так что все имена из System вливаются в основное пространство имён. Так не только с System работает, а с любым пространством имён.

1 лайк

Центрировать строку можно так:

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.
1 лайк

В GraphABC есть процедура, вроде бы TextOutCenter(x,y,x1,y1:integer;s:string) точно не помню. Я воспользовался ей. Она рисует прямоугольник и центрирует текст в нем.

И да наткнулся на вашу строчку WriteLnFormat('Очки, выпавшие на кубиках: {0} и {1}{3}Сумма очков = {2}', r1, r2, r1+r2, NewLine); Что означают цифры в фигурных скобках?

Во-первых, см.последняя строка процедуры center моего ответа, а не TextOutCenter… А во-вторых, код из моего ответа всегда выводит текст по центру окна. Даже при изменении его размера!

1 лайк

В круглых скобках номера аргументов (начиная с 0). К примеру:

WriteLnFormat('Это {0}, а это {1}.{2}И ещё {0} и {1}.', 'раз', 'два', NewLine);
1 лайк

WriteLnFormat это особый вид функции Format(которая в свою очередь вызывает System.Format), которая не возвращает, а выводит результат на экран. Как работает System.Format можно посмотреть здесь.

1 лайк

Как получить аргументы командной строки? Возможно ли это вообще в паскале? Может как то через 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];// Получаем имя

В массиве помимо имён файлов, с которыми может запускаться программа будут всевозможные другие аргументы.

1 лайк

Help\Справочник по языку\Системный модуль PABCSystem\Системные подпрограммы

function ParamStr(i: integer): string; Возвращает i-тый параметр командной строки

function ParamCount: integer; Возвращает количество параметров командной строки

Не то?

1 лайк