Помощь новичкам

Давайте тогда уже .zip или .rar всего проекта, тут 1 файлом не обойдёшься, слишком много зависимостей с другими файлами + без .pabcproj файла ничего компилироваться не будет.

Draw.rar (28,9 КБ)

У меня компилируется без проблем.

Странно. Может с .NET проблемы переустановить?

А, ну так вы ведь добавили .NETBrush и теперь компилируется. А вообще для того чтобы заливать вам нужно не System.Drawing.Pen а System.Drawing.SolidBrush. Работает примерно так же, можно тоже как то настраивать.

1 лайк

Не подскажите как связать toolStripMenuItem4: ToolStripMenuItem; с saveFileDialog1: SaveFileDialog; И как этим пользоваться.

Может ли кто то объяснить почему так работает?

Программа 1:

{$reference System.Windows.Forms.dll}

uses System.Windows.Forms;

begin
  var f := new Form;
  var wr := new System.IO.BinaryWriter(System.IO.File.Create('temp'));
  var h := f.Handle;//мало ли, может его уничтожит потому что в этой программе больше не используется
  wr.Write(integer(h));
  wr.BaseStream.Close;
  System.Windows.Forms.Application.Run(f);
end.

Программа 2:

{$reference System.Windows.Forms.dll}

uses System.Windows.Forms;

begin
  var re := new System.IO.BinaryReader(System.IO.File.OpenRead('temp'));
  var c := Form.FromHandle(System.IntPtr(re.ReadInt32()));//c уже тут оказывается = nil
  var f := Form(c);
  re.BaseStream.Close;System.IO.File.Delete('temp');
  
  Sleep(1000);
  
  writeln($'found form with {f.Width} width');//Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта.
  
  Sleep(1000);
  
  f.Close;
end.

Сама идея в том чтоб не закрывать форму при переходе между программами на паскале и C++, а передать права на владение ею между ними.

Как явно указать тип-параметр (T) для данной функции?

function SendRequestAsync<T>(methodToExecute: TeleSharp.TL.TLMethod): System.Threading.Tasks.Task<T>;

SendRequestAsync&<Tип>

1 лайк

Спасибо огромное!

1 лайк

Появился достаточно интересный вопрос. В PascalABC.NET, так же, как и в любом другом паскале можно написать заголовок программы через Program. Например, Program My. В каком-то паскале (возможно, TurboPascal) эта строчка была обязательна. А что эта строчка вообще даёт в PascalABC.NET, особенно после компиляции? Я лично никогда её не писал, и никаких проблем не было. Препод прессует, говорит, что без Program работать не будет!

Эта программа даёт именованное пространство имён. Если program A; то обращаться к глобальной переменной можно как A.n

2 лайка
"Поздравляю тебя, Шарик, ты - балбес"
(м/фильм "Зима в Простоквашино")

Оператор Program был введен в язык Н.Виртом из-за того, операционная система ЭВМ, для которой писалась первая реализация Паскаля, требовала явно описывать в модуле то, что сейчас называется потоками ввода/ввода. Подробности в известной книге Йенсена и Вирта. В дальнейшем Program фактически превратился для компиляторов в своеобразную строку комментария, не подлежащую обработке.

Мои скромные знания не позволяют догадаться, когда это может понадобиться.

1 лайк

А вот и нет :laughing::

Дайте угадаю, вы эту часть кода в принципе не написали, как с $undef было?)))

1 лайк

в сущности никогда

4 лайка

Здравствуйте. Есть это :

writeln(pas, 'setPenColor(',DrawPen.Color,');'); writeln(pas, 'setBrushColor(',DrawBrush.color,');');

В файле получается так:

setPenColor(Color [A=255, R=128, G=255, B=0]); setBrushColor(Color [Maroon]);

Как мне привести в общий RGB вид.

writeln(pas, $'SetPenColor(System.Drawing.Color.FromARGB({DrawPen.Color.ToARGB}))');
writeln(pas, $'SetPenColor(System.Drawing.Color.FromARGB({DrawBrush.Color.ToARGB}))');
  1. Создание .pas файлов с помощью программ обычно свидетельствует о извращениях (из за нехватки какой то функции IDE или т.п.). Расскажите зачем вам, возможно есть способ красивее.
  2. Пожалуйста, используйте Markdown чтобы добавлять код. В таком случае:

```

begin

writeln;

end.

```

Будет выглядеть как:

begin
  writeln;
end.

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

Идея такая, мы в pictureBox1 рисуем линии и тд в это время все что мы делаем переводится для Pascal ABC(который без.NET). На уроке мы не паримся набирая всё в ручную и сразу получаем *.pas

И да не могли бы Вы подробно объяснить 1. в 1.2 разве не

writeln(pas, $'SetBrushColor(System.Drawing.Color.FromARGB({DrawBrush.Color.ToARGB}))');

Интересно, то есть учитель требует обязательно код паскале без .net? И у меня на информатике, к примеру, были задания типо “нарисуйте график”, при чём учительница заставляла делать разметку циклами. У вас есть на этот случай план? И ещё, библиотека System.Drawing.dll в паскале без .net вообще доступна?

Недавно добавили форматную строку:

begin
  var i := 5;
  var s := $'i*2 and +1 = {i*2+1}';
  writeln(s);
end.

Выведет i*2 and +1 = 11.

По сути, вторая строчка переводится компилятором в var s := string.Format('i*2 and +1 = {0}',i*2+1);, вот только выглядит читабельнее.

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

Ещё, поэтому же, нет поддержки анализатора кода (Ctrl+Space, подсказка по нажатию точки и т.п.), но добавить собираются.

А, да… Вот так бывает когда копируешь не думая :wink:.

Ваш учитель, извините, что вещи их именами называю, офигел? Он что, считает, что графические библиотеки в Pascal ABC и PascalABC.NET совпадают?