Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Проблема с Height   Найти похожие ветки 

 
Vetas   (2005-10-13 16:25) [0]

Здравствуйте. Проблема заключается в следующим.
В компоненте необходимо чтоб когда изменялось свойство Height изменялось и свойство HeightRoll. Для этого пишу:
(извините но на Builder_е)

class PACKAGE TInfoPanel : public TCustomPanel
{
private:
       ...
       int FHeightRoll;
       int  __fastcall GetHeight(void);
       void __fastcall SetHeight(int Value);
       void __fastcall SetHeightRoll(int Value);
       ...
protected:
__published:
       __property int HeightRoll = {read = FHeightRoll, write = SetHeightRoll};
       __property int Height = {read = GetHeight, write = SetHeight};        
};
//---------------------------------------------------------------------------

void __fastcall TInfoPanel::SetHeight(int Value){
  if (FRollOut)
     TControl::Height = Value;
  FHeightRoll = Value;}

int  __fastcall TInfoPanel::GetHeight(void){
  return TControl::Height;}

void __fastcall TInfoPanel::SetHeightRoll(int Value){
  if (FRollOut)
     SetHeight(Value);
     else
     FHeightRoll = Value;}


Дело в том, что в DTime когда у компонента меняю Height (не в OI, а мышкой растягиваю) HeightRoll остается  неизменным, в тоже время если менять в OI или RTime, то все работает. Я думаю, что когда изменяю высоту мышью, то  вызывается TControl::SetHeight, а не TInfoPanel::SetHeight. Подскажите как сделать чтоб все работало, заранее спасибо.


 
MBo ©   (2005-10-13 16:51) [1]

нужно в твоем компоненте вызвать Inherited (или как там у вас в Билдере делается), чтобы сохранился вызов виртального метода SetBounds


 
Vetas   (2005-10-13 18:05) [2]

написано!!!
TControl::Height = Value;


 
MBo ©   (2005-10-13 18:11) [3]

>написано!!!
>TControl::Height = Value;

Я не знаю, что это означает в Билдере.


 
Юрий Зотов ©   (2005-10-13 18:44) [4]

> Vetas   (13.10.05 16:25)

1. Метод SetHeight перекрыть не удастся, он и приватный, и статический. Перекрывать надо SetBounds.

2. Перекрыть свойство Height тоже  не удастся, свойства невиртуальны (по крайней мере, в Delphi). Поэтому и возникла указанная Вами проблема - в design-time Ваш метод SetHeight просто не вызывается.

А решение очень простое:

type
 TInfoPanel = class(TCustomPanel)
 private
   ...
   FHeightRoll: integer;
   procedure SetHeightRoll(const Value: integer);
 public
   procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
 published
   property HeightRoll: integer read FHeightRoll write SetHeightRoll default 0;        
 end;

procedure TInfoPanel.SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer);
begin
 FHeightRoll := AHeight;
 inherited
end;

procedure TInfoPanel.SetHeightRoll(const Value: integer);
begin
 if FHeightRoll <> Value then
   if FRollOut then
     Height := Value
   else
     FHeightRoll := Value
end;


 
Vetas   (2005-10-13 22:58) [5]

Большое спасибо. Как раз стал думать об этом



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
15-1143022683
Kolan
2006-03-22 13:18
2006.04.16
С чего начать изучать UML


9-1127987214
XCoder
2005-09-29 13:46
2006.04.16
Вопрос по LightMaps (OpenGL)


15-1143311952
ArtemESC
2006-03-25 21:39
2006.04.16
Найти иголку в стоге сена...


2-1143823246
ded22
2006-03-31 20:40
2006.04.16
Edit и Таблица


2-1144092699
Kapris
2006-04-03 23:31
2006.04.16
как нарисовать полуокруг ?