Это создает новое свойство, а не перекрывать существующую собственность. И на самом деле переопределение свойств невозможно. Если SetFormStyle
был виртуальным, вы можете переопределить сеттер.
Вы можете получить доступ к унаследованному имуществу. Как это:
type
TMyForm = class(TForm)
private
function GetFormStyle: TFormStyle;
procedure SetFormStyle(Value: TFormStyle);
public
property FormStyle: TFormStyle read GetFormStyle write SetFormStyle;
end;
function TMyForm.GetFormStyle: TFormStyle;
begin
Result := inherited FormStyle;
end;
procedure TMyForm.SetFormStyle(Value: TFormStyle);
begin
if Value <> FormStyle then
begin
DoSomething;
inherited FormStyle := Value;
end;
end;
Проблема в том, что ваша собственность не будет вытеснять TForm
свойства в .dfm файлов. Когда считываются файлы .dfm, FormStyle
ссылается на свойство TForm
. Вы можете установить свое свойство во время выполнения, если у вас есть ссылка на TMyForm
.
Итак, пока код выше будет компилироваться, я не ожидаю, что он решит вашу проблему. Я ответил на прямой вопрос о том, как получить доступ к унаследованному свойству из производного класса, но я не думаю, что решил свою актуальную проблему.
Мои инстинкты в том, что предлагаемый вами дизайн и код выше - плохая идея. Поскольку изменение стиля формы приведет к повторному созданию окна, возможно, вам действительно нужно переопределить CreateParams
или CreateWnd
.
Да, изменение стиля во время выполнения - определенно плохая идея, но люди, которые разработали приложение, которое я выполняю, не знали лучше, поэтому теперь мне приходится иметь дело с ним. Возможно, я должен переименовать DoSomething в PrepareBecauseAllHellAreGonnaBreakLoose. –