sviat9440 Опубликовано 8 марта, 2016 Поделиться Опубликовано 8 марта, 2016 Всем привет. Есть такая проблема: Вот код потока: 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');, то все отрисовается корректно. Ниже прилагаю скрины как оно может быть отрисовано. Надеюсь на вашу поддержку)))) Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 2 июня, 2016 Автор Поделиться Опубликовано 2 июня, 2016 Цитата Ссылка на комментарий
Вопрос
sviat9440
Всем привет. Есть такая проблема:
Вот код потока:
В общем он должен загружать с сервера список итемов и заливать их в лист бокс.
Проблема в том что не всегда итемы в листбоксе отображаются корректно.
Если я вместо sleep(100) (закомментирован), поставлю ShowMessage('dd');, то все отрисовается корректно.
Ниже прилагаю скрины как оно может быть отрисовано.
Надеюсь на вашу поддержку))))
Ссылка на комментарий
Лучшие авторы в вопросе
6
3
3
35
Популярные дни
8 март
24
2 июнь
9
17 март
4
9 март
4
Лучшие авторы в вопросе
Равиль Зарипов (ZuBy) 6 постов
krapotkin 3 постов
Евгений Корепов 3 постов
sviat9440 35 постов
Популярные дни
8 март 2016
24 постов
2 июнь 2016
9 постов
17 март 2016
4 постов
9 март 2016
4 постов
Популярные посты
Евгений Корепов
Накидал примерный проект для корректной работы с потоками. Создаем поток, в который с помощью очереди закидываем задания и в таймере получаем результат выполнения. Вместо изжившего себя TIdHTTP, испол
Brovin Yaroslav
Так, я поясню. Нельзя работать с UI компонентами в не главном UI потоке. Отсюда у вас и ошибки через раз. Банально по причине того, что когда вы изменяете состояние UI компонента, это может при
Евгений Корепов
В приведенном коде процедура FormCreate: procedure TFormMain.FormCreate(Sender: TObject); begin Timer.Interval:=10; Хотя такой короткий не нужен для большинства случаев.
Изображения в теме
51 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.