|
#16
|
|||
|
|||
Вот здесь я добавляю.
Код:
while Pos('<user>',answer)<>0 do begin tempuser.uid:=Pars('uid',answer); tempuser.fname:=Pars('first_name',answer); tempuser.lname:=Pars('last_name',answer); tempuser.online:=StrToInt(Pars('online',answer)); memo1.Lines.Add('added user='+tempuser.fname+' '+tempuser.lname); memo1.Lines.Add('online='+IntToStr(tempuser.online)); if copy(Pars('photo_rec',answer),Length(Pars('photo_rec',answer))-3,4)='.jpg' then begin try gethttp.Get(Pars('photo_rec',answer), ms); ms.Position := 0; jpeg := TJPEGImage.Create; jpeg.LoadFromStream(ms); tempuser.photo:=TBitmap.Create; tempuser.photo.Assign(jpeg); jpeg.Free; finally ms.Clear; end; end; Friends.AddObject(tempuser.uid,tempuser); delete(answer,1,Pos('</user>',answer)); end; |
#17
|
|||
|
|||
По поводу того, что мешает: Разве инициализация не нужна?
|
#18
|
||||
|
||||
Цитата:
Код:
tempuser := TUser.Create; |
#19
|
|||
|
|||
Это же лишнее по твоим словам?
|
#20
|
||||
|
||||
Цитата:
Код:
SelUser:=TUser.Create; // Здесь ты создаёшь объект и ссылку на него присваиваешь переменной SelUser for i := 0 to friends.Count-1 do begin if friends.Objects[i]=nil then memo1.Lines.Add('nil'); SelUser:=TUser(TObject(friends.Objects[i])); // А здесь ты забываешь ссылку на объект который создал выше и присваиваешь переменной SelUser ссылку на другой объект Цитата:
|
#21
|
|||
|
|||
После добавления не выдает ничего:
Код:
messagebox(handle,PChar(TUser(friends.Objects[0]).fname),'',mb_ok); |
#22
|
||||
|
||||
Цитата:
|
#23
|
|||
|
|||
Я выкладывал:
Код:
while Pos('<user>',answer)<>0 do begin tempuser:=TUser.create; tempuser.uid:=Pars('uid',answer); tempuser.fname:=Pars('first_name',answer); tempuser.lname:=Pars('last_name',answer); tempuser.online:=StrToInt(Pars('online',answer)); memo1.Lines.Add('added user='+tempuser.fname+' '+tempuser.lname); memo1.Lines.Add('online='+IntToStr(tempuser.online)); if copy(Pars('photo_rec',answer),Length(Pars('photo_rec',answer))-3,4)='.jpg' then begin try gethttp.Get(Pars('photo_rec',answer), ms); ms.Position := 0; jpeg := TJPEGImage.Create; jpeg.LoadFromStream(ms); tempuser.photo:=TBitmap.Create; tempuser.photo.Assign(jpeg); jpeg.Free; finally ms.Clear; end; end; Friends.AddObject(tempuser.uid,tempuser); tempuser.Free; delete(answer,1,Pos('</user>',answer)); end; ms.Free;gethttp.Free; С БД Access всё работало |
#24
|
||||
|
||||
Смотри.
При создании формы создаю 10 пользователей Код:
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin friends := TStringList.Create; for i := 1 to 10 do begin tempuser := TUser.Create; tempuser.uid := IntToStr(i); tempuser.fname := 'first_name' + IntToStr(i); tempuser.lname := 'last_name' + IntToStr(i); tempuser.online := online; Friends.AddObject(tempuser.uid, tempuser); end; end; При нажатии на кнопку Button1 добавляю их в ListBox1: Код:
procedure TForm1.Button1Click(Sender: TObject); var SelUser: TUser; i: Integer; begin lb_users.Items.BeginUpdate; lb_users.Clear; Memo1.Lines.Add('count=' + IntToStr(friends.Count)); for i := 0 to friends.Count - 1 do begin if friends.Objects[i] = nil then begin memo1.Lines.Add('nil'); end else begin SelUser := TUser(friends.Objects[i]); memo1.Lines.Add(SelUser.fname + ' ' + SelUser.lname); memo1.Lines.Add('online=' + Inttostr(SelUser.online)); if SelUser.online = online then begin lb_users.AddItem(SelUser.fname + ' ' + SelUser.lname, TObject(StrToInt(SelUser.uid))); memo1.Lines.Add('i=' + Inttostr(i) + ' user=' + SelUser.fname + ' ' + SelUser.lname); end; end; end; lb_users.Items.EndUpdate; end; |
#25
|
||||
|
||||
Цитата:
|
#26
|
|||
|
|||
Вот где собака сидела. Виноват. Просто напросто запутался
|
#27
|
|||
|
|||
Для обработки текста в формате JSON пользуюсь всем известным классом TlkJSON.
При долгой работе моей программы в этой функции выскакивает ошибка access violation: Код:
function TlkJSONobject.IndexOfName(const aname: WideString): Integer; var mth: TlkJSONobjectmethod; i: Integer; begin if not FUseHash then //ВОТ ЗДЕСЬ ОШИБКА begin result := -1; for i := 0 to Count - 1 do begin // mth := TlkJSONobjectmethod(FValue[i]); mth := TlkJSONobjectmethod(fList.Items[i]); if mth.Name = aname then begin result := i; break; end; end; end else begin result := ht.IndexOf(aname); end; end; |
#28
|
||||
|
||||
Цитата:
Цитата:
Тебе нужно более строго следить за созданием и уничтожением объектов и "access vialation" будет очень редкой ошибкой. |
#29
|
|||
|
|||
хм..Была бы ошибка тогда в моем модуле, разве нет?
|
#30
|
||||
|
||||
Цитата:
|