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

Проблемы с отрисовкой


sviat9440

Вопрос

Всем привет. Есть такая проблема:

 

Вот код потока:

procedure Tmain_form.GetBase_threadAfterRun(Sender: TIdThreadComponent);
var
  Browser: TIdHTTP;
  JSON, JSON1: TJSONObject;
  i: Integer;
  Item, ItemRadio: TListBoxItem;
  BaseName, BaseCaption, BaseCategory, BaseID, BaseData: String;
  IMG: TMemoryStream;
begin
  if Connect then
  Begin
    Browser := TIdHTTP.Create(Self);
    img := TMemoryStream.Create;
    JSON := TJSONObject.ParseJSONValue(Browser.Get(Main_URL + 'base/get?client=' + Client)) as TJSONObject;
    i := 0;
    while i < JSON.Count do
    Begin
      BaseData := JSON.Pairs[i].ToString;
      BaseData := BaseData.Substring(pos('"', BaseData));
      BaseName := BaseData.Remove(pos('"', BaseData) - 1);
      BaseData := BaseData.Substring(pos('"', BaseData));
      BaseData := BaseData.Substring(pos(':', BaseData));
      JSON1 := TJSONObject.ParseJSONValue(BaseData) as TJSONObject;
      BaseCaption := JSON1.Values['caption'].Value;
      BaseCategory := JSON1.Values['category'].Value;
      BaseID := JSON1.Values['id'].Value;
      if MainContentDownloadBaseListBox.Items.IndexOf(BaseID) = -1 then
      Begin
        Item := TListBoxItem.Create(Self);
        Item.Height := 120;
        Item.StyleLookup := 'ListBoxItemDownloadBaseStyle';
        Item.Text := BaseID;
        Item.StylesData['name'] := BaseName;
        Item.StylesData['caption'] := BaseCaption;
        Item.StylesData['category'] := BaseCategory;
        Browser.Get(Main_URL + 'base/img/' + BaseID, IMG);
        Item.ItemData.Bitmap.LoadFromStream(IMG);
//        Sleep(100);
        MainContentDownloadBaseListBox.AddObject(Item);
      End;
      if MainContentDownloadBaseListBoxCategory.Items.IndexOf(BaseCategory) = -1 then
      Begin
        ItemRadio := TListBoxItem.Create(Self);
        ItemRadio.Height := 30;
        ItemRadio.StyleLookup := 'RadioListBoxItemStyle';
        ItemRadio.Text := BaseCategory;
        ItemRadio.Selectable := False;
        ItemRadio.Margins.Top := 5;
        ItemRadio.StylesData['text.OnChange'] := TValue.From<TNotifyEvent>(MainContentDownloadBaseListBoxCategoryChange);
        MainContentDownloadBaseListBoxCategory.AddObject(ItemRadio);
      End;
      i := i + 1;
    End;
    Browser.Free;
    img.Free;
    GetBase_thread.Terminate;
  End else sleep(100);
end;

В общем он должен загружать с сервера список итемов и заливать их в лист бокс.

Проблема в том что не всегда итемы в листбоксе отображаются корректно.

Если я вместо sleep(100) (закомментирован), поставлю ShowMessage('dd');, то все отрисовается корректно.

 

Ниже прилагаю скрины как оно может быть отрисовано.

 

Надеюсь на вашу поддержку))))

post-1145-0-93140500-1457419986_thumb.jp

post-1145-0-61345500-1457419990_thumb.jp

post-1145-0-92413300-1457419996_thumb.jp

Ссылка на комментарий
  • Ответы 51
  • Создана
  • Последний ответ

Лучшие авторы в вопросе

Рекомендуемые сообщения

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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