Jump to content

Как правильно не создавать визуальные элементы перед показом фрейма?


x11

Recommended Posts

В зависимости от разных условий, некоторые визуальные элементы в браузере отображать не следует. Например, TUniPanel, TUniEdit, TUniContainerPanel.

И это следует делать в событии onReady фрейма.

Я понимаю, что достаточно Visible или Hide, но это не очень подходит, т.к. элемент в браузер все равно передается с CSS-свойством Display: None и его можно потом отобразить с помощью DevTools. А очень желательно, чтобы этих элементов в браузере не было, чтобы они не передавались с бэкэнда сервера.

Пробовал просто удалять элементы перед показом фрейма (UniPanel1.Free), но есть проблемы. Например, появляются утечки памяти или вообще элемент в браузер все равно передается и виден на страничке.

Link to comment
Share on other sites

On 3/26/2021 at 5:55 PM, x11 said:

Пробовал просто удалять элементы перед показом фрейма (UniPanel1.Free), но есть проблемы. Например, появляются утечки памяти или вообще элемент в браузер все равно передается и виден на страничке.

 

On 3/26/2021 at 5:55 PM, x11 said:

И это следует делать в событии onReady фрейма.

Добрый день,

Используйте OnCreate событие.

Link to comment
Share on other sites

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

    with TfrdParentEditObj.Create(t) do
    begin
      Name     := 'frdParentEditObj' + T.PageIndex.ToString;
      Parent   := T;
      fCurrTabSheet := T;
      fCurrSuperType := ST;
      ShowHideElements;
      EditMode := aEditMode;
      IDObj    := idObject;

      DoAfterCreate;
      Show;
    end;

как ДО создания фрейма назначить свойства, если фрейма если не существует?

 

Link to comment
Share on other sites

В общем, попытался сделать с помощью костыля, т.е. перенес определение нужного свойства в OnCreate

но всё равно куча AV потом вываливается

t.Tag := ORD(ST);
 with TfrdParentEditObj.Create(t) do

...

...
 

procedure TfrdParentEditObj.UniFrameCreate(Sender: TObject);
begin
  inherited;

  if not assigned(self.owner)  then
  begin
    -ошибка-
    exit;
  end;

  if self.Owner is TUniTabSheet then
  begin
    fCurrSuperType := TSuperType((self.Owner as TUniTabSheet).Tag);// получаем переденное свойство
    ShowHideElements;// уничтожаем ненужные элементы
  end
  else
    -ошибка-

end;

куча исключений вываливается уже поcле Show, после всего моего кода, где-то в недрах uniGUI или в недрах RTL в модуле SYSTEM

class function TObject.InheritsFrom(AClass: TClass): Boolean;

 

Link to comment
Share on other sites

  • 3 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...