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

Я всё равно вас не понимаю, приведите примеры. И что такое этот ваш визард?

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

А какая альтернатива? Для многих написание UI - острый нож.

На сколько я знаю - их, к сожалению, нет. Только руками всё делать.

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

Вот. Но что-то лучше, чем ничего.

Насчёт местоположения и направления названия вкладок изловчился без Tabcontrol, а вот что касательно фоновой записи в текстовый файл с возможностью отмены?

Также нашёл ответ про автоматическое определение кодировки текстового файла - https://github.com/errepi/ude А как бы правильно это перенести в PABC.NЕT? Cпс

А что не понятно то? Что именно вы не знаете как реализовать?

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

Массив.TransForm(a->sqrt(abs(a))) Жалуется на TransForm. Сообщение: Неизвестное имя ‘TransForm’

Приводите всегда код. На словах не понятно. И, кстати, у вас последняя версия?

Transform - это метод (процедура), оформленный как расширение. Формат его вызова a.Transform(t -> f(t)), где а - имя массива, каждый элемент которого заменяется на результат вызова функции f. При этом тип результата, возвращаемого функцией f, должен совпадать с типом элементов массива.

Приветствую, господа. Как передать массив по ссылке в extensionmethod? Var перед self пишет нельзя.

procedure DelRow(self: array[,] of integer; k: integer); extensionmethod;
begin
  for var i := k to self.GetLength(0) - 2 do
    for var j := 0 to self.GetLength(1) - 1 do
      self[i, j] := self[i + 1, j];
      
  SetLength(self, self.GetLength(0) - 1, self.GetLength(1));
  
  Println; self.Println;
end;

begin  
  var a := MatrRandom(3, 2, 0, 100);
  a.Println;
  
  a.DelRow(0);
  
  Println;
  a.Println;
end.

Начнем с того, что массив всегда по ссылке передается. Как с матрицами работать, Вы можете посмотреть, например, в исходных кодах класса Matrix библиотеки NumLibABC,

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

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

Динамический массив-параметр лишь указывается, как передаваемый по значению, поскольку по значению копируется лишь ссылка, а не сам массив.

Это не я написал, это в справке “паскаля абц точка нет” так написано, почитайте Типы данных -> Динамические массивы в самом низу.

Неудачно написано. На самом деле это говорит о том, как производить передачу параметра-массива, а не о том, как физически происходит такая передача. А происходит она элементарно просто, как и в С#, например.

Динамический массив имеет ссылочный тип. При передаче по значению вместо массива копируется ссылка на него. Если же массив в подпрограмме будет менять размер (а в .NET массив изменить нельзя, поэтому будет создаваться новый массив), то и ссылка изменится и по значению ее уже нельзя передавать, тогда пишут var.

Да, я это знаю, просто написал так, как в справке, думал поймете о чем речь. Так вот я пробовал с внешней процедурой там var нормально работает, а как в extensionmethod так сделать, не вставляется var перед self.

Вам в третий раз написать, где можно посмотреть, как пишут extension-методы для массивов?

Вас не сильно затруднит написать код программы удаления строки матрицы с использованием процедуры DeleteRow из вашей библиотеки, со всеми вашими типами и классами?

1 лайк

А все это уже есть. Вы документацию посмотрите, она лежит в папке \Doc в директории установки PascalABC.NET, обычно это что-то вроде \Program Files (x86)\PascalABC.NET.

Но если сильно хочется - пожалуйста.

uses NumLibABC;

begin
  var a := MatrRandomReal(5, 8, 10, 99);
  a.Transform(t -> Round(t, 2));
  var b := new Matrix(a);
  b.Println(6, 2);
  Println('-' * 24);
  b.DeleteRow(2); // счет от 1
  b.DeleteCol(5); // счет от 1
  b.Println(6, 2)
end.

 62.66 20.33 30.68 34.59 67.88 77.99 44.04 18.92
 71.51 71.14 66.64 82.30 42.96 69.62 94.64 34.13
 83.08 33.65 76.38 86.04 73.26 29.91 18.07 48.17
 27.59 10.13 81.08 56.82 53.12 45.46 42.40 57.32
 83.37 55.34 80.60 82.98 19.82 79.75 63.07 41.04
------------------------ 
 62.66 20.33 30.68 34.59 77.99 44.04 18.92
 83.08 33.65 76.38 86.04 29.91 18.07 48.17
 27.59 10.13 81.08 56.82 45.46 42.40 57.32
 83.37 55.34 80.60 82.98 79.75 63.07 41.04
1 лайк

С фоновой работой понятно, нюансы только в выборе более оптимального решения без лишних событий/Invoke.

А вот насчёт конвертера – очень даже зря, ИМО. Есть уйма онлайн переводилок с VB.NЕT, питона, cpp и других ЯП/диалектов в c# и обратно, так что конвертер или (частичная адаптация) для РАВС.NЕT была бы уместной, особенно касательно проектов, не говоря уже о тех, которые собираются из кучи файлов. Тем более, вполне очень даже неплохое задание для шарящих студентов) А пока тоже нарезаю по старинке…

А как правильно читаются в файле помощи?