@Admin может это всё таки не моя ошибка? так же заметил такую проблему и со всеми остальными элементами.
а ещё TextLabel() упорно не хочет размещаться на панели
{$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; , как всё начинает прекрасно работать.
Не уверен, что это ошибка, возможно как то связано с уровнями доступа и это просто ограничение, но всё же странно
Если создать в юните класс по типу a = (b, c, d);, то анализатор кода будет показывать его поля(если так можно выразиться) и после [имя юнита].a. и после [имя юнита].
Тогда, такой вопрос.
Допустим есть метод, который принимает одним из параметров класс а При вызове метода нужно выбрать одно из ‘полей’ этого класса. От выбора зависят дальнейшие действия. То есть то же самое, что и с ранее описанным вариантом, но так, что бы в корне юнита этих полей не было видно. Это как enum из C# , если не ошибаюсь
type
Месяца = static class
private static val: (Январь, Февраль, Март);
end;
begin
var m := Месяца.Март;
end.
Но тогда нельзя будет объявить тип переменной m - этот тип анонимен.
А вообще, когда мне нужны были куча перечислений значений для модуля OpenGL - мне очень не понравилась идея создавать мусорку в модуле, там и так набито, поэтому я сделал кодогенератор, создающий такие типы:
И правда, так должно быть проще реализовать и ближе к уже существующей реализации:
type
// false - Не создавать имена в глобальном пространстве имён
// base=typeof(byte) - тип, хранящий значения перечисления
[EnumOptions(false, base=typeof(byte))]
Месяца = (Январь, Февраль, Март);
begin
var m := Месяца.Март;
end.