Ошибки IDE PascalABC.Net

- Вы слышали, что мост, который Вы проектировали, разрушился?
- Отличная новость! Я собирался строить еще десять по этому же проекту!

Откуда Вы это берёте? Настроение поднимает.

В основном, это или известные художественные произведения, или цитаты из ранее прочитанных переводных книг по программированию. Беру исключительно из памяти. Когда цитата большая, пытаюсь подстраховаться ее поиском в Интернет.

Понял. :slight_smile:

Попробуйте взять вот эту книгу и почитать. Не спеша, иначе смысл и юмор утекут меж пальцев, как вода. Возможно, наберетесь множества фраз, “уместных даже в самом приличном обществе”

2 лайка

возникла необходимость провести много замен в тексте… и тут началось…

  • иногда замена просто не работает делая вид что ничего не нашла.
  • иногда после попытки замены перестает корректно работать выделение текста в редакторе
  • иногда при попытке замены выскакивает сообщение что текст был изменен другой программой и предложение загрузить измененный текст (никогда не соглашайтесь :slight_smile: )
  • иногда выскакивает сообщение что приложение допустило ошибку и предложение завершить его или продолжить без гарантий
  • а один раз окно замены заклинило так что выйти из редактора получилось только через диспетчер задач

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

Вы имеете в виду ПКМ>>Переименовать? Дайте конкретные примеры что ломается, без них исправить не выйдет.

нет я имею в виду КОНТРЛ+R Заменить

причем это похоже связано с Формами и при редактировании простых текстов с таким не сталкивался. Так что даю пошаговую инстркуцию как сломать редактор :slight_smile:

тискаем Файл->Новый проект выбираем “Приложение Windows Forms” имя проекта например “crash” :slight_smile:

Попадаем в дизайнер форм. У нас создается форма “Form1”. Мне не нравится такое имя, поэтому в инспекторе объектов меняем на “MainForm”. Запускаем программу и получаем ошибку: “crash.pas(6) : Неизвестное имя ‘Form1’”. Смотрим

System.Windows.Forms.Application.Run(new Form1)

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

итак продолжаем ломать редактор.

Добавляем на нашу форму “MenuStrip”, создаем пункт меню “Файл” и подпункт “Выход”. Делаем дабл-клик в дизайнере по пункту меню “Выход” и автоматически создается код для события по клику на меню. Там вписываем команду “Close;”. Сохраняем, запускаем. отлично мы получили простейшее рабочее приложение.

Однако для пункта меню автоматически сгенерировалось имя “toolStripMenuItem3”. Имя прям скажем мало говорящее о том что это за пункт и мы хотим в имени “Item3” заменить на “Exit”. Для этого в инспекторе объектов (Name):“toolStripMenuItem3” меняем на “toolStripMenuExit”. Сохраняем, запускаем, все работает. смотрим код

Unit Unit1;

interface

uses System, System.Drawing, System.Windows.Forms;

type
  MainForm = class(Form)
    procedure toolStripMenuItem3_Click(sender: Object; e: EventArgs);
  {$region FormDesigner}
  private
    {$resource Unit1.MainForm.resources}
    menuStrip1: MenuStrip;
    toolStripMenuItem1: ToolStripMenuItem;
    toolStripMenuExit: ToolStripMenuItem;
    {$include Unit1.MainForm.inc}
  {$endregion FormDesigner}
  public
    constructor;
    begin
      InitializeComponent;
    end;
  end;

implementation

procedure MainForm.toolStripMenuItem3_Click(sender: Object; e: EventArgs);
begin
    Close;
end;

end.

в приватном разделе имя пункта меню действительно изменилось, но процедура “procedure toolStripMenuItem3_Click(sender: Object; e: EventArgs);” все еще выглядит не так как мы хоте ли бы. Чтож исправим вручную. Тыкаем Ctrl+R открывается окошко для замены. В поле Искать пишем “Item3”, в поле Заменить на пишем “Exit”, ставим птичку напротив “Искать вверх”, жмем кнопку “Заменить все”. Все замены происходят и у нас счастья полные штаны. Сохраняем, запускаем и… И получаем ошибку “Unit1.MainForm.inc(30) : Неизвестное имя ‘toolStripMenuItem3_Click’”. Ага, нужно провести замены еще и в файле Unit1.MainForm.inc. Открываем вкладку с этим файлом, благо редактор сам его уже открыл. Снова жмем Ctrl+R, все поля у нас уже заполнены как надо, поэтому сразу жмем на “Заменить все”, и… И ничего не происходит. Все редактор сломан. После этого начинается все то что я описывал в первом посте.

Надеюсь я дал достаточно конкретный пример? :):grinning:

Вы бы лучше в это не лезли, баги переименования там одна из самых маленьких проблем. Разработчики вообще хотели убрать их, потому что заниматься ими некому.

Да, пример прекрасный, но в изначально дохлом направлении))

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

Я тоже, но он умудряется что угодно сломать))) Но вообще, если вы будете правильно формами пользоваться - редактор форм вам не понадобится. Выставляйте на эвент изменения размера процедуру которая расположит все элементы с правильными отступами, и будет вам счастье.

Счастье было бы если бы в справке была инфа о формах. а так…

В дизайнере добавляем OpenFileDialog. Все вроде нормально. Делаем дабл-клик по иконке диалога и автоматически генерится процедура для события нажатия кнопки ОК в диалоговом окне. Запускаем и получаем ошибку

Unit1.pas(10) : Неизвестное имя 'CancelEventArgs'

смотрим код

...
procedure openFileDialog1_FileOk(sender: Object; e: ComponentModel.CancelEventArgs);
...
procedure MainForm.openFileDialog1_FileOk(sender: Object; e: ComponentModel.CancelEventArgs);
begin
  
end;

это как? После Делфей такие чудеса начисто отбивают желание пользовться программой. А документации напомню таки нет :frowning:

А я напомню что она таки есть. Это элементы .Net, поэтому и в справку надо смотреть соответствующую.

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

Вот к примеру, тут ResizeAll заменяет главное преимущество редактора, возможность выбирать куда что засунуть на форме:

{$reference System.Windows.Forms.dll}
{$reference System.Drawing.dll}

uses System.Windows.Forms;
uses System.Drawing;

type
  MainForm = class(Form)
    
    tb1 := new RichTextBox;
    b1 := new Button;
    
    procedure ResizeAll;
    begin
      
      tb1.Location := new Point(20,20);
      tb1.Width := self.ClientSize.Width-20*3-b1.Width;
      tb1.Height := self.ClientSize.Height-20*2;
      
      b1.Top := 20;
      b1.Left := tb1.Right+20;
      
    end;
    
    constructor;
    begin
      
      self.Controls.Add(tb1);
      
      b1.Text := 'тыкабельно';
      b1.AutoSize := true;
      self.Controls.Add(b1);
      
      self.Load += procedure(o,e)->ResizeAll;
      self.Resize += procedure(o,e)->ResizeAll;
      
      Application.Run(self);
    end;
    
  end;

begin
  new MainForm;
end.

Формы - это дела Microsoft и к PascalABC.NЕТ отношение они имеют не больше. чем к любому другому .NET-языку. Соответственно, информацию по ним надо смотреть у Microsoft.

Странная ошибка. Пишет “Не могу получить доступ к файлу ‘D:\PABCWork.NET\myfiles…путь к файлу программы’”. Попробуйте в режиме отладки “нажать” на иконку “Форматировать код”. Потом остановить если у вас получится, запустите повторно программу на выполнение. “Лечится” только перезапуском всей среды.

с файлом все нормально? Он открывается блокнотом? Как ты его открываешь, через пункт меню открыть или из программы? Переустановить паскаль пробовал? …

Да, воспроизводится… #1679.
Ну и в качестве бонуса ещё #1680.

прикольно, поигрался с этим багом :slight_smile:

при этом генерится экзешник с нулевым размером.