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

krapotkin

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

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

  • Посещение

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

    209

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

  1. сам шрифт, который включает те или иные начертания и "жирность" причем каждое в отдельном файле идет обычно, и свойства одного, выбранного в font-family это не совсем одно и то же

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

  2. все как обычно, данные дайте посмотреть

    и о каких последних строчках идет речь? 

    по идее в первом примере должно быть 

    JSON := TJSONObject.ParseJSONValue(JSONText) as TJSONObject;
    JSONArray := JSON.Get('c').JsonValue as TJSONArray;

    а во втором

    JSON:= SO(JSONText);

    и все

  3. 20 часов назад, Aleks133 сказал:

    создаю все компоненты динамически

    нет. динамически создавать надо только сам dm. он создаст свои компоненты настолько же динамически как и вы )

    20 часов назад, Aleks133 сказал:

    использовать TObjectList

    подойдет. НО. использовать его надо через синхронизацию. Создать cs:TCriticalSection. Каждый поток перед доступом к списку делает cs.enter, забирает оттуда dm, делает cs.leave. Т.е. в один момент времени только один поток может работать со списком

    Эта же функциональность просто встроена в TThreadList. Чем пользоваться - по сути все равно

  4. Dm самый обычный только создавать его автоматически не нужно как и все формы приложения кроме главной. 

    Про массив все верно. Только вместо него лучше взять tthreadlist. 

    Можно сделать так. Поток стартует, смотрит, нет ли уже готового дм, если есть, забирает его из списка, если нет, создаёт. По окончании работы кладёт дм в список.

  5. Хорошей практикой является следующая концепция.

    Есть модель данных (МД) - набор классов, описывающий все, что происходит в вашей программе, и хранящий все нужные данные. 

    А есть отдельный модуль, который отвечает за загрузку и сохранение этой МД. В нем класс-"загрузчик". Чтобы вам было удобнее, можно в качестве такого модуля сделать Datamodule, в котором будут все нужные все компоненты и методы.

    При этом становится не суть важно, откуда идет загрузка, хоть из интернета, хоть из БД.

    Вопросов с выделением этих процессов в отдельные потоки не будет, только нужно помнить только одно - один поток - один Datamodule. Т.е. создавать их надо динамически.

    создали объект модели данных, создали datamodule, вызвали некий метод для загрузки данных в объект. 

    Хорошим тоном будет не создавать/уничтожать Datamodule каждый раз заново, потому что процесс подключения к БД довольно длительный по сравнению с простым запросом в БД. Поэтому можно создать какой-то пул(массив, список) уже созданных DM  и брать одну штуку из него для совершения операции, и возвращать обратно по ее окончанию.

    Получается, что каждый поток будет иметь свой Datamodule и следовательно свой FDConnection и свой FDQuery для каждой операции.

    Надеюсь, я ответил на ваш вопрос

  6. а куда мне тыкать-то?? вы кода не даете, fmx не показываете

    в том обрывке что показали тыкать некуда

    Откройте свой fmx и смотрите

    object AAA: TLayout

    ...

       object BBB: TLabel

      ...

      end

    end

    если ААА нету, а в TForm он указан, то надо его вписать руками во внешнем редакторе 

    после этого закрыть и открыть файл в IDE

  7. у нас налицо битый .DFM в смысле .FMX

    исправить его можно руками, приписав недостающее

    кроме того в папке _history хранится несколько десятков предыдущих версий всех файлов проекта, можно смотреть там

  8. очень коротко глянул проект и faq по 7z

    архив открывается, только файлы там видны не все.

    сам 7z работает через 7z.dll и ISO открывает хорошо, следовательно проблема в устаревшей библиотеке

    How can I add support for 7z archives to my application?

    One way is to use the 7z.dll or 7za.dll (available from sf.net for download). The 7za.dll works via COM interfaces. It, however, doesn't use standard COM interfaces for creating objects. You can find a small example in "CPP\7zip\UI\Client7z" folder in the source code. A full example is 7-Zip itself, since 7-Zip works via this dll also. There are other applications that use 7za.dll such as WinRAR, PowerArchiver and others.

    The other way is to call the command line version: 7za.exe.

    мораль - смотреть, как сделано в указанном примере

    но если надо по-быстрому и чтоб точно работало я бы просто взял и использовал запуск 7z.exe с перенаправлением вывода в мою программу

  9. Ну в целом это общий момент. Класс это чертежи автомобиля, а объект это сам автомобиль, сделанный по этому чертежу. Понятно, что если вы делаете всегда только одну машину, вы можете к ней обращаться прямо из чертежа. Но вы же понимаете, что это неверно? 

  10. Если вы удаляете объект в обработчике этого объекта, будьте готовы, что при выходе из обработчика программа вполне может обратиться к уже несуществующему объекту

    Естественно, вы получите AV

    Лучший выход IMHO 

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TThread.ForceQueue(nil, 
        procedure begin
          ???.Free;
        end);
    end;

    обращаю внимание, что никакого FreeAndNil(Form1) не предполагается.

    потому что по-прежнему, что в D1, что в D10 обращаться из класса к экземпляру этого класса, это моветон и ошибка архитектуры

    Нужно придумывать что-то еще. поэтому и ??? поставил

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

    но если прямо просто побыстрогнокодить то конечно FreeAndNil(Form1) работать будет. Без ошибок.

  11. Лучше всего по-мне, не устанавливать Android SDK/NDK вместе с каждой версией делфи, да еще в такие длинные пути, а потом поставить Android Studio и настроить в несколько кликов все что нужно.

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