-
Постов
828 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Весь контент x11
-
Кто виноват и что делать? Часть верхушки обрезается. Изменение разрешения не помогает. На смартфоне все норм.
-
на кнопку Закрыть реакции нет
-
Да, это костыль, т.к. у FMX до сих пор нет работающего Inputbox для мульти-платформенного приложения.
-
При чем здесь так же или не так же? Я о том, что на данный момент нет такого лаконичного решения, как старый InputBox/InputQuery. Гарантированно рабочего в мульти-платформенном приложении.
-
Я не знаю, что это
-
ок, спасибо, посмотрю ну т.е. получается, что одного простого универсального нет? нужно отдельно для каждой платформы пились, судя по тому, что Вы написали "для Windows"?
-
надо будет поэкспериментировать 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)
-
Да, винда и 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]"
-
всё равно туплю и как мне в коде добраться то text и в какой момент? в каком-то событии?
-
а, ну так я пытался, просто об этом не написал просто где здесь свойство Text или Caption?
-
не совсем понял
-
В 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 (см. прикреплённую картинку)