![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток Уважаемые форумчане!
Кратко поясню ситуацию данной темы. Есть сайт расписания учебного заведения, возникла необходимость написать мини приложение для андроид смартфонов которое бы это расписание загружало и отображало как в онлайн так и в оффлайн режиме. Данное приложение уже написано и работает. НО! Некоторые операции которые приложение выполняет обрабатываются ~20 сек. (в зависимости от скорости интернета и т.п.), при этом в приложении (как и в случаи с VLC) виснет интерфейс на время выполнения операции. А хотелось бы показывать прогресс выполнения операции, хотя бы частями. Ниже привожу код выполнения операции получения списка групп/преподавателей. Сильно не ругайте, если считаете код плохим. ![]() Похоже что необходимо делать потоки данных, либо грамотно пользоваться оператором sleep(); К сожалению практики в этом нету. Жду от Ваших ответов - советов, может ссылок полезных. Если у кого то найдется время/желание помочь изменить код на примере одной данной операции, буду очень признателен!!))) Код:
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, FMX.StdCtrls, FMX.Layouts, FMX.Memo, FMX.ListBox; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; IdHTTP1: TIdHTTP; Button2: TButton; Memo2: TMemo; Button3: TButton; ComboBox1: TComboBox; ComboBox2: TComboBox; Memo3: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public function Pars(T_, ForS, _T:string):string; end; var Form1: TForm1; html,group,teach:string; // глобальные переменные implementation {$R *.fmx} function TForm1.Pars(T_, ForS, _T: string): string; // функция для парсинга var a, b:integer; begin Result := ''; if (T_='') or (ForS='') or (_T='') then Exit; a:=Pos(T_, ForS); if a=0 then Exit else a:=a+Length(T_); ForS:=Copy(ForS, a, Length(ForS)-a+1); b:=Pos(_T, ForS); if b>0 then Result:=Copy(ForS, 1, b - 1); end; procedure Button1Click(Sender: TObject); var i:integer; s,s1:string; begin html:=IdHTTP1.Get('http://m.inhk.ru/'); // код странички // 1 часть обработки кода // находим в коде часть со списком групп и их id memo1.text:=pars('<option selected disabled>Выбор группы</option>', html, '</select>'); Memo1.Lines.Delete(0); i:=Memo1.lines.Count; Memo1.Lines.Delete(i-1); // удаляем пустые строчки for i:=0 to memo1.lines.count-1 div 2 do begin if i<Memo1.Lines.count then begin memo1.lines.delete(i); end; end; // получаем названия групп и id без лишних тегов for i:=0 to memo1.lines.count-1 do begin s:=memo1.Lines[i]; s1:=Memo1.Lines[i]; s:=pars('>', s, '<'); s1:=pars('"', s1, '"'); memo2.Lines.Add(s); memo3.Lines.Add(s1); end; // временно заносим id групп group:=memo3.Text; // заносим названия групп в combobox for I := 0 to memo1.lines.count-1 do begin ComboBox1.Items.add(Memo2.Lines.Strings[i]); end; memo1.Lines.Clear; memo2.Lines.Clear; memo3.Lines.Clear; // часть 2 аналогична 1й, только для преподавателей memo1.text:=pars('<option selected disabled>Выбор преподавателя</option>', html, '</select>'); Memo1.Lines.Delete(0); i:=Memo1.lines.Count; Memo1.Lines.Delete(i-1); for i:=0 to memo1.lines.count-1 div 2 do begin if i<Memo1.Lines.count then begin memo1.lines.delete(i); end; end; for i:=0 to memo1.lines.count-1 do begin s:=memo1.Lines[i]; s1:=Memo1.Lines[i]; s:=pars('>', s, '<'); s1:=pars('"', s1, '"'); memo2.Lines.Add(s); memo3.Lines.Add(s1); end; teach:=memo3.text; for I := 0 to memo1.lines.count-1 do begin ComboBox2.Items.add(Memo2.Lines.Strings[i]); end; memo1.Lines.Clear; memo2.Lines.Clear; memo3.Lines.Clear; // заносим id групп и преподавателей Memo1.Text:=group; Memo2.Text:=teach; end; ![]() Последний раз редактировалось LACOSTE, 18.09.2013 в 07:55. |