• 0
Zyablik3000

Вписать TRectangle в ScrollContent TPresentedScrollBox'а

Вопросы

Здравствуйте!

Есть TPresentedScrollBox с AutoCalculateContentSize:=False и ContentSize.Height:=10000 ContentSize.Width:=10000 и свой компонент наследник TRectangle в котором перекрыт ParentChanged

procedure TMyComponent.ParentChanged;
var
  str: string;
begin
  inherited ParentChanged;
  if Assigned(Self.Parent) then
  begin
    Self.Position.X:=Self.ParentControl.Position.X+Self.ParentControl.Padding.Left;
    Self.Position.Y:=Self.ParentControl.Position.Y+Self.ParentControl.Padding.Top;
    str:=Parent.ClassName;
    if (Parent is TScrollContent) then
    begin
      Self.Width:=(Parent as TScrollContent).Width-Self.ParentControl.Padding.Right;
      Self.Height:=(Parent as TScrollContent).Height-Self.ParentControl.Padding.Bottom;
    end
    else
    begin
      Self.Width:=Self.ParentControl.Width-Self.ParentControl.Padding.Right;
      Self.Height:=Self.ParentControl.Height-Self.ParentControl.Padding.Bottom;
    end;
    Self.RecalcAbsolute;
  end;
end;

Проблема в том, что в переменной str получаю 'TScrollContent', однако (Parent is TScrollContent) почему то всегда False и строки

Self.Width:=(Parent as TScrollContent).Width-Self.ParentControl.Padding.Right;
Self.Height:=(Parent as TScrollContent).Height-Self.ParentControl.Padding.Bottom;

никогда не выполняются.

Приведение типов в лоб без условия дает ошибку 'Invalid class typecast'

Как вписать в этот TScrollContent размером (0, 0, 10000, 10000) TRectangle?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 0

Странно конечно, zj не имея исходников мне лично сложно сказать.
Я бы посмотрел в стилях, что там за объекты используются.

По сути, от Parent вам нужны лишь размеры.
Попробуйте так:

    if (Parent is TControl) then
    begin
      Self.Width  := (Parent as TControl).Width  - Self.ParentControl.Padding.Right;
      Self.Height := (Parent as TControl).Height - Self.ParentControl.Padding.Bottom;
    end
    else
    begin
      Self.Width:=Self.ParentControl.Width-Self.ParentControl.Padding.Right;
      Self.Height:=Self.ParentControl.Height-Self.ParentControl.Padding.Bottom;
    end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Проверил. Не работает. если

(Parent is TControl)

то берутся не размеры ScrollContent, а размеры PresentedScrollBox без скроллбаров (картинка ниже).

ScrollBox.png.10aa0fa5fad40639d1969cb6c61acad5.png

Это не измененный стиль. Это Paint.

Стиль дефолтный, не менялся. В дефолтном стиле content: TLayer. Написал (хоть это и бредом попахивает)

(Parent is TLayer)

результата нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Проблема в том что есть 2 TScrollContent, один в FMX.Layouts, другой в FMX.ScrollBox...
поскольку пользуете TPresentedScrollBox, то разворачивайте неймспейс вручную и пишите if (Parent is FMX.ScrollBox.TScrollContent) then

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 часа назад, Slym сказал:

есть 2 TScrollContent, один в FMX.Layouts, другой в FMX.ScrollBox

Опа... не знал...
Век живи - век учись)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу