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

slav_z

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

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

  • Посещение

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

    33

Сообщения, опубликованные slav_z

  1. 20 минут назад, Delpher-X сказал:

    как убрать множественные сообщения об ошибках

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

  2. 21 минут назад, Delpher-X сказал:

    Просто найти файлы нужного типа и скопировать их на другой диск

    Почему имя файла FileName не меняется для каждого файла из ListBox? Код из примера не реальный код? Где указание на другой "диск" (путь назначения)? Это все для Windows или Android?

  3. 1 час назад, Delpher-X сказал:

    С чем это связано и как от этого избавиться? 

    конечно он не будет работать... вы пытаетесь копировать файлы из списка ListBox1 в один и тот же файл FileName... копирование для первого файла проходит, но для следующей операции копирования вы получите ошибку "такой файл уже существует".. если вам нужно перезаписывать файл при каждой операции копирования используйте TFile.Copy(ListBox1.Items, FileName, True)

    что должен делать ваш код на самом деле? то, что я вижу, меня пугает...

  4. 1 час назад, Delpher-X сказал:

    Толку от этого манифеста, коль скоро нужно запрашивать доступ отдельно и через программный код. 

    если не будет в манифесте, не сможете запросить и программно... это нужно чтобы ОС Android знала какие разрешения может запросить программа... ей это нужно... а сами разрешения у ПОЛЬЗОВАТЕЛЯ! должны запрашиваться в момент когда они действительно  нужны, а не в момент первого запуска программы (как было раньше) ... тут все правильно.. потом разберетесь...

  5. 22 минут назад, Delpher-X сказал:

    почему-то подчеркнут красным. Пробовал ставить перед предыдущей строкой ставить точку с запятой, убирать, помещать в отдельный блок begin end; - все бесполезно. 

    закр. скобку поставьте ")"...  это анонимная функция... (см. картинку с кодом)

  6. 41 минут назад, Delpher-X сказал:

    Но почему же тогда все же разрешения для приложения никак не отображаются при установке? 

    такое поведение было у старых андроидов...  теперь необходимо запрашивать разрешение у пользователя прям тогда, когда программе это реально нужно...

    40 минут назад, Delpher-X сказал:

    В результате теперь там все полыхает красным подчеркиванием. 

    подключить модули в uses не забыли ? (см. картинку с кодом)

  7. 4 часа назад, Delpher-X сказал:

    Код который изображен на картинке - нерабочий

    объявите переменную WRITE_EXTERNAL_STORAGE обычным способом типа string. все остальные ошибки компиляции - следствие первой...

    9 часов назад, Delpher-X сказал:

    Кстати, если этот манифест нужно распространять вместе с приложением - то как?

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

    9 часов назад, Delpher-X сказал:

    Где можно почитать про нее?

    хотя бы здесь: http://www.proghouse.ru/programming/126-ioutils

  8. Изучите особенности программирования под Android, общее устройство этой ОС, структуру apk файлов (сначала будет трудно, но иначе ничего у вас не получится).

    Про манифест: https://developer.android.com/guide/topics/manifest/manifest-intro

    Отвечу на ваши вопросы, но сейчас толку будет мало:

    Файл-шаблон манифеста AndroidManifest.template.xml создается автоматически при создании проекта (копируется в папку проекта), окончательный файл манифеста формируется при сборке проекта, разрешения для работы с внешним хранилищем даны по-умолчанию (чтение+запись).

    1361862021_.thumb.png.268444edc464a12e01fbf2193aa515b6.png

    но перед работой с внешним хранилищем в программе необходимо явно запросить разрешение у пользователя (если пользователь уже дал разрешение, то диалога-запроса не будет, код выполнится сразу без запроса):

    1239924948_.png.300db18f2b767483d3f95e6ddf985da7.png

    System.IOUtils - кроссплатформенная библиотека для работы с файлами (папками и прочее)..  Пример вызова: TFile.WriteAllText().

    Советую изучить ее исходный код.

     

     

  9. Android

    Ниже код который компилируется без проблем во всех ОС и в версии 10.3.3 и в версии 10.4.1 (тут нет никакого подвоха, код непростой для понимания, но верный... )

    type
      TChain = class abstract
      end;
    
      TBaseChain<T: record> = class abstract (TChain)
      public type
        BlockType = T;
      end;
    
      TDataBlock<T> = record
      end;
    
      TDataChain<T: record> = class(TBaseChain<TDataBlock<T>>)
      end;
    
      TBlockMaster = record
      end;
    
      TMasterChain = class(TDataChain<TBlockMaster>)
      end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    var A: TMasterChain.BlockType;
    begin
    
    end;
    

    Проблема возникает если объявление типов перенести в отдельный модуль.

    1242354909_.png.c2bab8d55468b30f89f776cb656283b0.png

    Решение в данном случае зависит от дальнейшего способа использования переменной A. Расписывать дальше не буду, т.к мало кто создает свои обобщенные типы, а с использованием встроенных типов (TArray<T>, TList<T> и прочее) я проблем не заметил.

  10. 6 часов назад, krapotkin сказал:

    утечек не нашел

    хорошо... если вам комфортнее работать со своим кодом, то попробуйте сделать так:

    1739338164_.png.8664746702796d097def3cb650d8f709.png

    будет утечка? я привел пример кода который вызывает проблемы, конечно, его можно переписать иначе и проблема исчезнет.. но с точки зрения языка проблем в коде нет... Response:=nil (уменьшение количества ссылок на интерфейс) это костыль который решает проблему (его быть не должно, и в версии 10.3.3 он не нужен - там все хорошо) при else этот костыль не нужен.... (только не говорите "зачем объявлять переменные в теле процедуры?" - это допустимо в языке...  почему надо делать именно так - это отдельная тема)

  11. Переход с Delphi 10.3.3 на версию 10.4.1 вызвало проблемы во всех ОС без исключения.

    Начну с простых случаев:

    Linux (Ubuntu)

    При компиляции вылезла ошибка: ld-linux.exe: error: cannot find -lgcc_s

    Помогла установка (с последующим обновлением SDK) на ubuntu: sudo apt install gcc

    При компиляции вылезла ошибка: ld-linux.exe: error: cannot find -lz

    Помогла установка (с последующим обновлением SDK) на ubuntu: sudo apt install zlib1g-dev

    iOS

    Приложение при запуске стало занимать 2/3 экрана по высоте (в новом приложении хелловорд все было хорошо).

    Для решения проблемы надо добавить следующую строку в "старый"  файл info.plist.TemplateiOS.xml

    1359285540_.png.128475a18daa1cb13e14c4c248a41554.png

    Windows

    В приведенном ниже коде перестал освобождаться интерфейс Response. При выходе программа сообщала о не освобожденных объектах (ReportMemoryLeaksOnShutdown:=True)

    1251593442_.png.88451281d2c8729b49462b5019969296.png

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

    603888666_.png.63a55237ba8eb2d4db72fa16f577d5b6.png

    macOS

    При деплое вылезло следующее:

    [PAClient Error] Error: E0264 Unable to execute '"/usr/bin/codesign" --entitlements "/Users/macbookpro/PAServer/...../Contents/xxxx.entitlements" -s "-" -f "/Users/macbookpro/PAServer/scratch-dir/xxxx.app"' (Error 1)
    [PAClient Error] Error: E0264 Failed to parse entitlements: AMFIUnserializeXML: duplicate dictionary key near line 19

    Не знаю почему и как, но помогло убрать галочку здесь:

    80631873_.png.93be4e05bed623651022c38b991ae2ac.png

    Android

    Самые большие проблемы. В двух словах: ошибка при компиляции F2084 Internal Error: URW1237 или G14486 при использовании обобщенных классов (тот же код для других OC компилируется без проблем).

    Позже покажу пример кода и как получилось уговорить компилятор.

     

     

  12. 39 минут назад, Tumaso сказал:

    так поставь виртуалку с Big Sur, необязательно же сразу на реальном железе тестить.

    на windows будет работать? (хотел сделать вторую загрузочную систему на маке, но места не хватает...)

  13. 30 минут назад, dnekrasov сказал:

    Лично я столкнулся с двумя проблемами - Отображение иконки в трее (MenuBar) и отображение уведомлений. Может что-то ещё есть, пока не знаю

    главное запускается - уже здорово..  приложение собранное на delphi 10.3.3 просто не запускается у пользователей на Big Sur... или расположение библиотек изменили или что... непонятно...

  14. вы не верите на слово, и это очень ценное качество для программиста... поэтому все надо уметь проверять... попробуйте положить в ваш список объекты такого типа (см. картинку)... и увидите когда разрушаются ваши объекты... (такое переопределение деструктора полезно когда возникают подобные вопросы)

    1942212660_.png.4be5264e0a64e78ac811541042a18792.png

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