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

x11

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

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

  • Посещение

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

    13

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

  1. 11 минут назад, Равиль Зарипов (ZuBy) сказал:

    а что на других платформах также?

     

    При чем здесь так же или не так же?

    Я о том, что на данный момент нет такого лаконичного решения, как старый InputBox/InputQuery. Гарантированно рабочего в мульти-платформенном приложении.

     

  2. 27 минут назад, Равиль Зарипов (ZuBy) сказал:

    это решение для Windows

     

    ок, спасибо, посмотрю

    ну т.е. получается, что одного простого универсального нет?

    нужно отдельно для каждой платформы пились, судя по тому, что Вы написали "для Windows"?

  3. В 20.03.2017 в 18:57, x11 сказал:

    CustomFormat

    надо будет поэкспериментировать

    https://community.embarcadero.com/blogs/entry/perform-low-code-calculations-using-livebindings-in-delphi-firemonkey-on-android-and-ios

     

     

    IfThen(Self.Owner.FieldEdit1.AsString='', 0, Self.Owner.FieldEdit1.AsFloat)+
    IfThen(Self.Owner.FieldEdit2.AsString='', 0, Self.Owner.FieldEdit2.AsFloat)+
    IfThen(Self.Owner.FieldEdit3.AsString='', 0, Self.Owner.FieldEdit3.AsFloat)

     

  4. Всё равно нет реакции на Отмена или Закрыть.

    На OK есть реакция.

     

     

    procedure TfmReference.actEditExecute(Sender: TObject);
    Var
      val: array of string;
      sTableName, cap: string;
      id: integer;
    begin
      SetLength(val, 1);
      val[0] := ListView1.Items[ListView1.Selected.Index].Objects.FindObjectT<TListItemText>('name').Text;
      id := StrToIntDef(ListView1.Items[ListView1.Selected.Index].Objects.FindObjectT<TListItemText>('id').Text, -1);
    
      cap := comboRefType.Items[comboRefType.ItemIndex];
      sTableName := GetTableName;
    
      TDialogServiceAsync.InputQuery(cap, ['Изменить: '], Val,
          procedure(const AResult: TModalResult; const AValues: array of string)
            begin
              case AResult of
                mrOk:
                  begin
                    if not AValues[0].IsEmpty then
                      begin
                        sqlInsert.sql.Text := Format('update %s set name = ' + QuotedStr(val[0]) + 'where id = ' + IntToStr(ID), [sTableName]);
                        sqlInsert.Execute;
                      end;
                  end;
                mrCancel:
                  begin
                    Exit;  // тут выполняем действия по кнопке Отмена
                  end;
              end;
            end
          );
    
    
    
    //  if TPlatformServices.Current.SupportsPlatformService(IFMXDialogServiceSync, IInterface(SyncService)) then
    //    if SyncService.InputQuerySync(cap, ['Изменить: '], val) then
    //    begin
    //      sqlInsert.sql.Text := Format('update %s set name = ' + QuotedStr(val[0]) + 'where id = ' + IntToStr(ID), [sTableName]);
    //      sqlInsert.Execute;
    //    end;
    
    end;

     

    Ставлю бряку на case или на Exit; и нажимаю Отмена - ничего не происходит.

    Перепроверил, Debug включен.

  5. Процедура редактирования одной записи в базе выглядит так:

    uses uDM, CRAccess, DASQLGenerator, FMX.Platform, FMX.DialogService, FMX.Utils;
    
    ...
    ...
    
    procedure TfmReference.actEditExecute(Sender: TObject);
    Var
      val: array of string;
      sTableName, cap: string;
      SyncService : IFMXDialogServiceSync;
      id: integer;
    begin
      SetLength(val, 1);
      val[0] := ListView1.Items[ListView1.Selected.Index].Objects.FindObjectT<TListItemText>('name').Text;
      id := StrToIntDef(ListView1.Items[ListView1.Selected.Index].Objects.FindObjectT<TListItemText>('id').Text, -1);
    
      cap := comboRefType.Items[comboRefType.ItemIndex];
      sTableName := GetTableName;
    
    
      if TPlatformServices.Current.SupportsPlatformService(IFMXDialogServiceSync, IInterface(SyncService)) then
        if SyncService.InputQuerySync(cap, ['Изменить: '], val) then
        begin
          sqlInsert.sql.Text := Format('update %s set name = ' + QuotedStr(val[0]) + 'where id = ' + IntToStr(ID), [sTableName]);
          sqlInsert.Execute;
        end;
    
    end;

    Т.е. на форме ListView в режиме DynamicAppearance.

    Щёлкаем по строке, нажимает кнопку редактировать (actEditExecute).

    на Windows появляется окно ввода, но нет реакции на кнопку Отмена или Закрыть. При вводе значения и нажатии на OK, запись меняется.

     

    На Android 5 вообще не появляется диалоговое окно. Но actEditExecute выполняется. Например, если не выбрать строку списка и нажать Изменить, то появляется AV.

    Я так понимаю, что на Android SupportsPlatformService возвращает False.

    Тогда как реализовать InputBox или InputQuery на всех платформах или хотя бы на Windows и Android? Свое окно создавать и самому воспроизводить функционал InputBox или InputQuery?

     

  6. 1 час назад, Равиль Зарипов (ZuBy) сказал:

    создать еще один текстовый элемент со статичным текстом Цена: рядом с ним выставить текстовый элемент со значением

     

    а, ну так я пытался, просто об этом не написал

    просто где здесь свойство Text или Caption?

    55e7cf11a88a4d3fa6069fcd0459cb1c.png

  7. В Delphi 10.1 улучшили TListVew.

    Теперь в один Item типа DynamicAppearance можно вставить несколько объектов TTextObjectAppearance и связать это с DataSet через LiveBinding.

    Небольшой пример мне удалось сделать (Multi-Device). Запустить на смартфоне (Android).

    Хотел пойти дальше, но появились вопросы, ответы на которые не смог найти.

    Задача: организовать что-то вроде ленты, где будут отображаться некие данные одного объекта/объявления: id, наименование, картинка, checkbox, цена1, цена2 и ещё что-то. Как в твиттере, или как в приложении для отображения объявлений.

    Данные живут в sqlite и загружаются в TUniQuery.

    С помощью LiveBinding получилось отобразить в TTextObjectAppearance значение из поля. А вот не нашёл, как в TTextObjectAppearance записать свой произвольный текст, например, слово "Цена", чтобы было "Цена 125000" или "Тел: 456-789".

     

    Далее. Если в таблице 10000 записей, то они все загрузятся в TListVew или будут подгружаться автоматически в зависимости от TUniQuery.FetchRows?

    Может уже есть из коробки такой готовый пример?

     

    а ещё здесь нет item.footer.text (см. прикреплённую картинку)

     

    48b590c18bd845db9b230e7abed2b87b.png

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