-
Вроде несложная задачка, но споткнулся.
Создается составной компонент:
TCompoundControl = class(TWinControl) private FInnerControl : TControl; //(Например TEdit) FLabel: TLabel; FSplitter: TSplitter; procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; ... end;
procedure TCompoundControl.CMTextChanged(var Message: TMessage); begin Flabel.Caption := Caption; end;
Как сделать так, чтобы в design-time корректно отображалась Caption? То есть, при добавлении контрола на форму его Caption становился равен его Name? У меня он почему-то пустой.
-
В конструкторе: ControlStyle := ControlStyle + [csSetCaption];
-
Неа, не правильно. Впрочем, спасибо, уже подсмотрел в исходнике TLabelEdit. Если вдруг кому интересно:
TCompoundControl = class(TWinControl) ... protected procedure SetName(const Value: TComponentName); override; ... end;
procedure TCompoundControl.SetName(const Value: TComponentName); begin if (csDesigning in ComponentState) and ((FLabel.GetTextLen = 0) or (CompareText(FLabel.Caption, Name) = 0)) then FLabel.Caption := Value; inherited; end;
-
procedure TControl.SetName(const Value: TComponentName);
var
ChangeText: Boolean;
begin
ChangeText := (csSetCaption in ControlStyle) and
not (csLoading in ComponentState) and (Name = Text) and
((Owner = nil) or not (Owner is TControl) or
not (csLoading in TControl(Owner).ComponentState));
inherited SetName(Value);
if ChangeText then Text := Value;
end; Если у вас собственное Caption типа
property Caption: string read FCaption write SetCaption; то естественно оно никоем образом не относится к свойству Text.
-
забыл есчо
TControl = class()
property Caption: TCaption read GetText write SetText stored IsCaptionStored;
-
> misha_gr (15.01.07 13:09) [2]
> Неа, не правильно.
У Вас. Правильно - использовать "родное" свойство Caption.
-
to Юрий Зотов.
Я, пожалуй, неправильно сформулировал вопрос. Допустим, когда я добавляю на форму какой-нить компонент, тот же TLabel, его Caption автоматически становится равным его имени. При изменении имени тут же меняется и Caption (если Caption не изменялся разработчиком). Вот такого же эффекта я и хотел добиться для составного компонента. Что и было достигнуто путем подглядывания в "близкий по духу" TLabeledEdit.
Благодарю за ответы и звыняйте за путанную формулировку.
-
> misha_gr (18.01.07 10:23) [6]
См. [1], [3], [4] и [5]. В совокупности с [0] это и получите.
|