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

Изначально так и было,но тогда не получится реализовать свойство “Name”

А как записать картинку в ресурсы?

{$resource Картинка.png}

begin
  
end.

Не обязательно возвращать полноценное имя при создании из потока. Можно возвращать nil, а можно кидать исключение.

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

Хорошо,как тогда назвать?

Так и назвать, именем ресурса. И можно ещё в скобках добавить, что имеется в виду $resource, раз даже @Admin забыл что такое ресурсы программы))

1 лайк

А какие еще могут быть ресурсы?

@Admin,примите мои поправки и предложения?

Какие?

Давайте по одному

1 лайк

Первым делом хотелось бы вот это:

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

InitOb4 и InitOb5 + 2 последних конструктура. Не работает,если только в самом модуле менять.Вылетатет внутренняя ошибка компилятора,я уже писал какая. Код рабочий,думаю у вас ошибки.

2 сообщения перенесены в тему Болталка PascalABC.NET

Не позиционируем. Читайте на сайте.

Мы его позиционируем как использующийся в сфере образования и научных исследований.

Это разные вещи.

Обучающий - это два оператора и три операции.

Это вы не умеете код в стандартных модулях менять. Всё работает.

Приведите пожалуйста дельту - что добавить в класс. В приватную секцию отдельно, в публичную - отдельно.

И отформатируйте пожалуйста код стандартными средствами - тяжело читать.

Сообщение перенесено в тему Болталка PascalABC.NET

В приватную секцию:

  private
    PName: string;
    
    function GetString(self: string; oi, ni: integer): string;
    begin
      for var i := oi to ni do 
        result += self[i];
    end;
    
    procedure InitOb5(x, y, w, h: real; name: string);
    begin
      PName := GetString(name, 1, name.LastIndexOf('.'));
      var bmi := new System.Windows.Media.Imaging.BitmapImage();
      bmi.BeginInit();
      bmi.StreamSource := GetResourceStream(name);
      bmi.EndInit();
      Rest(x, y, w, h, bmi);
    end;
    
    procedure InitOb4(x, y: real; name: string);
    begin
      PName := GetString(name, 1, name.LastIndexOf('.'));
      var bmi := new System.Windows.Media.Imaging.BitmapImage();
      bmi.BeginInit();
      bmi.StreamSource := GetResourceStream(name);
      bmi.EndInit();
      Rest(x, y, bmi.PixelWidth, bmi.PixelHeight, bmi);
    end;

В публичную секцию

    ///Создает рисунок из потока
constructor(x, y: real; name: string; b: boolean := false):=Invoke(InitOb4, x, y, name);
    ///Создает рисунок из потока с шириной w и высотой h
constructor(x, y, w, h: real; name: string; b: boolean := false):=Invoke(InitOb5, x, y, w, h, name);

А параметр b у вас нигде не используется. b=True - из ресурсов - верно?

И что делает GetString?

К сожалению нет,просто параметр,что бы не было конфликтов. А GetString нужен что обрезать строку. Сейчас внесу несколько поправок,ибо вместо GetString можно использовать срезы для строк, и с параметром b нужно что-то сделать.