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

dmitry

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

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

  • Посещение

Посетители профиля

1 245 просмотров профиля

Достижения dmitry

  1. К сожалению, в этой редакции нельзя создавать ServiceApplication
  2. У меня планшет Samsung Galaxy T285. Такой проблемы не обнаруживается в Берлине. Создал обычный Android проект. Положил TEdit. Задал ему некий тест. Запускаю на устройстве. Перехожу за последний символ, нажимаю BackSpace и стирается только последний символ, а не весь текст
  3. В продолжении, и на платформе windows возникают артефакты. HyperZen, обсуждение читал, Спасибо. Не могли бы Вы приложить Ваш код, который работает 100% на всех платформах. Я использую следующий код для подсчета высоты: function TForm1.CalculateListItemObjectHeight( const ATextObject: TListItemText): Single; Var Layout: TTextLayout; begin Layout := TTextLayoutManager.DefaultTextLayout.Create; TRY Layout.BeginUpdate; TRY Layout.Text := ATextObject.Text; Layout.MaxSize := TPointF.Create(ATextObject.Width, TTextLayout.MaxLayoutSize.Y); Layout.Font.Assign(ATextObject.Font); Layout.WordWrap := ATextObject.WordWrap; Layout.Trimming := ATextObject.Trimming; Layout.HorizontalAlign := ATextObject.TextAlign; Layout.VerticalAlign := ATextObject.TextVertAlign; FINALLY Layout.EndUpdate; END; Result := Layout.Height; FINALLY Layout.Free; END; end; procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); Var iTaskName: TListItemText; iStatus: TListItemText; iTaskNameHeight: Single; iStatusHeight: Single; iItemHeight: Single; begin iTaskName := AItem.Objects.FindDrawable('TaskName') As TListItemText; If iTaskName <> Nil Then Begin iTaskName.Width := ListView1.Width; iTaskName.Font.Size := ListView1.ItemAppearanceObjects.ItemObjects.Text.Font.Size; End; iStatus := AItem.Objects.FindDrawable('Status') As TListItemText; If iStatus <> Nil Then Begin iStatus.Width := ListView1.Width; iStatus.Font.Size := ListView1.ItemAppearanceObjects.ItemObjects.Text.Font.Size; If iStatus.Text = 'NORMAL' Then iStatus.TextColor := TAlphaColorrec.Blue; End; iTaskNameHeight := CalculateListItemObjectHeight(iTaskName); iStatusHeight := CalculateListItemObjectHeight(iStatus); iTaskName.Height := Round(iTaskNameHeight); iStatus.Height := Round(iStatusHeight); iStatus.PlaceOffset.Y := iTaskName.Height + 2; iItemHeight := Round(iTaskNameHeight + iStatusHeight); AItem.Height := Round(iItemHeight) + 5; end;
  4. Добрый день. Никак не могу справиться с одной проблемой при работе с компонентом ListView. Использую Delphi XE10.1 - Berlin. В тестовом проекте создал два вида: Windows, Android 10 Tabled. На главную форму положил компонент ListView и две кнопки для заполнения ListView и очистки. Способ отображения Items - Динамический и состоит из двух текстовых элементов (TaskName и Status). В TaskName может содержаться очень большой текст, поэтому я самостоятельно рассчитываю высоту Item, с помощью кода приведенного на данном форуме. Все замечательно работает на Windows платформе, а вот под Android при создании Item появляются артефакты, текст как бы обрезается, но стоит повернуть ориентацию планшета, так сразу артефакты пропадают. Помогите избавиться от артефактов. Свой тестовый проект прилагаю. TestProject.rar
  5. dmitry

    Поиск утечек памяти

    Добрый день. Поделитесь информацией, кто как отлавливает утечки памяти в приложении для Android? ReportMemoryLeaksOnShutDown, при выходе из приложения не показывает утечек.
  6. krapotkin, Если возможно, не могли бы Вы описать подробнее как установить SDK и NDK (ccылки), и какие пути нужно дописать в студии?
  7. dmitry

    Работа с ListView

    Zuby и Krapotkin Спасибо Вам за помощь. Zuby, сделал как Вы и описывали procedure TForm1.Button1Click(Sender: TObject); Var Item: TListViewItem; begin //Первый item Item := ListView1.Items.Add; Item.Bitmap.Assign(Image1.Bitmap); Item.Objects.TextObject.Text := 'Task 1'; Item.Objects.DetailObject.Text := '3'; //Item.Data[sdStatusSignal] := 'SIGNAL'; Item.Data['STATUS'] := 'SIGNAL'; //второй item Item := ListView1.Items.Add; Item.Bitmap.Assign(Image1.Bitmap); Item.Objects.TextObject.Text := 'Task 2'; Item.Objects.DetailObject.Text := '0'; //Item.Data[sdStatusNormal] := 'NORMAL'; Item.Data['STATUS'] := 'NORMAL'; ListView1.Resize; end; procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); Var //StatusSignal: TListItemText; //StatusNormal: TListItemText; TextObject: TListItemText; begin TextObject := AItem.Objects.FindDrawable('STATUS') As TListItemText; If TextObject = Nil Then Begin TextObject := TListItemText.Create(AItem); TextObject.Name := 'STATUS'; End; If TextObject.Text = 'SIGNAL' Then TextObject.TextColor := TAlphaColorRec.Red Else TextObject.TextColor := TAlphaColorRec.Black; Только в последнем обработчике когда идет сравнение TextObject.Text = 'SIGNAL', свойство Text равно пустому значению всегда.
  8. dmitry

    Работа с ListView

    Тогда я просто не понимаю, для чего нужно событие UpdateObjects. Сейчас сделал эксперимент, как предложил Уважаемый Krapotkin. Стиль для Item = ImageListItemBottomDetailRightButton. Отдельно создал константы: Const sdStatusSignal = 'sdStatusSignal'; sdStatusNormal = 'sdStatusNormal'; Заполняю Items по кнопке: procedure TForm1.Button1Click(Sender: TObject); Var Item: TListViewItem; begin //Первый item Item := ListView1.Items.Add; Item.Bitmap.Assign(Image1.Bitmap); Item.Objects.TextObject.Text := 'Task 1'; Item.Objects.DetailObject.Text := '3'; Item.Data[sdStatusSignal] := 'SIGNAL'; //второй item Item := ListView1.Items.Add; Item.Bitmap.Assign(Image1.Bitmap); Item.Objects.TextObject.Text := 'Task 2'; Item.Objects.DetailObject.Text := '0'; Item.Data[sdStatusNormal] := 'NORMAL'; end; И сам обработчик UpdateObjects, в котором рисую новый объект: procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); Var StatusSignal: TListItemText; StatusNormal: TListItemText; begin StatusSignal := AItem.Objects.FindDrawable(sdStatusSignal) As TListItemText; If StatusSignal = Nil Then Begin StatusSignal := TListItemText.Create(AItem); StatusSignal.Name := sdStatusSignal; StatusSignal.Width := 50; StatusSignal.Height := 20; StatusSignal.PlaceOffset.Point := TPointF.Create(70, 0); StatusSignal.TextColor := TAlphaColorRec.Red; End; StatusNormal := AItem.Objects.FindDrawable(sdStatusNormal) As TListItemText; If StatusNormal = Nil Then Begin StatusNormal := TListItemText.Create(AItem); StatusNormal.Name := sdStatusNormal; StatusNormal.Width := 50; StatusNormal.Height := 20; StatusNormal.PlaceOffset.Point := TPointF.Create(70, 0); StatusNormal.TextColor := TAlphaColorRec.Black; End; end; Только совсем не понимаю как этот обработчик работает. StatusSingal и StatusNormal всегда будут для Item = Nil, что приведет к созданию новых TListItemText. Очень интересный момент получается при выводе, показывает все правильно (в приложении к ответу). При создании первого Item я должен создать только sdStatusSingal, но в отладчике видно что также создается и sdStatusNormal хотя и не отображается. Может мне кто-нибудь этот момент объяснить? P.S. С ListView только пробую работать, есть пока что некое непонимае.
  9. dmitry

    Работа с ListView

    Конечно, можно и сразу цвет текста присваивать. Но задача мной описана очень кратко. В реальной задаче, в одном Item будет находится более одного TListItemText и отрисовываться они будут по разному.
  10. dmitry

    Работа с ListView

    Добрый день. Использую Delphi DX 10 Update 1. Есть маленькая задача по использованию компонента ListView. Необходимо, если в Item содержится текст = 'Signal', то цвет у шрифта установить в красный, иначе в черный. Написал следующий код вставки данных в ListView: procedure TForm3.Button1Click(Sender: TObject); Var Item: TListViewItem; TextObject: TListItemText; begin Item := ListView1.Items.Add; Item.Text := '...'; TextObject := TListItemText.Create(Item); TextObject.Text := 'Signal'; TextObject.Height := 30; TextObject.PlaceOffset.Point := TPointF.Create(1, 0); TextObject.Name := 'STATUS'; TextObject.Font.Size := 20; Item := ListView1.Items.Add; Item.Text := '...'; TextObject := TListItemText.Create(Item); TextObject.Text := 'Normal'; TextObject.Height := 30; TextObject.PlaceOffset.Point := TPointF.Create(1, 0); TextObject.Name := 'STATUS'; TextObject.Font.Size := 20; end; В событии UpdateObjects компонента написал: procedure TForm3.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); Var TextObject: TListItemText; begin TextObject := AItem.Objects.FindDrawable('STATUS') As TListItemText; If TextObject <> Nil Then Begin If TextObject.Text = 'Signal' Then TextObject.TextColor := TAlphaColorRec.Red Else TextObject.TextColor := TAlphaColorRec.Black; End; end; В итоге Item, где есть Signal не устанавливается цвет текста в красный и более того TextObject = Nil. Помогите разобраться с проблемой. Тестовый проект прилагаю LVBag.rar
  11. Да, такой вариант тоже подойдет, но в этом варианте есть один минус. Я хотел чтоб Rectangle был прозрачным, а соответствующего свойства я не нашел
  12. Добрый вечер. Создаю Android приложение с использованием DX 10 Update 1. Имеем: Главную форму, с кнопкой Button1 Вторичную форму (TForm2) с кнопкой Button1 Необходимо при нажатии на кнопку Главной формы, вызвать в блокирующем режиме вторичную форму и при нажатии кнопки на вторичной форме, закрыть ее. Показ вторичной формы реализовал следующим образом: FormStyle вторичной формы = Popup procedure TForm1.Button1Click(Sender: TObject); Var PopupFrm: TForm2; begin PopupFrm := TForm2.Create(Self); PopupFrm.Height := 100; PopupFrm.Width := 100; PopupFrm.Position := TFormPosition.MainFormCenter; PopupFrm.Show; end; Закрытие вторичной формы реализовал следующим образом: procedure TForm2.Button1Click(Sender: TObject); begin Close; end; При смене фокуса из вторичной формы к главной форме, вторичная форма исчезает, а мне необходимо чтоб она не исчезала. Как быть? Может быть я что-то неправильно делаю?
  13. dmitry

    NotificationCenter

    Добрый вечер. Не ожидал я конечно такого отношения к клиентам от компании Embarcadero (IDERA). Предыстория по следующей ссылке: http://fire-monkey.ru/topic/1837-otklonenie-utechka-pamiati-v-komponente-tnotificationcenter/ Установили к среде DX10 первое обновление по подписке, надеясь что компания Embarcadero исправит этот баг в Update 1, но чуда не случилось, хотя на внутреннем трекере баг зафиксирован, по словам Ярослава Бровина. Теперь обращение к компании Embarcadero: Вы можете создать какой-нибудь дополнительный патч к среде, который исправит утечку памяти в компоненте или придется ждать выхода DX 11? В Вашей компании хоть чуть-чуть тестируют продукт перед продажей или клиенты для Вас являются постоянными бета-тестерами?
  14. Добрый день. В продолжение моей темы "Утечка памяти в компоненте TNotificationCenter" http://fire-monkey.ru/topic/1825-utechka-pamiati-v-komponente-tnotificationcenter/#entry9604, хотел бы узнать, каким образом можно оформить этот баг на сайт Embarcadero для его исправления?
×
×
  • Создать...