Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.042 c
15-1143376085
mfender
2006-03-26 16:28
2006.04.16
Пытаюсь вспомнить, как называются...


2-1144239738
_Вован
2006-04-05 16:22
2006.04.16
Как центрировать форму на экране во время выполнения приложения?


4-1138547949
Nostradamus
2006-01-29 18:19
2006.04.16
Handle поля ввода чужого приложения


2-1144232434
Std
2006-04-05 14:20
2006.04.16
РАбота с несколькими формами


2-1143632624
apic
2006-03-29 15:43
2006.04.16
Уважаемые мастера, ПАМАГИТЕ!!!!!!!!!!!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский