Перейти к содержанию
  • Регистрация

Mazzay

Пользователи
  • Публикаций

    58
  • Зарегистрирован

  • Посещение

Информация о Mazzay

  • Звание
    Продвинутый пользователь

Информация

  • Пол
    Мужчина
  • Город
    Саратов

Посетители профиля

712 просмотра профиля
  1. А какие ещё способы проверки есть? Экранная клавиатура сама свернулась, так как на форме не стало полей для ввода текста. Но if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) всё равно возвращает True.
  2. Во-во. А мне надо освободить память из-под объекта. Какие ещё ссылки на него, которые запомнил Владелец, обнулить?
  3. Или вот, в случае с Delphi: type TComponent = class(TPersistent, IInterface, IInterfaceComponentReference) private [weak] FOwner: TComponent; [weak] FOwner
  4. Кстати, в TComponent Owner объявлен как «unsafe». Почему тогда Create(Self) увеличивает счётчик ссылок дополнительно ещё на единицу? class PASCALIMPLEMENTATION TComponent : public TPersistent { ... private: __unsafe TComponent* FOwner; ... public: __property TComponent* Owner = {read=FOwner}; ... };
  5. Я и писал: Почему не нужно передавать указатель на себя потомку?
  6. Parent = NULL не могу. Мой объект — это компонент, который размещается на этом Parent. Можно сделать Owner = NULL, но это как-то, ИМХО, неправильно.
  7. Или как мне сделать, чтобы ссылок на объект не осталось, и он уничтожился? Этого недостаточно: bi->Parent = NULL;
  8. Выходит, без условной компиляции не обойтись? В деструкторах у меня уничтожаются все дочерние объекты, что в свою очередь должно убирать их с экрана, например. Писать вместо деструкторов функции типа «Hide», а память пусть остаётся занятой?
  9. bi->Parent = NULL; Если это вставить перед delete, как здесь описано, не помогает. Помогает, только если ещё и в конструкторе не указывать владельца «TPanel(NULL)», что не считаю нормальным: __fastcall TBoxItem::TBoxItem(TComponent* Owner, String fText) : TPanel(NULL) ////////////////// В результате остановился на таком варианте, но он мне тоже не нравится: bi->Parent = NULL; #if defined(__ANDROID__) || defined(__APPLE__) bi->DisposeOf(); #endif delete bi; bi = NULL;
  10. bi->Parent = NULL; Если это вставить перед delete, как здесь описано, не помогает. Помогает, только если ещё и в конструкторе не указывать владельца «TPanel(NULL)», что не считаю нормальным: __fastcall TBoxItem::TBoxItem(TComponent* Owner, String fText) : TPanel(NULL)
  11. Ничего не приходит на ум! Что я делаю не так? Под Windows delete вызывает деструктор, под Android — нет. Unit1.h #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <FMX.Controls.hpp> #include <FMX.Forms.hpp> #include <FMX.Controls.Presentation.hpp> #include <FMX.StdCtrls.hpp> #include <FMX.Types.hpp> //--------------------------------------------------------------------------- class TBoxItem : public TPanel { private: TLabel* tInfo; public: __fastcall TBoxItem(TComponent* Owner, String fText); __fastcall ~TBoxItem(); }; //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *ButtonNew; TButton *ButtonDelete; TLabel *LabelConstructor; TLabel *LabelDestructor; void __fastcall ButtonNewClick(TObject *Sender); void __fastcall ButtonDeleteClick(TObject *Sender); private: // User declarations TBoxItem *bi; public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif Unit1.cpp #include <fmx.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { bi = NULL; } //--------------------------------------------------------------------------- __fastcall TBoxItem::TBoxItem(TComponent* Owner, String fText) : TPanel(Owner) { Form1->LabelConstructor->Text = Form1->LabelConstructor->Text + " OK"; Parent = (TFmxObject*)Owner; tInfo = new TLabel(this); tInfo->Parent = this; tInfo->TextSettings->HorzAlign = TTextAlign::Center; tInfo->Align = TAlignLayout::Center; tInfo->Text = fText; Height = 32; Align = TAlignLayout::Bottom; } //--------------------------------------------------------------------------- __fastcall TBoxItem::~TBoxItem() { Form1->LabelDestructor->Text = Form1->LabelDestructor->Text + " OK"; delete tInfo; } void __fastcall TForm1::ButtonNewClick(TObject *Sender) { if(!bi) { bi = new TBoxItem(this, "BoxItem"); ButtonNew->Enabled = false; ButtonDelete->Enabled = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::ButtonDeleteClick(TObject *Sender) { if(bi) { delete bi; // под Android деструктор не вызывается, объект не уничтожается (( bi = NULL; ButtonNew->Enabled = true; ButtonDelete->Enabled = false; } } //--------------------------------------------------------------------------- Windows (жму кнопку «new» — получаю «Constructor OK» и панель внизу экрана, жму «delete» — получаю «Destructor OK», панель удаляется) Android (жму кнопку «new» — получаю «Constructor OK» и панель внизу экрана, жму «delete» — «Destructor OK» не получаю, панель НЕ удаляется) C++Builder 10.2.3 Tokyo delete bi; не вызывает деструктор. ((
  12. Вызываю MessageDlg(text, TMsgDlgType::mtConfirmation, mbYesNo, 0, ACloseDialogProc); Под Windows на кнопках «Да» и «Нет». Под Android — «No» и «Yes». Как сделать по-русски?
  13. Собственно: for(int i = 0; i < ListView1->ControlsCount; ++i) if(dynamic_cast<TControl*>(ListView1->Controls->Items[i])->ClassNameIs("TSearchBox")) { dynamic_cast<TSearchBox*>(ListView1->Controls->Items[i])->Text = EmptyStr; break; }
  14. А ещё есть какие-нибудь варианты? C++Builder не поддерживает helper.
  15. Я к тому, что FGX установлен. Но объявления класса TfgToast нет ни в одном hpp-файле.
×
×
  • Создать...