Мнимые ошибки PascalABC.NET

@Sun_Serega что то начинает проясняться, благодарю

опять с проблемой…

uses formsabc;

begin
  mainform.SetSize(250, 250);
  mainform.CenterOnScreen;
  var p1:=new Panel;
  p1.Height:=200;
  p1.Width:=185;
  p1.Color:=color.Yellow;
  parentcontrol:=p1;
  var o:=new ListBox;
  o.Items.Add('пункт');
  o.Items.Add('пункт 2');
  var inf:=new Button('кнопка кнопка кнопка кнопка');
  inf.Width:=185;
end.

задав таким методом форму получаю такую картину: image

кнопка почему то залезла под список и никак не хочет из под него вылезать.

такое происходит только когда элементы находятся на панели.

если попытаться описать кнопку раньше списка, то получим следующее: image теперь список забрался под кнопку…

если попытаться сдвинуть с помощью linebreak; либо emptyspace(); то верхняя часть списка просто отжуётся image

я не понял все тонкости работы с панелью или что? просто на mainpanel(которая по умолчанию лежит поверх формы) всё располагается прекрасно

@Admin может это всё таки не моя ошибка? так же заметил такую проблему и со всеми остальными элементами. а ещё TextLabel() упорно не хочет размещаться на панели

Замените Panel на FlowPanel

1 лайк

Столкнулся со странным поведением в данном коде:

{$reference system.windows.forms.dll}

uses system, system.Windows, system.Windows.Forms;

type 
  editform=class(form)
    protected
      procedure wndproc(var m: message); override;
      begin
        var f:= new Form;
        f.FormBorderStyle:=FormBorderStyle.None;
      end;
  end;

begin
  
end.

f.FormBorderStyle:=FormBorderStyle.None; не хочет компилироваться с ошибкой:

Нельзя обратиться к статическому полю None через объект

Однако стоит поменять строку на f.FormBorderStyle:=system.Windows.Forms.FormBorderStyle.None; , как всё начинает прекрасно работать.

Не уверен, что это ошибка, возможно как то связано с уровнями доступа и это просто ограничение, но всё же странно

Нет, не ошибка. FormBorderStyle - это поле Form

1 лайк

3 сообщения было перемещено в эту тему: Ошибки компилятора PascalABC.Net

Если создать в юните класс по типу a = (b, c, d);, то анализатор кода будет показывать его поля(если так можно выразиться) и после [имя юнита].a. и после [имя юнита].

Это норма?

Норма

Тогда, такой вопрос. Допустим есть метод, который принимает одним из параметров класс а При вызове метода нужно выбрать одно из ‘полей’ этого класса. От выбора зависят дальнейшие действия. То есть то же самое, что и с ранее описанным вариантом, но так, что бы в корне юнита этих полей не было видно. Это как enum из C# , если не ошибаюсь

Ничего не понял, но класс это не enum - там правила видимости другие

проще говоря, как сделать подобие enum?

так, что бы его составные части было видно только при обращении через имя enum’a

В Object Pascal компоненты enum видны глобально - как и в C++.

То, что Вы хотите, можно сделать лишь компромиссно - например, так:

type A = class
  const Mon = 1;
end;

Понятно, спасибо

Или так:

type
  Месяца = static class
    private static val: (Январь, Февраль, Март);
  end;
  
begin
  var m := Месяца.Март;
end.

Но тогда нельзя будет объявить тип переменной m - этот тип анонимен.

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

Вообще надо какой нибудь enum class сделать как в C++

Только не класс, а запись, пожалуйста. Незачем память в куче выделять ради 4 байт.

именно. это и мне сильно не понравилось. генератор посмотрю, спасибо

а что если ввести какой ни будь атрибут для существующего варианта?