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

krapotkin

Пользователи
  • Постов

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

  • Посещение

  • Победитель дней

    209

Активность репутации

  1. Like
    krapotkin получил реакцию от Alisson R Oliveira в Уничтожение TFrame   
    все-таки вернусь к логической загадке ARC
    1. если вы все ссылки на объект обнулили, то вызывать его деструктор не требуется, его вызовут за вас
    2. если не все обнулили, но вызвали деструктор, значит имеем нехилую вероятность того, что кто-то, у кого осталась ссылка, обратится по ней к объекту. тогда мы имеем гарантированный AV
    3. Тогда зачем все эти варианты с DisposeOF ???
     
    У меня вся программа на фреймах построена, и ничего, создаются удаляются. При этом отлаживаюсь я в Win64, а потом запускаю на Andoird. И все работает штатно в обоих случаях. 
    Единственное отличие, я обычно не указываю владельца (Owner). Т.е.  F:=TMyFrame.Create(NIL)
    После использования сам убираю за собой
    F.Parent:=NIL;
    FreeAndNil(F)
    и все норм. 

    В некоторых фреймах еще большинство компонентов в динамике создается и пересоздается. и тоже никаких явных вызовов деструктора.
    Так что лучше все-таки следовать архитектуре, а не раскладывать костылики...
  2. Like
    krapotkin получил реакцию от Ingalime в Alexandria 11 not compatible with ModermListview by (rzaripov1990 ZuBy )   
    Actually that IS exactly a negative point to modify sources of standard components. You have to repeat the changes in every version.
    As a replacement I can suggest this.
    Or much better - the fgx-native library by Yaroslav Brovin. 
  3. Like
    krapotkin получил реакцию от Benny в Alexandria 11 not compatible with ModermListview by (rzaripov1990 ZuBy )   
    Actually that IS exactly a negative point to modify sources of standard components. You have to repeat the changes in every version.
    As a replacement I can suggest this.
    Or much better - the fgx-native library by Yaroslav Brovin. 
  4. Like
    krapotkin получил реакцию от Semitako в Не подключается Huawei   
    Короче, действуем примерно так.
    Я надеюсь, что базовые действия - скачать google latest adb driver - мы уже провели, но наш No- или Brand- name телефон недоступен
    Тогда
    1) идем в диспетчер устройств, находим там наше невстающее устройство, кликаем дважды,  и на закладке Сведения выбираем свойство ИД оборудования. Копируем себе
    что-то типа 

    2)  идем к файлам того самого драйвера, открываем android_winusb.inf 
    находим разделы
    [Google.NTx86] и [Google.NTamd64]
    и вписываем туда, прямо в оба
    ;galaxy tab a 2019
    %SingleAdbInterface%        = USB_Install, USB\VID_04E8&PID_6866
    %CompositeAdbInterface%     = USB_Install, USB\VID_04E8&PID_6866&MI_01
     
    3) делаем обновить драйвер, выбираем вариант Вручную, и указываем тот модифицированный файл
    если не берет автоматом, то "Выбрать из списка уже установленных..." --> "Есть диск" --> "Да, мне пофиг что он не подписан"
    4) The End
     
  5. Like
    krapotkin получил реакцию от Ingalime в RAD 11 и Android   
    По мне, лучший вариант - скачать Android Studio и там в настройках уже найти SDK manager и установить SDK/NDK в папки, которые лежат на вменяемой глубине.
    Delphi натравить на эти папки в настройках.
    Я делаю так со времен  Seattle и пока не подводила стратегия.
  6. Like
    krapotkin отреагировална Yarpda в [ANDROID] Смена USER-AGENT компонента Webbrowser   
    Публикую решение вопроса смены UserAgent под андроид (больше спасибо Ярославу!).
    Оказалось все до боли просто, но сам бы я до этого никогда не дошел...
    В общем. На форме лежит TWebBrowser с именем WB.
    1. Добавляем в Uses       Androidapi.Jni.Embarcadero, Androidapi.helpers;
    2. На кнопку вешаем:
     
    var NativeBrowser:JWebBrowser; begin if Supports(WB,JWebBrowser,NativeBrowser) then NativeBrowser.getSettings.setUserAgentString(stringToJString('MyUserAgent')); WebBrowser1.Navigate('https://www.whatsmyua.info'); // переходим на сайт, чтобы посмотреть что все получилось. end; И это все! Жесть. 3 дня на это убил. Может быть кому-то пригодится.
  7. Like
    krapotkin получил реакцию от OnePeople в Динамическое создание объекта во фрейме   
    эмм крайне странная логика, не ?
    обработчик должен присваивать тот кто создает, а не тот, кого создают
    и уж 99.9% компонент не должен знать ничего о классе, куда его будут вставлять
    procedure TFrame6.SomeProc(); var   img: TMyImage; begin img := TMyImage.Create(Self); img.parent := layout5; img.OnMouseDown := OnMouseDown; images.add(img); end;  
  8. Thanks
    krapotkin получил реакцию от Sascha в UpDown компонент для Firemonkey   
    spinbox ?
  9. Like
    krapotkin отреагировална gonzales в Push в Delphi11   
    Оставлю здесь информацию, как заставить работать пуши при переходе на delphi11. Если Вы заметили, что после перехода на 11 версию у Вас отвалились пуши, система не показывает firebase token, то проблема решается так.
    1. Скачиваем JSON с консоли FireBase

     
    2. Открываем его, видим следующий вид

    3. Вписываем в Настройках проекта в секцию Services в следующем соответствии:
    API key - current_key
    Application id - mobilesdk_app_id
    Project id - project_id
    GSM sender id - project_number
    4. И не забываем выставить в секцию Entitlement List галочку Receive push notifications.
    После этого все опять начинает работать. 
  10. Like
    krapotkin получил реакцию от Ingalime в Подключение к БД Firebird из Android   
    примеров полно, но нужно бы ТЗ иметь.
    обращение из программы к серверу - через THttpClient
    сервер - в зависимости от умений и знаний, на любом языке. традиционно у нас в ходу PHP
     
  11. Thanks
    krapotkin получил реакцию от Letter в Как открыть окно "Поделиться"   
    \Samples\Object Pascal\Mobile Snippets\ShareSheet
  12. Like
    krapotkin получил реакцию от Tumaso в Почему я не могу изменить программно свойствоTransferType y IdFTP?   
    1. делаем в коде Ctrl+клик по TransferType попадаем в модуль IdFTP выясняем что тип TransferType : TIdFTPTransferType
    2. делаем Ctrl+ клик по TIdFTPTransferType и попадаем в модуль IdFTPCommon
    3. этот модуль вписываем в uses нашего откуда мы начали это увлекательное путешествие.
    4*. (опциональное) в современных версиях принято не просто указывать константу, а еще и тип, чтобы работало автодополнение
    тогда строка выглядит как
    ftpbot.TransferType := TIdFTPTransferType.ftBinary;

    ------------------------------------
    Но вообще это какбэ азы совсем.
  13. Like
    krapotkin получил реакцию от Andrey Efimov в Почему я не могу изменить программно свойствоTransferType y IdFTP?   
    1. делаем в коде Ctrl+клик по TransferType попадаем в модуль IdFTP выясняем что тип TransferType : TIdFTPTransferType
    2. делаем Ctrl+ клик по TIdFTPTransferType и попадаем в модуль IdFTPCommon
    3. этот модуль вписываем в uses нашего откуда мы начали это увлекательное путешествие.
    4*. (опциональное) в современных версиях принято не просто указывать константу, а еще и тип, чтобы работало автодополнение
    тогда строка выглядит как
    ftpbot.TransferType := TIdFTPTransferType.ftBinary;

    ------------------------------------
    Но вообще это какбэ азы совсем.
  14. Like
    krapotkin отреагировална slav_z в О публикации приложения в магазине   
    Лучше все же купить аккаунт разработчика у гугла... если после этого останется психологический дискомфорт, взять 2-3 сеанса у психолога...
  15. Like
    krapotkin получил реакцию от Андрей Рулин в Движущееся изображение   
    onPaint вызывается не когда вы хотите, а когда система считает нужным 
    а чтоб она посчитала нужным, вызывайте Invalidate.
  16. Thanks
    krapotkin получил реакцию от Вадим Смоленский в Перенос на другой компьютер   
    https://www.google.com/search?client=opera&q=смонтировать+образ+iso+в+windows+10&sourceid=opera&ie=UTF-8&oe=UTF-8
  17. Thanks
    krapotkin получил реакцию от Вадим Смоленский в Перенос на другой компьютер   
    поддержу, но в данном случае как раз проблема не в том. лицензия-то есть. и к политике не имеет отношения. она бессрочная.
    а это интернет-инсталлер? может, из ISO-шечки попробовать?
    кроме того сообщение на скрине не говорит, что не установлены платформы, а лишь - нет того, что ожидает установки
    попробуйте чистый проект запустить. Если там появятся нужные платформы, нужно всего лишь поправить руками .dproj
  18. Thanks
    krapotkin получил реакцию от Вадим Смоленский в Перенос на другой компьютер   
    ну. явно установка не удалась. совсем
    вот ссылки на образ
    ftp://ftpd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2.iso
    http://altd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2.iso
    win 10 позволяет по правой кнопке смонтировать образ как диск. далее все как обычно
    ессн сначала зачистить все что вы написали выше. вроде еще в AppData что-то валяется.
  19. Like
    krapotkin получил реакцию от fredhack в Ошибка при компиляции   
    последнее - банально перезагрузить девайс. если не помогло, то и компьютер
  20. Thanks
    krapotkin получил реакцию от gonzales в Delphi 10.4.2 и Андроид 10   
    <AndroidSDK>\Tools\monitor.bat
  21. Haha
    krapotkin получил реакцию от gonzales в Delphi 10.4.2 и ComboBox   
    в кб текстовые итемы и listBoxItems хранятся раздельно
    и видимо, прямая связь - создание итемов по тексту - осталась, а обратная - потерялась в какой то переделке)
  22. Like
    krapotkin получил реакцию от OnePeople в Delphi 10.4.2 и ComboBox   
    эмм
    вот вполне рабочий вариант
    procedure TForm1.b1Click(Sender: TObject); var   item: tlistboxitem;   i: integer; begin   for i := 1 to 2 do   begin     item := tlistboxitem.Create(nil);     item.Text := inttostr(i);     cbb1.ListBox.AddObject(item);   end; end; procedure TForm1.b2Click(Sender: TObject); var   item: tlistboxitem;   i: integer; begin   for i := 3 to 4 do   begin     item := tlistboxitem.Create(nil);     item.Text := inttostr(i);     cbb1.ListBox.AddObject(item);   end; end;  
  23. Like
    krapotkin отреагировална Slym в Как перевести данные из TStrings в TMemoryStream?   
    Вангую: потом будет вопрос как понять что весь stream прилетел  а не его некоторая часть...
  24. Like
    krapotkin отреагировална Navadvipa Chandra das в FireDAC, PostgreSQL процедуры и Blob параметры   
    Здравствуйте!
    Блоб параметры в процедурах PostgreSQL победить не удалось, а вот та же функциональность через Блоб-поля TFDQuery была достигнута. В целом такой вариант более универсален.
    void __fastcall TNNConfig::SaveToDB()
    {
      if ( Connection && !Connection->Connected )
        return;
      TMemoryStream* ms = new TMemoryStream();
      fFiler = new TNNTextStream( ms );
      try {
        SaveFilerFromUserEvent();
        std::unique_ptr< TFDQuery > quReg( new TFDQuery( this ) );
        std::unique_ptr< TFDTransaction > trReg( new TFDTransaction( this ) );
        quReg->Connection  = Connection;
        trReg->Connection  = Connection;
        quReg->Transaction = trReg.get();
        String RK = RegistryKey();
        Connection->StartTransaction();
        try {
          quReg->SQL->Text = "SELECT \"UserRegKey\", \"UserData\" FROM \"UserReg\" where \"UserRegKey\" = :UserRegKey_";
          quReg->Params->Items[ 0 ]->DataType   = ftString;
          quReg->Params->Items[ 0 ]->AsString   = RK;
          quReg->Open();
          if ( quReg->RecordCount == 0 ) {
            quReg->Insert();
            quReg->Fields->Fields[ 0 ]->AsString = RK;
          } else
            quReg->Edit();
          TBlobField *bf = ((TBlobField *)(quReg->Fields->Fields[ 1 ]));
          bf->LoadFromStream( Filer );
          quReg->Post();
          Connection->Commit();
        } catch ( ... ) {
          Connection->Rollback();
        }
      } __finally {
        delete fFiler;
        fFiler = nullptr;
      }
    }
    bool __fastcall TNNConfig::LoadFromDB()
    {
      if ( Connection && !Connection->Connected )
        return false;
      bool B = false;
      std::unique_ptr< TFDQuery > quReg( new TFDQuery( this ) );
      std::unique_ptr< TFDTransaction > trReg( new TFDTransaction( this ) );
      quReg->Connection  = Connection;
      trReg->Connection  = Connection;
      quReg->Transaction = trReg.get();
      quReg->SQL->Text = "SELECT \"UserRegKey\", \"UserData\" FROM \"UserReg\" where \"UserRegKey\" = :UserRegKey_";
      quReg->Params->Items[ 0 ]->DataType   = ftString;
      quReg->Params->Items[ 0 ]->AsString   = RegistryKey();
      quReg->Open();
      if ( quReg->RecordCount == 1 ) {
        TBlobField *bf = ((TBlobField *)(quReg->Fields->Fields[ 1 ]));
        bf->SaveToStream( Filer );
        B = true;
      }
      return B;
    }
     
    Вопрос закрыт!
    Спасибо!
    С уважением, Навадвипа Чандра дас.
  25. Like
    krapotkin отреагировална slav_z в FMX: Скроллинг и нажатия   
    Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
    Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,

    получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
    Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
    Делаем следующее:

    Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
    Удачи!
    https://github.com/slav-libx/scroll-click.git
×
×
  • Создать...