Перейти к содержанию
Fire Monkey от А до Я
  • 0

Компонент - наследник TPresentedScrollBox


Zyablik3000

Вопрос

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

Есть такой код:

 

unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.ScrollBox, FMX.StdCtrls;

type
  TScrBox = class(TPresentedScrollBox)
    public
	constructor Create(AOwner: TComponent); override;	
      procedure Paint; override;
  end;

  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FContentChange: TNotifyEvent;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.fmx}

{ TScrBox }

constructor TScrBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

procedure TScrBox.Paint;
begin
  inherited;
  Canvas.DrawDashRect(LocalRect, 0, 0, AllCorners, 1, TAlphaColorRec.Red);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  ScrBox: TScrBox;
  Pnl: TPanel;
begin
  ScrBox:=TScrBox.Create(Self);
  ScrBox.Parent:=Self;
  ScrBox.AutoCalculateContentSize:=False;
  ScrBox.ContentSize.Width:=1000;
  ScrBox.ContentSize.Height:=1000;
  Pnl:=TPanel.Create(ScrBox);
  Pnl.Parent:=ScrBox;
  Pnl.Position.X:=10;
  Pnl.Position.Y:=10;
end;

end.

Однако, вопреки ожиданиям, при клике на Button1 получаю

PresentedScrollBox.jpg.baff81745fca224c135b06b0cb56ef7e.jpg

Ни скроллбаров, ни панельки внутри ScrBox.

Подскажите, что не так? Как правильно унаследоваться от TPresentedScrollBox?

Ссылка на комментарий

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

  • 0

зачем скролл - если нечего скроллить? кинь в скроллбокс компонент, который будет пересекать границу родителя - и будет тебе скролл

 

Изменено пользователем rareMax
Ссылка на комментарий
  • 0

Как нечего? А TPanel? У неё же parent:=scrollbox.

Если не наследовать, а просто бросить на форму TPresentedScrollBox и задать contentsize и autocalculatecontentsize=false, то все норм. И скроллбары и скроллинг есть.

Изменено пользователем Zyablik3000
Знаки припинания
Ссылка на комментарий
  • 2

Всем спасибо) Решение нашел сам.

Прочитав http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-1-ru/  и другие материалы с этой странички (к слову: жутко полезная информация) перекрыл в своем компоненте функцию

function DefinePresentationName: string; override;

function TScrBox.DefinePresentationName: string;
begin
  Result:='PresentedScrollBox-style';
end;

Дело оказалось в том, что не загружалась презентация для моего компонента (а модель создавалась), точнее пыталась загрузиться презентация 'ScrBox-style', прокси для которой не зарегистрирован. Ведь имя презентации формировалось как 'Имя класса' + '-style'

Но этого оказалось недостаточно. Еще понадобилось задать свойство StyleLookup:='scrollboxstyle'; т.к. скроллбары и прочие контролы берутся из стиля TStyledCustomScrollBox'а, который описан в FMX.ScrollBox.Style.

Надеюсь кому-то поможет, и этот кто-то не будет как я тратить на решение этой задачи три дня жизни.

 

Test.7z

Ссылка на комментарий

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

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

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

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

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

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

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

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

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

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