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

HyperZen

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

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

  • Посещение

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

    1

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

  1. procedure Parsing(URLToPars: string; aListView: TListView);
    var
      TempText : string;
      HeadMatches, MsgMatches: TMatchCollection;
      CountPagesMatch: TMatch;
      i: Integer;
      HeadRegularExprString : string;
      MsgRegularExprString : string;
    begin
      try
    
    // вот это место, которое хотелось бы видеть с в потоке и с индикатором:
    
        HTMLText := IdHTTP1.Get(URLToPars); // выполняем загрузку файла из интернета;
    
    // вот это место, которое хотелось бы видеть с индикатором
    
    
    
        aListView.Items.Clear;
    
            CountPagesMatch := TRegEx.Match(HTMLText, 'max="(.*?)".*value="(.*?)"');
    
           HeadRegularExprString := 'class="date">(.*?)<.*?class="id">(.*?)<';
    
          MsgRegularExprString := 'class="text">(.*?)<\/div>';
    
        HeadMatches := TRegEx.Matches(HTMLText, HeadRegularExprString, [roIgnoreCase, roMultiLine]);
    
        MsgMatches := TRegEx.Matches(HTMLText, MsgRegularExprString, [roIgnoreCase, roMultiLine]);
    
        if HeadMatches.Count = MsgMatches.Count then
          begin
              for i := 0 to HeadMatches.Count - 1 do
                begin
                  TempText := HTMLClear(MsgMatches.Item.Groups[1].Value);
      
                  with aListView.Items.Add do
                    begin
                      Data['DateText'] := HeadMatches.Item.Groups[1].Value;
                      Data['CitateText'] := HeadMatches.Item.Groups[2].Value;
                      Data['MainText'] := TempText;
                      Data['imgCopy'] := il1.Bitmap(TSizeF.Create(36, 36),0);
                      Data['imgSend'] := il1.Bitmap(TSizeF.Create(36, 36),1);
                    end;
    
                end;
          end
            else
              ShowMessage('Ошибка загрузки данных!');
    
        except
          On E: Exception do
             ShowMessage('Ошибка: ' + E.Message);
        end;
    end;

     

  2. В продолжение темы http://fire-monkey.ru/topic/3307-tlistview-как-отловить-нажатие-на-картинку-в-tlistview/

    При использовании автоматического подсчета высоты итема, картинки становятся не кликабельны...

    Подсчет идет при помощи процедуры с этого форума, в onUpdateObjects.

  3. Спасибо!

    Немного перефразирую вопрос: у меня имеется процедура, в которой происходит закачка страницы с интернета. В ней же - происходит поиск нужной мне информации регулярными выражениями. Далее, в ней же - очистка от лишних символов. И заполнение TListView.

    Хочу "обернуть" момент закачки страницы в TAniIndicator. Интегрирую данный код с использованием TTask (место, где идет закачка страницы). Получаю exception на регулярных выражениях (это, видимо, потому, что еще не скачана страница целиком). Как сделать так, чтобы шла закачка страницы, показывался индикатор, а моя процедура - выполнялась позже. Есть ли возможность как-то "дождаться" закачки страницы, а затем выполнять код процедуры далее?

    И как вообще правильно поступать в таких случаях?

  4. Спасибо! Но в примере Ярослава более "наглядно", что ли, выглядит код. Там сразу понятно где запускать анимацию индикатора, где тормозить ее. Как быть с использованием TTask и индикатора?!

  5. Как правильно передать полученные значения в потоке (например строку, очень длинную строку) в главную форму приложения? Использовать глобальные переменные? Или есть другой способ?

    Использую пример Ярослава: http://fire-monkey.ru/topic/30-фоновое-выполнение-операции-без-замораживания-отрисовки/?controller=topic

    Вместо Sleep использую обычное скачивание страницы с интернета при помощи IdHTTP1.Get, записываю результат в какую-то переменную, затем пытаюсь использовать ее в главной форме приложения... Как все-таки правильно?

  6. 18 часов назад, ra.eremeev сказал:

    Добрый вечер :)

    HyperZen, правильно ли понимаю: если снести LV, мигрированный из более ранней версии Delphi, то все Item.Add отрабатывают корректно?

    У меня та же ерунда. Экспериментировать не берусь пока - слишком много нагромождено, времени много уйдет. Обошелся Вашим советом (костыль с resize), но чую, что где-нибудь "старый" LV может выкинуть неожиданный финт...

    Нет. Как только я ни бился с расчетом высоты итемов компонента ListView... Ничего не помогало, пока я не понял, что все ошибки связаны с размером шрифта по-умолчанию, установленного в конкретном устройстве. Обошел эту проблему, теперь все работает корректно на любых (ЛЮБЫХ) устройствах!

    Для этого при расчете высоты итема прибавляю к размеру шрифта 0.1 и все расчет ведутся корректно. А процедуру расчета взял на этом замечательном форуме.

  7. Что-то я туплю :) не работает, тыкните, пожалуйста, в ошибку :)

      if Key = vkHardwareBack then
        begin
          if (back_pressed + 2000) > MilliSecondOfTheDay(now) then
            begin
              Close
            end
              else
            begin
              {$IFDEF ANDROID}
              ToastMsg('Нажмите еще раз для выхода...');
              {$ENDIF}
              back_pressed := MilliSecondOfTheDay(now);
            end;
        end;

     

  8. private static long back_pressed;
    
    @Override
    public void onBackPressed() {
        if (back_pressed + 2000 > System.currentTimeMillis()) {
            super.onBackPressed();
        } else {
            Toast.makeText(getBaseContext(), "Нажмите еще раз для выхода", Toast.LENGTH_SHORT).show();
        }
    
        back_pressed = System.currentTimeMillis();
    }

    Вот код для С++. Может кто его в Delphi превратить? :)

  9. 8 часов назад, krapotkin сказал:

    если мы видим, что не обновляются те элементы, которые были вне экрана, почему бы просто не пересоздать их при смене стиля?

    Как раз те элементы, которые были вне экрана - обновляются и стиль к ним применяется нормально. Не меняется цвет шрифта в видимой области TListView.

  10. Приведите кто-нибудь, пожалуйста, пример, простой пример - переключения двух стилей в приложении... Желательно используя TListView в данном проекте... Уже бесит данная ситуация...

    // не помогает ни:
      lvMain.NeedStyleLookup;
      lvMain.ApplyStyleLookup;
    
    // не помогает ни:
      lvMain.Resize;
    
    // ни:
      lvMain.Repaint;
    	

    Помогает только полная загрузка данных заново в этот компонент...

  11. В 30.04.2015 в 14:06, ZuBy сказал:

    спасибо за решение, но я уже нашел своё. пока оно меня устраивает

    Можно поинтересоваться какое? Мне что-то ни NeedStyleLookup ни ApplyStyleLookup не помогает... Итемы перерисовываются некорректно...

  12. Судя по первому скриншоту, у Вас все поля одинаковые по размеру, т.е. высота компонента не выставляется от количества введенного в него текста. Вам следует пересмотреть подсчет высоты компонента относительно текста, а установленное свойство Trimming никак на это не влияет...

  13. 7 часов назад, Axbor сказал:

    Ничего полезного для меня не нашел. Мне не нужно вычислять высоту Item а. Оно у меня константное. Просто при длинных текстах появляется вышеуказанные артефакты...

    Видимо, потому что текст не влезает...

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