Написание собственного элемента управления ползунком в Firemonkey, который прекрасно работает во время выполнения, но часто приводит к сбою конструктора.Я отследил падение до доступа к элементам управления Height, вызванным из моего переопределенного «DoRealign».
Он не падает все время, и частое нажатие «ОК» позволит мне продолжить проектирование формы, но никогдавылетает во время выполнения.Моя единственная работа - просто выйти из этой процедуры при условии «csDesigning in ComponentState».Мне любопытно узнать, где я ошибаюсь с моим дизайном компонентов.
procedure TLFFader.DoRealign;
var
vI, T: TFmxObject;
NewSize: Single;
begin
inherited;
if not FDisableAlign then
begin
FDisableAlign := True;
try
T := FindStyleResource('vtrack');
if Assigned(T) and (T is TControl) then
TControl(T).Visible := True;
if Assigned(T) and (T is TControl) and (Max > Min) then
begin
vI := FindStyleResource('vindicator');
if Assigned(vI) and (vI is TControl) then
begin
NewSize := (TControl(T).Height -
TControl(T).Padding.top -
TControl(T).Padding.bottom -
TControl(vI).Margins.top -
TControl(vI).Margins.bottom) * FValueRange.RelativeValue;
TControl(vI).Height := Round(NewSize);
TControl(vI).Visible := TControl(vI).Height > 2;
end;
end;
if assigned(FThumb) then
begin
FThumb.Width := Width;
FThumb.Height := FThumbHeight;
FThumb.Position.X := 0;
FThumb.Position.Y := (Height - FThumbHeight) * (1-FValueRange.RelativeValue);
FThumbText.Text := FPercentPrefix + IntToStr(Round(FValueRange.RelativeValue * 100))+'%';
end;
finally
FDisableAlign := False;
end;
end;
end;