Перейти к содержанию
  • Регистрация
  • 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?

 

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


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

Рекомендуемые сообщения

  • 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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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

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

×
×
  • Создать...