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

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

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 нужно что-то сделать.

Вместо GetString есть .SubString.

У GetString и SubString разные реализации и функции

А поясните на примере пожалуйста, какую подстроку вы вырезаете из ресурсов

В смысле? Что по вашему .SubString делает? Вы уверены что смотрите не только на первую перегрузку?

Конкретно из ресурсов - никакую.Я из имени вырезаю,для свойства Name

Пример приведите

Да,уверен. Посмотрите тело моей функции и сравните.

PName := GetString(name, 1, name.LastIndexOf(’.’));

Я сказал про .SubString именно потому что увидел тело функции.

А вообще тут и name.Remove(name.LastIndexOf('.')) сработает. Хотя он сам - вызывает name.SubString(0,name.LastIndexOf('.')).

По моему имелся в виду пример на конкретных строках.


P.S. А ещё есть System.IO.Path.GetFileNameWithoutExtension.

1 лайк

Думаю уже не нужно,т.к. я меняю код