AlexanderProkopenko,
нажал на канву: сохранил стартовую точку, запомнил, что рисуешь
двинул мышкой: нарисовал линию со стартовой до текущей точки, обновил стартовую на текущую
kazakovmaksim, если что, то в Delphi (Pascal) работает точно так же.
var a := 1;
var b := 'строка';
var c := TObject.Create;
var f := function: integer begin Result := 123 end; // переменная типа функции
var d := f(); // d - уже будет типа integer
insighter, затем, что ты изнутри класса пытаешься обратиться к чему-то снаружи не зная где это. Иди почитай хотя бы основы ООП, а то видимо SOLID тяжко для тебя.
Ужас какой.... Это отвратительный код, подходящий только для одного случая, когда кнопка сразу на форме.
При этом нарушаются сразу с десяток SOLID принципов
Это странное мнение. В данном случае "композиция" ни как не идёт в противоречие с "наследованием". Здесь обычный сборный контейнер.
Сущность из других сущностей. Нет смысла наследовать человека от компании или наоборот.
Так что тут не именно "композиция", а простая инкапсуляция.
Т.е. персона имеет данные о компании. Объект компании создается внутри класса персоны и доступен для изменения сразу, без инициализации извне.