Замечания и предложения

Вот реализация Length:

function Length(a: &Array): integer;
begin
  if a = nil then
    Result := 0
  else Result := a.Length;
end;

Насчёт той диаграммы по ссылке - я не понял что она означает. Но в .Net у всех ссылочных типов значение по умолчанию - nil.

В паскале есть всего несколько типов реализованных по особому. К примеру типизированные файлы - это ссылочные типы, но паскаль всегда инициализирует их сам, поэтому они не могут быть nil. И это только ради совместимости со старыми паскалями.

Но массив - это стандартный .Net -овский тип. Если у него значение поумолчанию будет не nil - это сломает совместимость с .Net .

Это больше звучит как будто это будет выдавать ошибку:

begin
  var a: array[1..2] of array of byte;
  writeln(a[1]);
end.

Это выводит nil. Но, на сколько я понял, вы имеете в виду этот случай:

begin
  var a: array[1..2] of array of byte;
  writeln(a[1][0]);
end.

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

Статический массив динамических массивов? Ммм, это что-то новенькое :smile:

[quote=“Sun_Serega, post:1044, topic:143”] Насчёт той диаграммы по ссылке - я не понял что она означает. [/quote] - это как в дельфи динамический массив объявляется в памяти. 1-й элемент , сколько раз на него сослались. 2-й элемент - длинна массива. 3-й и последующий(имеют объявленный типа) - это уже собственно элементы массива.

[quote=“Sun_Serega, post:1044, topic:143”] Но, даже если бы массив всегда инициализировался массивом с 0 элеметов - это всё равно выдало бы ошибку. [/quote] -да, в моём случае точно бы выдало. Я попробую какой-нибудь тестовый пример создать , может действительно по исполнению это всегда будет эквивалентно.

1 лайк

Недавно на форуме обсуждали возможность установки значка на исполняемый файл, генерируемый компилятором PABC.NET. Это оказалось достаточно простой манипуляцией, но проводить её каждый раз при обновлении очень неудобно. Я хотел бы предложить разработчикам добавить такую возможность непосредственно в компилятор. Оформить это можно директивой вида {$AppIcon 'Icon.ico'}, либо параметром в настройках компилятора.

2 лайка

Считаю необходимым провести голосование.

Каким образом реализовать установку значка на генерируемый исполнимый файл?

  • Директивой
  • Отдельным параметром в настройках компилятора
  • Против данной возможности

0 голосов

Есть ещё вариант “Мне всё равно”. За него проголосовал 1 человек.

Если у кого будут другие предложения - готов добавить.

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

Предполагается, что это будет опциональным. По умолчанию - отключенным.

Ну будет - и будет…Не будет - не будет. Мне все равно тогда.

Т.е. добавить в голосование строчку “мне всё равно”?

Лучше всегда добавлять.

1 лайк

Если Вас интересует учесть там мой голос - да. А так - я высказался уже.

Это уже чёрный юмор будет.

Ну тогда пусть будет :smile:

А, облом. Нельзя изменить параметры опроса.

Я буду там присутствовать незримо)))

Уже зримо, но анонимно)

В студии можно выбирать в настройках проекта такое, но глобальная настройка компилятора для любого открытого в IDE проекта - это точно не то что надо.

В то же время, не всегда компиляция происходит из IDE, а про аргументы командной строки компилятора нигде не написано. Поэтому для возможности авто-компиляции - если делать то в первую очередь директивой.

1 лайк

Функционал был удален из-за лицензионных ограничений. Таскать с собой проприетарную майкрософтовскую хреновину времен динозавров, генерирующую .res файл нехорошо.

1 лайк

Если будет бесплатная “хреновина” на паскале, которая генерирует .res файл с иконкой - вы добавите такую директиву?

да

2 лайка

GraphABC:

    property Text: string read GetText write SetText;
    property Items[i: integer]: GraphABCStatusPanel read GetItem; default;
    property PanelsCount: integer read GetPanelsCount write SetPanelsCount;
  end;
  
  /// Тип рисунка GraphABC
  Picture = class
  public //Строка 886
    bmp, savedbmp: Bitmap;
    gb: Graphics;
    istransp: boolean;
    transpcolor: System.Drawing.Color;
    procedure SetWidth(w: integer);
    function GetWidth: integer;
    procedure SetHeight(h: integer);
    function GetHeight: integer;
    procedure SetTransparent(b: boolean);
    procedure SetTransparentColor(c: GraphABC.Color);
    function GetTransparentColor: GraphABC.Color;
  public 
    /// Создает рисунок размера w на h пикселей
    constructor Create(w, h: integer);
    /// Создает рисунок из файла с именем fname
    constructor Create(fname: string);
    /// Создает рисунок из прямоугольника r графического окна

Это нормально, что у Picture все поля публичные? Есть ведь свойства, а поля вроде не должны читаться так.

Кстати, на киберфоруме спрашивали про загрузку картинки в GraphABC из $resource. Можно добавить конструктор принимающий поток?