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

xenon54

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

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

  • Посещение

  • Победитель дней

    14

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

  1. Нашел вот это:

    procedure TCustomListView.DrawItemsFill(const StartItem, EndItem: Integer; const LocRect: TRectF; const Opacity: Single;
      const HeaderIndex: Integer);
    var
      I, Sep, AltIndex: Integer;
      DrawRect, DrawSubRect, SepRect: TRectF;
      ItemObjects: TListViewItem;
      SepHeight: Single;
    begin
      SepHeight := GetSeparatorLineHeight;
    
      for I := StartItem to EndItem do
        if I <> HeaderIndex then
        begin
          ItemObjects := Items[I];
    
          if (ItemObjects <> nil) and ((ItemObjects.Count > 0) or (Items[Index - 1].Purpose <> TListItemPurpose.None)) then
          begin
            DrawRect := GetItemRelRect(I, LocRect);
            if ItemObjects.Purpose = TListItemPurpose.None then
            begin
              FBrush.Color := FItemStyleFillColor;
    
    

    Тут "FBrush.Color := FItemStyleFillColor;" можно поменять на свой цвет, допустим в зависимоcти от свойства tag. Получится что-то типа :

    if ItemObjects.Tag <> 0 then FBrush.Color := ItemObjects.Tag else FBrush.Color := FItemStyleFillColor;
    

    Вопрос как применить эти изменения не изменяя FMX.ListView? Если написать Helper к TCustomListView в своем юните, то естественно он не подхватывается, а писать его в FMX.ListView ИМХО тупо, уж проще сам метод в TCustomListView поправить. Сделать наследника TlistView как я понял тоже гиблое дело из-за того что метод DrawItemsFill не виртуальный и его не переопределить. Как быть?

  2.  

    Всем привет! В компоненте TListView есть свойства SearchVisible. Установив его в true сверху компонента появляется строка поиска. Работает вполне сносно. В своем проекте я использую кастомыный ItemAppearance из примеров ("MultiDetailItem"). Как сделать так чтобы поиск фильтровал итемы не только по свойству "text" у итемов, но и ,например, по Detail1, Detail2, Detail3?

    Попробую предположить, что проще будет создать свой edit для строки фильтрации. Пробегать по итемам листа перебором и выставлять свойство item(i).Visible = false, где во всех нужных полях не содержится искомая комбинация. Хотя и изменить логику поведения в модуле FMX.SearchBox.pas наверное тоже возможно при желании.

     

    Да хотелось бы хоть что-то сделать в ФМ без костылей, ибо потом они аукнутся через пару версий... А вот как этот поиск устроен в TListView при помощи SearchBox разобраться не могу...

  3. Не уверен что правильно понял вопрос, но попробую ответить так как понял.

    var
    RB : TRadioButton;
    begin
      RB := TRadioButton.Create(ListBox1.ItemByIndex(1));
      RB.Parent := ListBox1.ItemByIndex(1);
      RB.Align := TAlignLayout.Right;
    
    
    
    end;
    

    Ну или TImage вместо TRadioButton.

  4. Ну что касается IOS, то могу сказать что там нужны библиотеки libcrypto.a и libssl.a и в юзесы во view source надо прописать 

      {$IF Defined(IOS) and Defined(CPUARM)}
      IdSSLOpenSSLHeaders_Static,
      {$ENDIF }
    
    

    Для винды тож надо установить библиотеки SSL. Для андроида хз, не пробовал еще ни разу пока.

  5. Узнал про существование хелперов из твоего поста. Погуглил, оказалась клевая штука, плохо что не знал раньше про них :)

    В итоге написал следующее:

    TObjectHelper = class helper for TListViewItems
        public type
        TItemsList = TList<TListViewItem>;
        public
        procedure MyChanged;
        function MyActiveitems : TItemslist;
      end;
    
    ....
    
    implementation
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    
    
      ListView1.Items.MyActiveitems.Sort(
          TComparer<TListViewItem>.Construct(
            function(const Left, Right: TListViewItem): Integer
            begin
              Result := CompareText(Left.text, Right.Text);
            end));
    
      ListView1.Items.MyChanged;
    
    end;
    
    
    
    
    { TObjectHelper }
    
    function TObjectHelper.MyActiveitems: TItemslist;
    begin
      result := self.FActiveItems;
    end;
    
    procedure TObjectHelper.MyChanged;
    begin
      self.changed;
    end;
    

    Все замечательно работает :)

    Спасибо.

  6. Всем привет! У компонента TListView есть метод sort параметром которого является "TFmxObjectSortCompare".  

    TFmxObjectSortCompare = reference to function (Left, Right: TFmxObject): Integer;
    

    Для листбокса сортировка выглядела бы так: 

    function TForm1.SortASCII(Left, Right: TFMXObject): Integer;
    begin
      Result := CompareText((Left as TListBoxItem ).text (Right as TListBoxItem).Text);
    
    end;
    

    Но в ListView итемы не являются наследниками TFMXObject. И как быть в этой ситуации? Метод сорт получается лишний в TListView или можно как-то по-другому реализовать сортировку?

  7. Всем привет! В компоненте TListView есть свойства SearchVisible. Установив его в true сверху компонента появляется строка поиска. Работает вполне сносно. В своем проекте я использую кастомыный ItemAppearance из примеров ("MultiDetailItem"). Как сделать так чтобы поиск фильтровал итемы не только по свойству "text" у итемов, но и ,например, по Detail1, Detail2, Detail3?

  8. Я согласен на потомков, но что там делать, чего добавлять. Можешь накидать? Хотя это наверное дело не 5 минут... В любом случае спасибо за попытку помочь :)

    И не станет ли ListView после этих изменений таким же тормозным как ListBox...

    Я потому и выбрал ListView что он не тормозит при скроле когда он состоит из 100-200 итемов на телефоне, чего нельзя сказать о ListBox.

     

    Так что ListBox не вариант. 

  9. Есть ListView заполненный итемами. Фон у всех итемов одного цвета, по дефолту белого. Есть, допустим, кнопка на форме. По нажатии на эту кнопку нужно чтобы поменялся фон у 3-го итема в ListView. Это задача.

    В своем проекте использую кастомизированные итемы для ListView из примеров "MultiDetailAppearance". Я думаю что пути решения 2: 

    1) Заного перерисовать отдельный итем;

    2) Добавить в класс "TMultiDetailItemAppearance" какой-нибудь "TIMage" и зарисовать его нужным цветом когда мне это понадобится, или "TRectAngel".

    Как реализовать эти оба варианта, я не знаю.

  10. Проблема в том что ListBox и ListView очень сильно отличаются. У ListBoxa итемы это контролы, и там все понятно как сделать. А вот у ListView итемы не контролы, т.е. стилизация для них чужда.

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