@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.
задав таким методом форму получаю такую картину:
кнопка почему то залезла под список и никак не хочет из под него вылезать.
такое происходит только когда элементы находятся на панели.
если попытаться описать кнопку раньше списка, то получим следующее: теперь список забрался под кнопку…
если попытаться сдвинуть с помощью linebreak;
либо emptyspace();
то верхняя часть списка просто отжуётся
я не понял все тонкости работы с панелью или что? просто на mainpanel(которая по умолчанию лежит поверх формы) всё располагается прекрасно
@Admin может это всё таки не моя ошибка? так же заметил такую проблему и со всеми остальными элементами.
а ещё TextLabel()
упорно не хочет размещаться на панели
Замените Panel на FlowPanel
Столкнулся со странным поведением в данном коде:
{$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
Если создать в юните класс по типу 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 байт.
именно. это и мне сильно не понравилось. генератор посмотрю, спасибо
а что если ввести какой ни будь атрибут для существующего варианта?