Ну так закомментировано же…
А где это собственно устанавливается:
То есть False
будет если {$apptype windows}
.
Ну так закомментировано же…
А где это собственно устанавливается:
То есть False
будет если {$apptype windows}
.
Я увидел такую проверку в коде и решил сделать у себя. Если она работает не всегда, а RedirectIOUnitUsed
— только в модулях, как проверять без модулей, как запущен exe: c Shift или без? Ну не так же.
function Костыль: boolean;
begin
Result := true;
try
Console.CursorLeft := 0;
except
Result := false;
end;
end;
begin
IsConsoleApplication:=Костыль;
Writeln(IsConsoleApplication);
Write('1'*1);
end.
Не понял. Я считаю, что true
, если в exe есть PABCSystem
. Только почему столько файлов суются в exe лишь из-за одного символа?
Сравнение содержимого exe.rar (38.3 КБ)
?
Тот что у вас “без PABCSystem
” - ссылается на RTL: библиотеку, содержащую уже полностью откомпилированные версии нескольких модулей, включая PABCSystem
. И это только потому что у вас включёно ускорение запуска из под оболочки. У меня выключено, поэтому PABCSystem
всегда вшит в .exe, не важно как я запускаю.
##
var mode := System.Environment.GetCommandLineArgs.Skip(1).FirstOrDefault;
if mode<>nil then
begin
mode := if mode.StartsWith('[') and mode.EndsWith(']') then
mode.SubString(1,mode.Length-2) else
nil;
end;
Writeln(mode);
readln;
Это единственное что по-особому передаётся в программу при запуске, в зависимости от того, как запустили. F9, Shift+F9, из папки.
А __RedirectIOMode.pas
это стандартный модуль, который автоматом добавляется в .exe если вы компилируете его путём нажатия простого F9. Он нужен, чтобы помочь IDE привязать ввод/вывод к окну ввода.
Но он остаётся в .exe пока вы его не перекомпилируете - даже если затем вы запустите его из папки.
И я так и не увидел примера, где использование operator*
для (символа/строки) и числа хоть как то влияет на IsConsoleApplication
.
Как и причины, зачем это всё… С этого всегда надо начинать.
Пример:
function yesNoChoice: boolean;
begin
if IsConsoleApplication then
begin
Result := (Console.ReadKey.Key = System.ConsoleKey.Y);
Writeln;
end
else
Result := (ReadChar.ToUpper = 'Y');
end;
label конец;
begin
Writeln('Вы хотите выйти немедленно? Y/N.');
if yesNoChoice then
goto конец;
if IsConsoleApplication then
// Вызовы методов класса консоли, например,
Writeln(Console.ReadKey(true))
else
Writeln('Данная программа не работает из-под оболочки.');
конец: Write('Работа программы завершена.');
if IsConsoleApplication then
begin
Write(' Нажмите любую клавишу, чтобы закрыть.');
Console.ReadKey(true);
end;
end.
Ок, применение по делу… Но при чём тут IsConsoleApplication
? Вы решили что это то что вам нужно только потому что у него в названии консоль?
Но это название переводится не “есть ли консоль у приложения”, а “является ли приложение консольным (т.е. не оконным)”.
Как я уже сказал, это свойство .exe файла, а не конкретного его запуска. Ввод/вывод любого консольного приложения можно перенаправить куда угодно при запуске - хоть в окно вывода IDE, хоть в файл. Сама консоль при этом всегда прячется, но приложение от этого не становится вдруг оконным.
И я уже показал как определять, каким образом был запущен .exe файл (по крайней мере относительно IDE).
Тогда тут должно быть всегда true
? Даже из-под оболочки?
##
Write(IsConsoleApplication) // False
Да. А у вас False
???
Да. Поэтому я использовал это как проверку запуска из-под оболочки. При ускорении запуска из-под оболочки и запуске по F9 у консольного приложения `IsConsoleApplication = false` · Issue #2731 · pascalabcnet/pascalabcnet · GitHub
Возможно ли не добавлять аргументы для проверки аутентификации, если кнопка аутентификации скрыта?
Хотелось бы, что бы документирующие комментарии для модуля подтягивались не только из, собственно модуля, но и из xml-фала рядом, при его наличии. Совсем как для библиотек. Когда кода в модуле становится достаточно много, писать в нём же комментарии не очень удобно. Было бы неплохо иметь возможность разделить эти части
## a[1:2,3:4] := new integer[2,3];
Выдаёт
SYNTAXTREEVISITORSERROR_MULTIDIMENSIONAL_SLICES_FORBIDDEN_IN_LEFT_SIDE_OF_ASSIGNMENT
## var x := 5;
typename(Sqr(x)).Print; // int64
typename(x.Sqr).Print; // integer
Не равномерно получается… При чём:
/// Возвращает квадрат числа
function Sqr(Self: integer): integer; extensionmethod;
begin
Result := Sqr(Self);
end;
То есть умножает как int64
, но потом выбрасывает часть точности.
Сделали int64 потому что слишком часто влетали в переполнение на элементарных алгоритмах. Например, когда проверяем не превышает ли квадрат некоторого числа типа integer значения величины integer.MaxValue
Это правильно ещё и потому, что умножение двух 32-битных чисел может дать почти все 64 бита информации в результате. Поэтому я думаю тут x.Sqr
надо исправить.
На почту miks@sfedu.ru отправил письмо следующего содержания: Добрый день, Станислав Станиславович.
**В школы Краснодарского края поступил документ от 13 декабря 2023 года о программном обеспечении, которые должно быть установлено на станциях КЕГЭ. Для языка Pascal утвержден PascalABC.Net версии 3.8.3 (и НЕ выше). ** С 08.05.2023 года официально доступна версия 3.9.0, которая содержит значительные изменения и доработки. Но на странице сайта PascalABC.NET и ЕГЭ по информатике 2022 | PascalABC.NET статьи, примеры опубликована статья, на которую и ссылаются чиновники, отказываясь устанавливать более новую версию. В это статье речь идет о версии 3.8.3, но статья от 2022 года, что мало интересует организаторов ЕГЭ. Можно ли изменить эту статью, чтобы можно было предъявить организаторам экзамена мнение разработчиков? Кроме того, на странице Скачать имеется ссылка на версию 3.8.3, что тоже не добавляет аргументов в пользу 3.9.0. Ранее старые версии PascalABC бы ли недоступны для скачивания с этой страницы, можно было скачать только текущую. Заранее спасибо за ответ. И спасибо за то, что делаете Вы и Ваш коллектив.
С уважением, Дмитрий Тищенко, учитель информатики СОШ №18 х. Первомайского Мостовского района
Хотелось бы услышать ответ на этот вопрос. Спасибо
На почту не получал. Пошлите еще раз.
По ссылке поменял текст. Обновим и решения заданий.
Письмо продублировал. Спасибо за ответ. Буду “радовать” организаторов КЕГЭ Краснодарского края.
Поделитесь потом, насколько они обрадовались.
Кстати, письмо на miks@sfedu.ru не приходило. Нет его и в спаме
Краснодарские жрецы от образования сошли с ума? У кого более свежая версия, нужно сносить и искать старую? Если это на самом деле так, это уже клинический случай…
По моему там было написано что то типа “рекомендуем ограничится такой то версией”. Я думаю разработчики имели в виду использовать такую или более новую. Но эти, как вы их назвали, “жрецы” интерпретировали как им нравится и решили что старый установщик для 3.8.3 на официальной странице для скачивания - тому подтверждение.