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

Исключение поймано еще раз.
image сведения:
Подробная информация об использовании оперативной (JIT) отладки вместо данного диалогового окна содержится в конце этого сообщения.

************** Текст исключения **************
System.ArgumentOutOfRangeException: Длина не может быть меньше нуля.
Имя параметра: length
   в System.String.Substring(Int32 startIndex, Int32 length)
   в VisualPascalABC.OutputWindowForm.InputTextBox_TextChanged(Object sender, EventArgs e)
   в System.Windows.Forms.Control.OnTextChanged(EventArgs e)
   в System.Windows.Forms.TextBoxBase.WmReflectCommand(Message& m)
   в System.Windows.Forms.TextBox.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Загруженные сборки **************
mscorlib
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2650.0 built by: NET471REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
PascalABCNET
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
System
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
PluginsSupport
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PluginsSupport.DLL
----------------------------------------
CompilerTools
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/CompilerTools.DLL
----------------------------------------
WeifenLuo.WinFormsUI.Docking
    Версия сборки: 2.2.5489.36547
    Версия Win32: 2.2.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/WeifenLuo.WinFormsUI.Docking.DLL
----------------------------------------
Compiler
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Compiler.DLL
----------------------------------------
Localization
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Localization.DLL
----------------------------------------
System.Configuration
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2558.0 built by: NET471REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1055.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
ICSharpCode.TextEditor
    Версия сборки: 0.0.0.0
    Версия Win32: 0.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.TextEditor.DLL
----------------------------------------
CodeCompletion
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/CodeCompletion.DLL
----------------------------------------
ParserTools
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ParserTools.DLL
----------------------------------------
Accessibility
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2558.0 built by: NET471REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
Errors
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Errors.DLL
----------------------------------------
SyntaxTree
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SyntaxTree.DLL
----------------------------------------
PresentationFramework
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/PresentationFramework/v4.0_4.0.0.0__31bf3856ad364e35/PresentationFramework.dll
----------------------------------------
WindowsBase
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/WindowsBase/v4.0_4.0.0.0__31bf3856ad364e35/WindowsBase.dll
----------------------------------------
PresentationCore
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/PresentationCore/v4.0_4.0.0.0__31bf3856ad364e35/PresentationCore.dll
----------------------------------------
ICSharpCode.SharpDevelop
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.SharpDevelop.DLL
----------------------------------------
ICSharpCode.Core
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.Core.DLL
----------------------------------------
ICSharpCode.SharpDevelop.Dom
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.SharpDevelop.Dom.DLL
----------------------------------------
ICSharpCode.NRefactory
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.NRefactory.DLL
----------------------------------------
ICSharpCode.AvalonEdit
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.AvalonEdit.DLL
----------------------------------------
ICSharpCode.Core.Presentation
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.Core.Presentation.DLL
----------------------------------------
ICSharpCode.SharpDevelop.Widgets
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.SharpDevelop.Widgets.DLL
----------------------------------------
ICSharpCode.Core.WinForms
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.Core.WinForms.DLL
----------------------------------------
System.Design
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2558.0 built by: NET471REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Design/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Design.dll
----------------------------------------
Debugger.Core
    Версия сборки: 3.0.0.2649
    Версия Win32: 3.0.0.2649
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Debugger.Core.DLL
----------------------------------------
System.Data
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2634.0 built by: NET471REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
TreeConverter
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/TreeConverter.DLL
----------------------------------------
NETGenerator
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/NETGenerator.DLL
----------------------------------------
SyntaxTreeConverters
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SyntaxTreeConverters.DLL
----------------------------------------
SemanticTree
    Версия сборки: 3.5.0.2101
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SemanticTree.DLL
----------------------------------------
System.Numerics
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2558.0 built by: NET471REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
PascalABCParser
    Версия сборки: 0.0.0.0
    Версия Win32: 0.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCParser.DLL
----------------------------------------
OptimizerConversion
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/OptimizerConversion.DLL
----------------------------------------
InternalErrorReport
    Версия сборки: 1.0.7102.447
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/InternalErrorReport.DLL
----------------------------------------
PT4Provider
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PT4Provider.DLL
----------------------------------------
PT4Tools
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PT4Tools.DLL
----------------------------------------
SharpDisasm
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SharpDisasm.DLL
----------------------------------------
SyntaxVisitors
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SyntaxVisitors.DLL
----------------------------------------
YieldHelpers
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/YieldHelpers.DLL
----------------------------------------
System.Security
    Версия сборки: 4.0.0.0
    Версия Win32: 4.7.2650.0 built by: NET471REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Security/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Security.dll
----------------------------------------
Program1
    Версия сборки: 1.0.0.0
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
mscorlib.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1055.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
Program1
    Версия сборки: 1.0.0.0
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
Program1
    Версия сборки: 1.0.0.0
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
Program1
    Версия сборки: 1.0.0.0
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
Program1
    Версия сборки: 1.0.0.0
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
Program1
    Версия сборки: 1.0.0.0
    Версия Win32: 3.5.0.2101
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.

Скачайте дебаг-версию с моего диска: https://drive.google.com/open?id=1Kt6UJ3GGlqMdRxrE0k2S-sDGC7P-LtV7

И копируйте все файлы оттуда в директорию PascalABC.NET на вашем компьютере. И когда поймаете это исключение снова – напишите стек ошибок (то, что вы кидали до этого).

Иногда надо вывести проценты, но Print не поддерживает форматный вывод. Как можно дополнить функцию вида

function PRC(Const a, b: single): single;
begin
  if a > 0 then Result := b * 100 / a
end;

аналогично формату х:3:2

Форматный вывод используемый в write - это атрофизм, оставленный только для совместимости.
В форматной строке есть свой синтаксис, вот его надо использовать:

begin
  var x := ReadReal; // надо между 0 и 1
  $'x = {x:P}'.Println;
  $'x = {x:P5}'.Println;
end.

Полное описание этого синтаксиса:

($'' разворачивается в string.Format при компиляции, поэтому всё что применимо к string.Format - применимо и к форматной строке)


P.S. есть ещё это:

begin
  ReadReal
  .Round(2)
  .Println;
end.

То есть округление до определённого кол-ва цифр после запятой. Но для вывода процентов всё же надо использовать специализированные методы.


P.P.S. Форматная строка, если что, не обязательна, ибо всё то же самое можно передать в .ToString:

begin
  var x := ReadReal;
  x.ToString('P').Println;
  x.ToString('P5').Println;
end.

Но это полезно если вам нужна отдельная строка, что для процентов - довольно редко.

Спасибо.

Мне формат нравился тем, что можно сразу выравнять (чтобы цифры не скакали) и округлить, в одну строку не надо, а проценты разделил на два значения, чтобы избежать деления на ноль.

Можна в Pascal Abc . Net скомбинировать “на лету”?

Ну можно так:

begin
    var x := 1.2094;
    print($'x = {x:00.00}%, pi = {pi:###.####}')
end.

Или так:

begin
  foreach var x in Arr(
    12.3456789,
    123.456789,
    1234.56789,
    12345.6789,
    123456.789
  ) do $'{x,10:N2}'.Println;
end.

Тут 10 это кол-во символов до которых добавляет пробелы, 2 - кол-во знаков после запятой, а N значит что используется числовое (N-Number) форматирование.

Можно так же поставить не 10, а -10, тогда пробелы добавить справа а не слева:

begin
  foreach var x in Arr(
    12.3456789,
    123.456789,
    1234.56789,
    12345.6789,
    123456.789
  ) do $'{x,-10:N2}'.Println;
end.

Ну, а ссыль я вам не просто так дал. Если вы не поленитесь и всё же прочитаете - найдёте там и эти, и другие возможности форматных строк.

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

Как в Pascal Abc . Net лучше всего автоматически перехватывать математические ошибки вроде неопределённости и бесконечности, чтобы вместо прерывания возвращался ноль?

Также не ясно почему многие не рекомендуют пользоваться встроенным визуальным редактором форм. Есть причина или лучшие варианты?

Спасибо.

Их не надо перехватывать, NaN и бесконечность (и отрицательная тоже) - это всё числа, которые умеют сами выводится:

begin
  writeln(+1/0);
  writeln(+0/0);
  writeln(-1/0);
end.

Если же надо их по особому обработать (что очень редко, ибо мат. операции с ними тоже работают):

begin
  writeln(1/0 = real.PositiveInfinity);
  writeln(real.IsNaN(0/0));
end.

Причина - в нём не работает 99% функционала, в том числе анализатор кода. А приучатся без него программировать - очень плохая идея.

Лучшие варианты - пишите всё напрямую. Обрабатывайте эвент изменения размера формы и в нём расставляйте все элементы управления как надо. Такой подход даёт на много больший уровень контроля, чем визуальный редактор. И с ним - всё работает как задумано и не через 5 точку (хотя конечно зависит ещё и от вас).

99% функционала? Откуда такие цифры? И анализатор кода работает.

Не работает стабильно* (хотя конечно это преувеличение)
И - вы пробовали, к примеру, удалять элементы управления? Это когда то вообще работало? И таких мелких поломок полно.

А анализатор кода - это то, почему я сам к ним и прикасаться не хочу. Иногда он конечно работает. И когда только создал проект. Но как только пытаешься что то делать - всё начинает рассыпаться.

Это Ваше личное мнение - про совместимость - или об этом писали разработчики, либо указали это в Справке?

Пробовал. Все работает.

И интеллисенс тоже

И это только 2 вещи из базовых которые я смог вспомнить. Я же говорю, настоящая жуть начинается когда пытаешься что то полноценное сделать, а не добавить и убрать 1 элемент-кнопку. Тогда сыпется всё и сразу.

Про совместимость не уверен, но про то что write(x:4:2) - помню что когда на форуме спрашивал про #896 - неправильно выразился и, вроде, @Admin решил что я предлагаю добавить синтаксис write(x:4:2) в форматные строки. И тогда он, вроде, сказал что то типа что сам этот старый синтаксис не любит. К сожалению, как ни искал - найти тот диалог сейчас не могу.

Да, я читал высказывание уважаемого @Admin о том, что ему не нравится формат n:w;d в операторе Write. Но вывод о том, что этот формат в PascalABС.NЕТ оставлен лишь для совместимости я из этого высказывания сделать на смог.

Я конечно, люблю временами посмотреть немое кино с Чарли Чаплином, Бастером Китоном или Гарольдом Ллойдом, но ведь Вы ни тот, ни другой и не третий. Поэтому не понимаю, зачем Вы постите немые ролики? Или это спецконтент для тайного Братства Молчащих и Постигающих?

А вы так хотите услышать мой голос?)) Ну, простите уж, но не в этой жизни)))
А так - по моему и так понятно что я показываю там…

Ну, насчет голоса Вы там не обольщайтесь. А насчет “понятно” - значит, все-таки для братства…

1 лайк