Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 20:52   #1
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию перегруженное свойство родителя

Всем доброго времени суток.
Имеется компонент на основе - TpaintBox. Нужно переопределить свойство, ну например - Left, доставшееся от родителя. Но мне так же нужно чтобы я имел доступ и к свойству родителя. Если конкретно то в моем компоненте свойство Left должно иметь тип - real которое будет использоваться для расчетов, и именно его я буду задавать из программы, а свойство Left родителя нужно для позиционирования на экране и должно высчитываться автоматически внутри компонента путем округления до целого. Как сделать?
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 12.05.2012, 21:28   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Так зачем его называть также?
Назовите его leftreal и опишите, как хотите (опираясь на описание в родителе).
Выше - мое имхо
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 12.05.2012, 22:07   #3
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Так зачем его называть также?
Назовите его leftreal и опишите, как хотите (опираясь на описание в родителе).
Выше - мое имхо
В настоящее время я так и делаю, назвал свойство (Left_, Top_, и т.д.), но дело в том что пару раз по инерции использовал свойства Left, Top и потом долго долго искал ошибку. Просто скажем процедуру переопределить можно, и вызвать метод родителя посредством incherited. Хотелось бы знать хотябы чисто в познавательных целях, возможно ли нечто подобное сделать со свойством.
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 12.05.2012, 22:14   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Эт о 2 разных свойства, зачем вы их хотите скрещивать?
=master= вне форума Ответить с цитированием
Старый 12.05.2012, 22:23   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Только набросок и в GetLeft, SetLeft понятно по другому
Код:
  TMyControl = class(TCustomControl)
  private
    fLeft: Real;
    function  GetLeft: Real;
    procedure SetLeft(Value: Real);
  published
    property Left: Real read GetLeft write SetLeft;
  end;

...

function TMyControl.GetLeft: Real;
begin
  if csDesigning in ComponentState then Result:= inherited Left
                                   else Result:=fLeft;
end;

procedure TMyControl.SetLeft(Value: Real);
begin
  fLeft:=Value;
  inherited Left:= Trunc(Value);
end;
Цитата:
Эт о 2 разных свойства, зачем вы их хотите скрещивать?
Иногда и полезно. Например генератор отчетов и удобно размеры и позиционирование объектов в мм с десятыми долями
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.05.2012 в 22:28.
Аватар вне форума Ответить с цитированием
Старый 12.05.2012, 22:39   #6
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от =master= Посмотреть сообщение
Эт о 2 разных свойства, зачем вы их хотите скрещивать?
Я их не хочу скрещивать, просто у меня в приложении графические примитивы (надписи, прямоугольники, окружности и т.д.) построены на основе PaintBox и все это реально обрабатывается на станке с ЧПУ, поэтому позиционирование элементов вплоть до двух знаков после запятой имеет значение. Родительские Left, Top нужны чисто для визуализации, ну и конечно всетаки логично и эстетично использовать в визуальном компоненте именно свойства с привычными именами (Left, Top, и т.д.), пусть и с типом real.

Цитата:
Сообщение от Аватар Посмотреть сообщение
Только набросок и в GetLeft, SetLeft понятно по другому
Дома нет Делфи приду на работу попробую. На первый взгляд должно работать.
Уже Чему-то научился Но этого мало

Последний раз редактировалось Stilet; 14.05.2012 в 21:18.
chingiz вне форума Ответить с цитированием
Старый 14.05.2012, 19:19   #7
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Только набросок и в GetLeft, SetLeft понятно по другому
Код:
  TMyControl = class(TCustomControl)
  private
    fLeft: Real;
    function  GetLeft: Real;
    procedure SetLeft(Value: Real);
  published
    property Left: Real read GetLeft write SetLeft;
  end;

...

function TMyControl.GetLeft: Real;
begin
  if csDesigning in ComponentState then Result:= inherited Left
                                   else Result:=fLeft;
end;

procedure TMyControl.SetLeft(Value: Real);
begin
  fLeft:=Value;
  inherited Left:= Trunc(Value);
end;
Аватар спасибо, все работает.
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатель на родителя в бинарном дереве Green Gin Общие вопросы C/C++ 8 01.04.2012 18:14
TDBTreeView. Узнать корневого родителя _SERGEYX_ Общие вопросы Delphi 2 09.09.2010 13:10
Вызов из потомка конструктор родителя Golovastik Общие вопросы C/C++ 3 03.07.2010 15:34
Перепутал родителя)) nusik Общие вопросы C/C++ 2 26.05.2009 11:40