-
Постов
828 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Сообщения, опубликованные x11
-
-
на кнопку Закрыть реакции нет
-
В 23.03.2017 в 16:33, Равиль Зарипов (ZuBy) сказал:
Вы хоть поняли для чего этот файл нужен?
Да, это костыль, т.к. у FMX до сих пор нет работающего Inputbox для мульти-платформенного приложения.
-
11 минут назад, Равиль Зарипов (ZuBy) сказал:
а что на других платформах также?
При чем здесь так же или не так же?
Я о том, что на данный момент нет такого лаконичного решения, как старый InputBox/InputQuery. Гарантированно рабочего в мульти-платформенном приложении.
-
15 минут назад, krapotkin сказал:
возьмите уже MyDialogs
там все универсально
Я не знаю, что это
-
27 минут назад, Равиль Зарипов (ZuBy) сказал:
это решение для Windows
ок, спасибо, посмотрю
ну т.е. получается, что одного простого универсального нет?
нужно отдельно для каждой платформы пились, судя по тому, что Вы написали "для Windows"?
-
В 20.03.2017 в 18:57, x11 сказал:
CustomFormat
надо будет поэкспериментировать
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)
-
-
Да, винда
и ShowMessage() не помогает
т.е. я правильно понимаю, что на данный момент у Delphi мульти-платформенного приложения нет работающего InputBox?
-
я ставил туда
caption := '111';
и не помогло
-
Всё равно нет реакции на Отмена или Закрыть.
На 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 включен.
-
а среда не будет ругаться в этом случае, что InputQuery устарел
сейчас нет возможности проверить
-
Необязательно модальные, дело не в них, а в простом функционале InputBox.
Придется самому?
-
Процедура редактирования одной записи в базе выглядит так:
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?
-
К сожалению, в Delphi отсутствует справка Data.Bind.Components.TFormatExpressionItem.CustomFormat
Т.е. раздел есть, но там пустышка - ни описания, ни примеров.
-
-
Посмотрел это видео
сделал, как на картинке
но так, как на видео с использованием
"Цена " + owner.fieldbyname('имя_поля').text
не получилось
-
как-то так?
ListView1.Items[0].Objects.FindObjectT<TListItemText>('text5').Text := 'Цена';
только данные приходят из базы и на момент создания, например, окна, у меня нет "ListView1.Items[0]"
-
8 минут назад, krapotkin сказал:
они не published, просто public
всё равно туплю
и как мне в коде добраться то text и в какой момент? в каком-то событии?
-
-
21 минуту назад, Равиль Зарипов (ZuBy) сказал:
это нужно сделать в разных "контролах"
не совсем понял
-
В 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 (см. прикреплённую картинку)
Часть формы обрезается на Bluestaks 2
в Развертывание приложений
Опубликовано
Кто виноват и что делать?
Часть верхушки обрезается. Изменение разрешения не помогает.
На смартфоне все норм.