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

dmitry

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

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

  • Посещение

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

  1. У меня планшет Samsung Galaxy T285. Такой проблемы не обнаруживается в Берлине.
    Создал обычный Android проект. Положил TEdit. Задал ему некий тест. Запускаю на устройстве. Перехожу за последний символ, нажимаю BackSpace и стирается только последний символ, а не весь текст

  2. В продолжении,

    и на платформе 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;

     

    Безымянный.png

  3. Добрый день.

    Никак не могу справиться с одной проблемой при работе с компонентом ListView. Использую Delphi XE10.1 - Berlin.

    В тестовом проекте создал два вида: Windows, Android 10 Tabled.

    На главную форму положил компонент ListView и две кнопки для заполнения ListView и очистки.

    Способ отображения Items - Динамический и состоит из двух текстовых элементов (TaskName и Status).

    В TaskName может содержаться очень большой текст, поэтому я самостоятельно рассчитываю высоту Item, с помощью кода приведенного на данном форуме.

    Все замечательно работает на Windows платформе, а вот под Android при создании Item появляются артефакты, текст как бы обрезается, но стоит повернуть ориентацию планшета, так сразу артефакты пропадают.

    Помогите избавиться от артефактов. Свой тестовый проект прилагаю.

     

    TestProject.rar

    Безымянный.png

  4. 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 равно пустому значению всегда.  

  5. Тогда я просто не понимаю, для чего нужно событие 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 только пробую работать, есть пока что некое непонимае.

     

     

    Безымянный.png

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

     

  7. Добрый день.

    Использую 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

  8. Добрый вечер.

     

    Создаю 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;
    

    При смене фокуса из вторичной формы к главной форме, вторичная форма исчезает, а мне необходимо чтоб она не исчезала.

     

    Как быть? Может быть я что-то неправильно делаю?

  9. Добрый вечер.

     

    Не ожидал я конечно такого отношения к клиентам от компании Embarcadero (IDERA).

     

    Предыстория по следующей ссылке:

    http://fire-monkey.ru/topic/1837-otklonenie-utechka-pamiati-v-komponente-tnotificationcenter/

     

    Установили к среде DX10 первое обновление по подписке, надеясь что компания Embarcadero исправит этот баг в Update 1, но чуда не случилось, хотя на внутреннем трекере баг зафиксирован, по словам Ярослава Бровина.

     

    Теперь обращение к компании Embarcadero:

    • Вы можете создать какой-нибудь дополнительный патч к среде, который исправит утечку памяти в компоненте или придется ждать выхода DX 11?
    • В Вашей компании хоть чуть-чуть тестируют продукт перед продажей или клиенты для Вас являются постоянными бета-тестерами?
  10. Добрый день.

     

    В продолжение моей темы "Утечка памяти в компоненте TNotificationCenter" http://fire-monkey.ru/topic/1825-utechka-pamiati-v-komponente-tnotificationcenter/#entry9604, хотел бы узнать, каким образом можно оформить этот баг на сайт Embarcadero для его исправления?

  11. Код стандартный:

    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;
    

  12. Добрый день.

     

    В версии Delphi 10 Seattle обнаружил утечку памяти в проекте NotificationsProject из стандартных примеров.

     

    Воспроизводится она легко:

    1) при создании формы, вставляем ReportMemoryLeaksOnShutDown := True;

    2) Жмем на кнопку Show. Уведомление появляется в Windows 10.

    3) Закрываем проект и видим что есть не уничтоженные объекты TNotification;

     

    Ярослав, как эту проблему можно исправить?

  13. Добрый вечер.

     

    Подскажите пути решения следующей проблемы:

    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. В чем может быть проблема?

     

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