dmitry
-
Постов
22 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные dmitry
-
-
У меня планшет Samsung Galaxy T285. Такой проблемы не обнаруживается в Берлине.
Создал обычный Android проект. Положил TEdit. Задал ему некий тест. Запускаю на устройстве. Перехожу за последний символ, нажимаю BackSpace и стирается только последний символ, а не весь текст -
В продолжении,
и на платформе 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;
-
Добрый день.
Никак не могу справиться с одной проблемой при работе с компонентом ListView. Использую Delphi XE10.1 - Berlin.
В тестовом проекте создал два вида: Windows, Android 10 Tabled.
На главную форму положил компонент ListView и две кнопки для заполнения ListView и очистки.
Способ отображения Items - Динамический и состоит из двух текстовых элементов (TaskName и Status).
В TaskName может содержаться очень большой текст, поэтому я самостоятельно рассчитываю высоту Item, с помощью кода приведенного на данном форуме.
Все замечательно работает на Windows платформе, а вот под Android при создании Item появляются артефакты, текст как бы обрезается, но стоит повернуть ориентацию планшета, так сразу артефакты пропадают.
Помогите избавиться от артефактов. Свой тестовый проект прилагаю.
-
Добрый день.
Поделитесь информацией, кто как отлавливает утечки памяти в приложении для Android?
ReportMemoryLeaksOnShutDown, при выходе из приложения не показывает утечек.
-
krapotkin,
Если возможно, не могли бы Вы описать подробнее как установить SDK и NDK (ccылки), и какие пути нужно дописать в студии?
-
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 равно пустому значению всегда.
-
Тогда я просто не понимаю, для чего нужно событие 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 только пробую работать, есть пока что некое непонимае.
-
Конечно, можно и сразу цвет текста присваивать. Но задача мной описана очень кратко. В реальной задаче, в одном Item будет находится более одного TListItemText и отрисовываться они будут по разному.
-
Добрый день.
Использую 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.
Помогите разобраться с проблемой.
Тестовый проект прилагаю
-
это обязательно должна быть форма?
может Layout + Rectangle + Button подойдёт?
Да, такой вариант тоже подойдет, но в этом варианте есть один минус. Я хотел чтоб Rectangle был прозрачным, а соответствующего свойства я не нашел
-
Добрый вечер.
Создаю 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;
При смене фокуса из вторичной формы к главной форме, вторичная форма исчезает, а мне необходимо чтоб она не исчезала.
Как быть? Может быть я что-то неправильно делаю?
-
Добрый вечер.
Не ожидал я конечно такого отношения к клиентам от компании Embarcadero (IDERA).
Предыстория по следующей ссылке:
http://fire-monkey.ru/topic/1837-otklonenie-utechka-pamiati-v-komponente-tnotificationcenter/
Установили к среде DX10 первое обновление по подписке, надеясь что компания Embarcadero исправит этот баг в Update 1, но чуда не случилось, хотя на внутреннем трекере баг зафиксирован, по словам Ярослава Бровина.
Теперь обращение к компании Embarcadero:
- Вы можете создать какой-нибудь дополнительный патч к среде, который исправит утечку памяти в компоненте или придется ждать выхода DX 11?
- В Вашей компании хоть чуть-чуть тестируют продукт перед продажей или клиенты для Вас являются постоянными бета-тестерами?
-
-
Добрый день.
В продолжение моей темы "Утечка памяти в компоненте TNotificationCenter" http://fire-monkey.ru/topic/1825-utechka-pamiati-v-komponente-tnotificationcenter/#entry9604, хотел бы узнать, каким образом можно оформить этот баг на сайт Embarcadero для его исправления?
-
Такая же ситуация касается и проекта FMX.
-
Может кто-нибудь проверить, проявляется ли у Вас такая ситуация?
-
Код стандартный:
procedure TNotificationsForm.btnShowAnotherClick(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'Windows10Notification2'; MyNotification.Title := 'Windows 10 Notification #2'; MyNotification.AlertBody := 'RAD Studio 10 Seattle'; NotificationCenter1.PresentNotification(MyNotification); finally MyNotification.Free; end; end;
-
Дополню, проект VCL
-
Добрый день.
В версии Delphi 10 Seattle обнаружил утечку памяти в проекте NotificationsProject из стандартных примеров.
Воспроизводится она легко:
1) при создании формы, вставляем ReportMemoryLeaksOnShutDown := True;
2) Жмем на кнопку Show. Уведомление появляется в Windows 10.
3) Закрываем проект и видим что есть не уничтоженные объекты TNotification;
Ярослав, как эту проблему можно исправить?
-
Коллеги, заработало.
Необходимо было выставить свойство TLabel.Size.Width в нужное значение.
Но почему не всегда кооректно работает свойство autoSize, большой вопрос??? Мне кажется этот глюк
-
Добрый вечер.
Подскажите пути решения следующей проблемы:
1) Создал пустой проект FMX под операционную систему Windows.
2) Положил на форму компонент TLabel.
3) В свойство компонента Label.Text задал строку "Способ записи в объект синхронный/асинхронный".
4) Свойство AutoSize компонента выставил в True.
5) В режиме DesignTime компонент TLabel отображает полностью весь текст.
6) Запускаю приложение в операционной системе Windows 7x64, результат работы положительный.
7) Запускаю приложение в операционной системе Windows Server 2008, результат отрицательный, текст в компоненте TLabel сокращается до "Способ записи в объект синхронный/асинхронн..."
8) Выставял свойство AutoSize компонента TLabel в False и автоматически в DesignTime задал большую длину в компоненте для текста, но результат остался отрицательным.
Использую Delphi XE7 Update 1. В чем может быть проблема?
Акция: Delphi 10.1 Berlin Starter Named БЕСПЛАТНО
в XE10.1 Berlin
Опубликовано
К сожалению, в этой редакции нельзя создавать ServiceApplication