Главная страница
    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.04 c
1-1142417495
КиТаЯц
2006-03-15 13:11
2006.04.16
OpenOffice вместо MSExcel


8-1131445555
Tristania
2005-11-08 13:25
2006.04.16
Увеличение/уменьшение изображения


9-1128332794
Maxx1
2005-10-03 13:46
2006.04.16
Глюки с SkyBoxом


3-1140516501
dreamse
2006-02-21 13:08
2006.04.16
как выбрать Select с таблицой DataTime ?


1-1142130463
Кашперук Иван
2006-03-12 05:27
2006.04.16
Как использовать свою форму для ToolTips





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский