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

Kikoma

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

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

  • Посещение

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

    2

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

  1. Система новая, источников на родном русском немного, да и на буржуйском тоже дефицит. Этот ресурс очень помогает в изучении и освоении FM. Хоть я сам лично и за монетизацию сайтов (в общем случае), но думаю данный сайт из другого поля, и задачи, стоящие перед ним, совсем другие. А вот пожертвование можно внедрить :). Любой труд должен быть оплачен (и мотивирован)

     

    А вот качественный курс по ФМ я бы прошел, даже за деньги, т.к. уверен, что сэкономил бы по времени на порядок больше. Но с другой стороны система так бурно развивается-обновляется, что многие вещи быстро теряют актуальность - так что качественный курс по ФМ сделать довольно сложно.

  2. Спасибо. Все прекрасно заработало, но только с обязательной перезаполнением ListBox

     

    вот итоговый код:

        if (count = 0) and (TabControl1.ActiveTab = TabCart) then
          TThread.Queue(TThread.CurrentThread,
            procedure
            begin
              // Запускаем анимацию
              TListBoxItem(Item).AnimateFloat('Height', 0, 0.5);
              TListBoxItem(Item).AnimateFloatWait('Opacity', 0, 0.5);
              Item.Release;
              TabCartClick(Sender);  // запуск перерисовки ListBox
              // Timer1.Enabled := True; // запуск TabCartClick(Sender); через 0,3 сек
            end);
    

    В моем случае перезаполнение TListBox обязательно, т.к. в SpinBox.Tag хранятся индексы Итемов.

  3. Как получилось у меня:

    1.То что вы открыли в Блокноте я полностью скопировал этот

    object TLayout
        StyleName = 'donetoolbutton'

      ...

    end

     

    Сохранил его в отдельный файл, при этом поменял StyleName = 'mydonetoolbutton'

    2. На форму бросил StyleBook1, щелкнул на нем два раза попал в редактор. По кнопке Load... выбрал выше созданный файл и его немного подредактировал: добавил Rectangle (Fill.Kind := None; Stroke (рамка) уже есть)

     

    ss2.png

     

    Немного повозился с размерами и выравниванием. После кнопка Apply and Close

    3. Бросаю две SpeedButton, у одного набираю в StyleLookUp = mydonetoolbutton, у другого из списка выбираю StyleLookUp = donetoolbutton.

     

    ss3.png

     

    Результат достигнут. На непоколебимость данного варианта не претендую, хотелось бы узнать мнение гуру.

  4. Странно, но AnsiToUtf8, UTF8Encode, UTF8Decode, UTF8ToString  - не влияют на результат в различном использовании и перед отправкой и после получения. Все их удалил.

     

    Изменил строку формирование параметра:

    RESTRequest1.Params.AddItem(edParam.Text, edValue.Text,TRESTRequestParameterKind.pkGETorPOST,[poDoNotEncode]);
    

    Добавил в код сервера кириллицу. Результат получился следующий

    <?php 
    header("Content-Type: text/html; charset=utf-8");
    echo "Проверка русского языка\n";
    echo "Your GET request:\n";
    var_dump($_GET);
    ?>

    в результате вместо русских букв знаки вопроса:

    Проверка русского языка
    Your GET request: <br/>
    array(1) {
      ["qqDF"]=>
      string(19) "balalaika-?????????"
    }

    Делаю вывод, что принимает и отображает приложение в utf-8 нормально. А вот проблема возникает при отправки запроса

  5. Здравствуйте, помогите настроить кодировки.

     

    Ниже дано тестовое приложение, которое отправляет с помощью RESTClient запрос и получает в виде текста то что отправил.

    Все работает замечательно, кроме русских букв.

     

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

    например вместо "Балалайка" выводится "A1C0CBC0CBC0C9CAC0"

    ss.png

    Help отсутствует, устал быть слепым экспериментирующим котенком :(

     

    можно результат работы сервера увидеть здесь: http://abws.ru/testrest/?qqq=balalaika-Балалайка

     

    Исходники приложения (Delphi XE6 update 2) здесь.

     

    код сервера:

    <?php
    header("Content-Type: text/html; charset=utf-8");
    echo "Your GET request: <br/>\n";
    var_dump($_GET);
    ?>
    
  6. Я вызываю процедуру заполнения ListBox? т.к. там идет проверка или заполняем TListBoxItem-ами, или выводим один один Итем - Корзина пуста. Если не вызывать процедуру заполнения, то придется выполнять проверку -  а все ли итемы показываются и выводим итем "Корзина пуста". - Как то сложно и неправильно.

     

    В Queen все равно выходит ошибка.

     

    Выполняется анимация на закрытие Итема, и когда уже не находимся в процедуре под Итемом, выполняется Таймер и заново заполняется TListBox.

     

    Все отлично работает через таймер. Плохо что ли?

  7. Спасибо, AlexG

     

    Opacity - работает.

    Height - не работает. Не уверен, но думаю из-за стилизации (попозже попробую на не стилизованном TlistBoxItem, результат опишу)

     

    При удалении вызывается ошибка. Подробности Как правильно программно удалить TListBoxItem из стилевого объекта?

  8.   ... 
       if count = 0 then
        begin
          TThread.Queue(TThread.CurrentThread,
            procedure
            begin
              Item.Visible := False;
              Timer1.Enabled := True; // через 0,5 секунды перезагружаю TListBox
            end);
    
          // TabCartClick(Sender);
        end;
      end;
    

    Все работает отлично. Большое спасибо.

     

    Продолжение вопроса о красивом закрытии элемента (добавлении анимации) здесь

  9. К программно созданному кастомизированному TListBoxItem при удалении (здесь обсуждается как удаляем) хочу добавить Анимацию:

    Сначала Opacity с 1 до 0, потом Height с текущего значения до 0.

     

    Через дизайн форму и инспектор объектов проблем нет, а программно? Ведь эти TListBoxItem-ы тоже программно создаются.

     

     

  10. Следующая ситуация:

     

    Есть база данных с полями: id, product_name, price, cart (корзина) - Думаю пояснять излишне.

     

    по условию cart>0 формируется запрос и заполняется TListBox кастомизированным Item-ом который содержит SpinBox. при изменении SpinBox вызывается процедура, которая вносит изменение в БД (cart) и высчитывает сумму в этом Item.

     

    Все работает, все хорошо, но...

    Задумал я что при SpinBox = 0, у меня этот TListBoxItem исчезал, для этого на изменение SpinBox если он равен 0, я запускаю процедуру формирования (Заполнения) этого TListBox заново.

     

    Вываливается ошибка Access ..to address XXX, при чем при пошаговой трассировки исключение вызывает FMX.Edit строка 3811 CustomEditBox.Change; в procedure TValueRangeCustomEditBox.DoAfterChange; (DELPHI XE6)

     

    т.е. моя процедура полностью отрабатывается (Заполняется новый список Item-ов) и возникает эта ошибка.

     

    При чем на 32-bit Windows все работает нормально, только на андроиде возникает это исключение, при чем приложение продолжает нормально функционировать.

     

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

     

    Это баг или я неправильно алгоритм построил?

     

     

  11. Мда....

    1. Без сервера никак. Любое приложение с сервером общается, даже с другим телефоном через статичный в  интернете сервер.

    2. Свой протокол :)

    3. DataSnap тебе в помощь, как вариант

    4. Почитай про BaaS, тоже вариант

    5. Также почитай про REST, JSON. можно и xml

    6. Пример взаимодействия мобильного приложения на базе ВК по протоколу mtproto (Разработан братом Дурова-основателя ВК). Так для общего представления можно почитать.

     

    Ну вот то что надо знать, для поиска пути решения твоего вопроса.

  12. Здравствуйте, многоуважемые!

     

    Выполнил настройку получения удаленных сообщений по Mobile_Tutorials_en.pdf через сервис Kinvey. Все работает отлично. Но когда выключено приложение, и приходит remote push сообщение то все проходит в тишине, хотя сообщение появляется. Как звук то включить? В TNotificationCenter это можно сделать, а в remote push?

    • StyleBook - Я бы создал дополнительное приложение для добавления картинок в StyleBook программно, и потом сохранил в файл (метод StyleBook.WriteResourses). Сам не пользовался, но копал бы в этом направлении
    • Хранить в ресурсах - Если воспользоваться вариантом Сысоева Максима из этой темы, то опять таки быстрее было бы написать программку для создания файла ресурса resource.rc из картинок в определенной папке. Да и в будущем такая программка обязательно понадобится.
    • Задеплоить - Добавить большое кол-во файлов и назначить им путь - не проблема, В дальнейшем работать с этим списком файлов не удобно. Я бы предложил разработчикам еще и фильтр туда вставить, было бы удобнее. Ну а пока только сортировкой по колонке пользуюсь, и то она после каждого действия слетает. (Кстати куда про найденные баги писать то можно? А то я их на листочек себе записываю)
    • zip архив - аналог предыдущему пункту "задеплоить". APK - сам по себе zip архив, так что в итоге удобство сведется к не работать с большим списком в деплой менеджере, но дополнительной операции распаковки на устройстве (ведь при установке пользователь терпимо ждет и не спорит с иногда "долгим" процессом установки, а вот в процессе работы с приложением... ему это уже не нравится

    Чтобы принять окончательное решение, надо учесть будут ли добавляться картинки программно или только с обновлением apk? Как будут использоваться картинки в приложении и как лучше организовать к ним доступ для наилучшего быстродействия? Ну а самое главное программа создается для пользователя, поэтому чтобы пользователь был доволен (в контексте данной темы самый главный показатель для пользователя быстродействие работы программы)

  13.  

    Тоже коснулся этого вопроса.

    У меня картинок 164 штуки (может стать больше. размер примерно 128х128) и я вижу четыре варианта хранения:

    1. StyleBook (минусы: неудобно добавлять по одной штуке, каждой картинке нужно присвоить имя)
    2. Хранить в ресурсах (плюсы: можно добавить сразу все картинки. Минусы: нужно задать каждой картинке имя)
    3. Задеплоить (главный минус: прописывать настройки (путь и т.п.) для каждого файла)
    4. Хранить все картинке в zip-архиве (плюсы: один файл, извлечь архив можно в любой момент) Это пока экспериментальный вариант, к нему я склоняюсь больше всего. 

     

    1.  А если программно в StyleBook из папки, а потом сохранить стиль?

    2. А если станет больше картинок в ресурс можно их программно добавить? как?

    3. Я для себя имя файла хроню в БД а картинки деплою assets\internal\img\ - (Надеюсь в будущем можно будет потом программно сюда добавить/закачать, а в БД запись добавлю)

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

    4. А смысл? Если хранить картинки jpeg то объем архива не изменится. а ресурсы на распаковку архива дополнительно будут тратиться. Если только имеешь ввиду, что задеплоить архив, а уже на месте его распаковать? - смысл? см. п.3

  14. Продолжая развивать идею, взятой из темы Есть ли в fmx класс TImageList, возник вопрос, а можно в StyleBook програмно добавлять объекты? В моем случае Интересует добавления изображений (максимум 250х250) для последующего отображения в кастомизированом  TListBoxItem.

     

    Правильно ли я считаю, что т.к. загрузка изображения довольно трудоемкая операция, то желательно загрузить все изображения в память (Их всего 60 штук ~1,5Мб), для чего и лучше всего использовать StyleBook.

     

    Или лучше подгружать картинки из файла в отдельном потоке (или без потока - сейчас попробую, отпишусь)?

     

    Попробовал на лету подгружать картинку из файла - тормозов на Galaxy Note 2 не наблюдаются.

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