-
Постов
116 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Весь контент ivadimos
-
всё так же. спасает только блокировка и разблокировка
-
проблема осталась(
-
заметил особенность. открыл прилагу - не меняет. заблокировал телефон, разблокировал. Цвет стал меняться
-
Естественно)
-
У меня не работает, или я что-то не так сделал
-
ой красавчик, как раз вчера загонялся с этим. Спасибо, попробую)
-
Думаете не пробовал? первым делом, но компилятор ругает, что все равно явно не знает какой там тип
-
Почти по такому принципу у меня сейчас и работает. У меня есть метод draw у родителя и я его просто переопределил для каждого наследника. НО. А если задача стоит так, что компоненты не содержат метода отрисовки? Они отрисовываются внешним классом, который имеет перегруженный метод, принимающий объекты. Внешний класс не имеет никакого отношения к этой иерархии классов.
-
FMX же юзает стилизацию той операционной системы, на которой Вы запускаете приложение. Можете проверить на TSwitch компонентах и будете удивлены)
-
Я это прекрасно понимаю, просто заинтересовало, есть ли такая возможность: перегрузить метод внешнего класса, который определит, что передаю я туда потомка класса. Хотя лист объявлен как лист объектов родительского класса.
-
Нужно создать список с объектами различных классов. Внешний модуль принимает элемент списка в перегруженный метод. Без использования операторов is, if, case of. Метод делает что угодно, допустим выводит сообщение. Я, естественно, понимаю, что проще и изящнее будет реализовать метод draw внутри каждого класса, но стоит другая задача. Мне просто интересно можно так сделать или нет? //в С# это решается через dynamic переменные.
-
логично, но как я могу перебирая лист определить тип без операторов is, if, case of? В этом то и проблема) Нужен какой-то лист, в который можно поместить объекты разных типов, а компилятор явно определяет его тип при передаче в перегруженный метод другого класса
-
об этом я написал в первом посте Есть третий класс С, который имеет перегруженный метод для всех дочерних классов (A). procedure p(obj: B1); procedure p(obj B2); Но объект в классе С всегда воспринимается как объект класса А. Как я могу решить проблему?
-
мы, видимо, недопонимаем друг друга. Класс реализующий Draw - сторонний класс, и в иерархии классов он обособлен от других, но в качестве параметров принимает все объекты классов, которые являются дочерними классу TBaseComponent unit Drawer; interface uses BaseComponent, RectangleComponent, CircleComponent, FMX.Dialogs; type TDrawer = Class procedure Draw(RectangleComponent: TRectangleComponent); overload; procedure Draw(Cicrcle: TCircleComponent); overload; End; implementation { TDrawer } procedure TDrawer.Draw(Rectangle: TRectangleComponent); begin ShowMessage('rect'); end; procedure TDrawer.Draw(Cicrcle: TCircleComponent); begin ShowMessage('сircle'); end; end.
-
мы, видимо, недопонимаем друг друга. Класс реализующий Draw - сторонний класс, и в иерархии классов он обособлен от других, но в качестве параметров принимает все объекты классов, которые являются дочерними классу TBaseComponent Забудьте про метод Draw в TBaseComponent. это совершенно левый метод, остался после экспериментов
-
В каком же это месте?) override переопределяет, а не перегружает метод.
-
C - совершенно другой класс с перегруженным методом для объектов класса B1 B2 B3... unit BaseComponent type TBaseComponent = class Abstract (TLayout) protected LastColor: TAlphaColor; procedure SetColor(Value: TAlphaColor); virtual; abstract; function GetColor: TAlphaColor; virtual; abstract; function GetStrokeSize: Single; virtual; procedure SetStrokeSize(const Value: Single); virtual; public procedure Draw; virtual; procedure Click; override; procedure MouseMove(Shift: TShiftState; X, Y: Single); override; procedure DoMouseLeave; override; constructor Create(AOwner: TComponent); override; published property Color: TAlphaColor read GetColor write SetColor; property StrokeSize: Single read GetStrokeSize write SetStrokeSize; end; unit CircleComponent type TEllipseComponent = class(TBaseComponent) private Ellipse: TEllipse; procedure SetColor(Value: TAlphaColor); override; function GetColor: TAlphaColor; override; function GetStrokeSize: Single; override; procedure SetStrokeSize(const Value: Single); override; public constructor Create(AOwner: TComponent); override; end; unit ShapeDrawer; TEllipseComponent = class public procedure Draw(Circle: TCircleComponent); overload; procedure Draw(Rectangle: TRectangleComponent); overload; constructor Create; end; есть List<TBaseComponent> в него свободно добавляются компоненты TCircleComponent, TRectangleComponent и т.д. tmpObject: TBaseComponent; for tmpObject in List do ShapeDrawer .Draw(tmpObject); // всегда его считает как TBaseComponent. Хотя в листе лежат TRectangleComponent и др.
-
Извиняюсь за псевдокод. Есть класс (A), у него есть несколько дочерних(B1.B2...) Создаю лист объектов TList<A>, в него добавляю объекты классов B1, B2... Есть третий класс С, который имеет перегруженный метод для всех дочерних классов (A). procedure p(obj: B1); procedure p(obj B2); Но объект в классе С всегда воспринимается как объект класса А. Как я могу решить проблему?
-
Это рейтинг поисковых запросов, JS на 8 месте, ага=) JS сейчас самый попсовый и востребованный язык. Лучше посмотреть на количество проектов на гите)
-
почему тогда он даже сейчас не популярен? несмотря на единство кода для всех платформ?
-
ну как плохие ассоциации. Первый вопрос который мне задают: делфи жив? Когда я говорю, что на нём работаю. Делфи у всех ассоциируется delphi 7. Переименование вызвало бы некий наплыв статей о "новом языке", многие девелоперы посмотрели бы на него с другой стороны. Жду 10.1 c настраиваемым listview)
-
Почему бы не переименовать делфи? У многих не очень хорошие ассоциации, а переименование языка с выходом новой студии сыграло бы на руку.