Форум: "Компоненты";
Текущий архив: 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