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

Тогда уже DistinctBy :slight_smile: Я честно говоря не анализировал - там может быть еще много таких. MaxBy - уже невозможно было терпеть без неё.

2 лайка

Я тоже не анализировал, но .DistinctBy давно не хватало…

Сейчас по всем методам последовательностей прошёлся - не хватает ещё только .AdjacentGroupBy.
Ещё ни разу не видел применения .AdjacentGroup, а вот .AdjacentGroupBy, по крайней мере в задачках на куберфоруме - много где не хватало.

Для последнего предлагаю такую функцию:

function AdjacentGroupBy<T1,T2>(Self: sequence of T1; selector: T1->T2): sequence of (T2, List<T1>); extensionmethod;
begin
  var last: List<T1>;
  var last_key: T2;
  
  foreach var a in Self do
  begin
    var key := selector(a);
    
    if key<>last_key then
    begin
      if last<>nil then yield (last_key, last);
      last_key := key;
      last := new List<T1>;
    end;
    
    last += a;
  end;
  
end;

И дополнительный класс из реализации .AdjacentGroup не нужен. Я так понимаю вы использовали его для возможности применить .ToArray … Вот только в .ToArray тот же алгоритм добавления элементов что и у списка. Только .ToArray в самом конце создаёт ещё 1 массив, который в случае списков - не нужен.

@Admin, может сделаете метку “namespaces”? Так вам (в особенности ibond’у) будет удобнее исправлять их. Поставить эту метку нужно на эти issue:

https://github.com/pascalabcnet/pascalabcnet/issues/1977 https://github.com/pascalabcnet/pascalabcnet/issues/2024 https://github.com/pascalabcnet/pascalabcnet/issues/2025 https://github.com/pascalabcnet/pascalabcnet/issues/2026 https://github.com/pascalabcnet/pascalabcnet/issues/2064 https://github.com/pascalabcnet/pascalabcnet/issues/2065 https://github.com/pascalabcnet/pascalabcnet/issues/2066 https://github.com/pascalabcnet/pascalabcnet/issues/2071 https://github.com/pascalabcnet/pascalabcnet/issues/2073

Сделал

1 лайк

В GraphWPF нету ничего типа GetPixel[s]. Единственная подпрограмма, как то считывающая содержимое окна - Window.Save. Как то не хорошо, ради считывания области окна - обязательно использовать файл на диске.

Можете, пожалуйста, сделать что то типа GetPixels, считывающего Array[,] of Color?

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

Ну всё окно то вы в файл сохраняете как то.

Посмотрите на строчку 1324 в GraphWPF. Похоже - именно она берёт пиксели из готового окна и превращает в содержимое битмапа. Вот таким же образом но не в файл - а в оперативную память перекинуть бы…

Среда умирает от подключения PABCRtl32:
https://youtu.be/4ifCVJF-kUo

Ну, у вас же наверное 64-битная платформа. Хотя конечно прикольно умирает.

1 лайк

Убрали из инсталлята PABCRtl32. Она особая - среда её не переваривает. Это как удалить пару dll из инсталлята - она вообще не запустится.

Здраствуйте, я можно сказать случайным образом нашел в модуле GraphWPF функцию Redraw(), которая в документации не описана. Ее назначение - процедура синхронизация вывода графики. Если мы откроем справочный файл по данному модулю, то найдем функцию invoke() с таким же описанием, но есть проблема. Этой функции просто нет, даже уже написав ее в редакторе не видно никаких подсказок. Когда запускаешь программу, выдается ошибка, о том что invoke неизвестное имя.

То есть вопрос в чем: Почему в документации есть нерабочая функция Invoke() и нет функции redraw()?

А по моему Invoke в Redraw переименовали, а справку исправить забыли.

Было бы плохо если бы анализатор кода не был бы согласен с компилятором. Тогда это, скорее всего, был бы баг.

Ну да, вот:

15 дней назад @Admin специально переименовал, и коммит имеет соответствующее имя.

Залил версию с обновленным Helpом

У .pas-файлов не высококачественные иконки:

У меня такие:

Попробуйте перепоставить систему в другую папку. У меня как-то исправилось именно после этого

1 лайк

_ как имя переменной - уже зарезервированно в паттерн мачинге. Может сразу добавить такой же функционал как в паттерн мачинге и C#?

type
  t1 = class
    static property p1: byte read 0;
  end;

begin
  var _ := t1.p1; // вызов t1.get_p1 и выкидывание результата
end.

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

Да нет же, это не часть паттерн мачинга. Я говорю - всё что уже задело бы функционал ядра уже есть:

А фича с удалением результата свойства - это не что то локальное как паттерн мачинг. Это может понадобится в повседневной жизни в любой момент.

Не буду с вами спорить.

1 лайк