Товарищи, приведенный тут пример из С++ вообще не из реалий .NET. Зачем оно в нем нужно - иметь возможность объявлять всякие массивы на стеке с вычисляемым количеством значений(int Arr[N]), генерить шаблоны с переменными-аргументами, значения которых должны быть известны на этапе компиляции (template <int N>)… Таких проблем в Паскалях нет, и делать костыли для их решения абсолютно бессмысленно.
Кстати, вроде ж когда-то кто-то писал в качестве дипломной, или еще какой работы, плагин для Eclipse? Мертв?
Все плагины для Эклипса пишутся в расчёте на конкретную версию Эклипса и с другими не работают. По крайней мере, с другими я не талкивался. Тот плагин благополучно 4 года назад работал с какой-то версией Эклипса.
Собственно, нет проблем. Если кто-то хочет взяться - можно внедрить консольный компилятор в Visual Studio Code - говорят, очень хороший редактор.
@Admin как насчёт выложить презентации с pascalabc.net на гитхаб? Там тонна ошибок, в основном опечаток и остальной мелочи, вроде того что в последовательностях Range('a','z').Println ставит пробелы между буквами, хотя если запустить в паскале - выводит без пробелов.
Сколько бы там нибыло ошибок - там всё объясняется всё же лучше, чем смог бы я, поэтому я обычно на эти презентации посылаю новичков с куберфорума. Но, всё же, не хорошо, что там так много моментов которые запутывают.
Я когда то пробовал писать сюда что именно не так, но ничего из этого не вышло. Пулл реквестами исправлять было бы проще, и за того сколько там ошибок.
Как насчёт добавить перегрузки операторов += и -= для System.IntPtr? В C# они автоматически выводятся из + и -, а вы вроде для всего стандартного, даже такого как BigInteger эти перегрузки в PABCSystem делали.
А на что вы собираетесь делать указатели? Если на массивы, для чего в первую очередь предназначена арифметика указателей, то в PascalABC.NET это сделать просто не получится. Если для чего-то специфического, то это незачем встраивать в язык - сделайте перегрузку += самостоятельно и пользуйтесь.
Ну, я об этом и говорю. Мне арифметика указателей в паскале сильно нужна была один раз - в модуле ABCObjects или GraphABC мы быстро копировали часть битмэпа на канву. Написал без этого - пара лишних приведений типа.
Потом уже не нужна была никогда.
PascalABC.NET позиционируется как высокоуровневый язык - ну и - если вы помните - я делал топик, где обсуждал его основное предназначение - образование и академическая сфера.
ABCObjects, как и все остальные модули использующие GDI - более не поддерживаются.
Сейчас вместо них используются GraphWPF, WPFObjects и т.п.
А насчёт предложения - если надо чтоб несколько объектов появились одновременно:
uses GraphWPF, WPFObjects;
begin
var rects_created := false;
BeginFrameBasedAnimation(()->
begin
if not rects_created then
begin
rects_created := true;
Sleep(500);
for var x := 0 to 50 do
for var y := 0 to 20 do
new RectangleWPF(20+x*10,20+y*10,10,10,Color.FromRgb(Random(255),Random(255),Random(255)));
end;
end);
end.
BeginFrameBasedAnimation в GraphWPF работает примерно как LockDrawing в GraphABC.
Пока процедура перерисовки не закончит выполнятся - экран не обновится.
Может и в GraphABC можно так же сделать через LockDrawing, но лучше всё же забыть про него и перейти на WPF.
Заметил что в GraphABC.Redraw() отсутствует tempbmp.Dispose();
Мне нужна была частичная перерисовка, написал такую функцию:
procedure Redraw(rect:Rectangle);
var
tempbmp: Bitmap;
gr:Graphics:= GraphWindowGraphics;
begin
if MainForm.WindowState = FormWindowState.Minimized then exit;
tempbmp := GetView(GraphBufferBitmap, rect);
//tempbmp.SetResolution(gr.DpiX, gr.DpiY);
System.Threading.Monitor.Enter(GraphAbcControl);
var m := gr.Transform;
gr.ResetTransform;
gr.DrawImage(tempbmp, rect.X, rect.Y);
gr.Transform := m;
System.Threading.Monitor.Exit(GraphAbcControl);
tempbmp.Dispose();
end;
Если не понимаете - это значит что их уже не будут исправлять и дополнять. Используйте модули на основанные на WPF. Или используйте System.Drawing напрямую, без стандартных модулей.