Главная страница
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.05 c
2-1144140111
__alex
2006-04-04 12:41
2006.04.16
Изменение переменной-счетчика в цикле for


2-1143722889
max1980
2006-03-30 16:48
2006.04.16
Нестандартные цвета компонентов


1-1142420907
V-A-V
2006-03-15 14:08
2006.04.16
Просмотр XML файлов


15-1143096388
Dec
2006-03-23 09:46
2006.04.16
Подскажите хороший форум по VBA


15-1143016899
SergP.
2006-03-22 11:41
2006.04.16
Кто-нить помнит команду очистки Black-List a в модеме?