Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.08.2012, 20:56
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию TListBox

Уважаемые, имеется ли у итемов копоненты TListBox что-нибудь вроде параметра Data как у итемов TListView?
Ответить с цитированием
  #2  
Старый 19.08.2012, 21:09
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Кодер
Уважаемые, имеется ли у итемов копоненты TListBox что-нибудь вроде параметра Data как у итемов TListView?
Конечно есть
Код:
  ListBox1.Items.Objects[ItemIndex]:=...
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Кодер (19.08.2012)
  #3  
Старый 19.08.2012, 21:10
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Благодарствую
Ответить с цитированием
  #4  
Старый 22.08.2012, 23:26
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Загружаю из интернета аватары пользователей. Соответственно каждая картинка должна быть привязана к некому userid. После чего с этими изображениями нужно работать.
Вопрос: Как правильно организовать хранение данных?
ЗЫ: В моих предположениях необходимо объявить глобально массив из TBitmap и забивать в него все изображения, но как их индексировать? Как им присвоить некий идентификатор, чтобы потом не составила труда в поиске по id?
Ответить с цитированием
  #5  
Старый 23.08.2012, 00:14
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Тогда уж запись:
Код:
type
  TAvatar = record
    Bitmap : TBitmap;
    ID : Integer;
  end;

var
  Avatar : array of TAvatar;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 23.08.2012, 00:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно использовать TList:
Код:
type
  TAvatar = class
    Bitmap : TBitmap;
    ID : Integer;
  end;

var
  Avatar : TAvatar;
  List : TList;
...
  List := TList.Create;
...
  Avatar := TAvatar.Create;
  Avatar.Bitmap := TBitmap.Create;
  Avatar.Bitmap.Assign(Нужный битмап);
  Avatar.ID  := Нужный ID;

  List.AddObject('', Avatar);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 23.08.2012, 08:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Кодер
В моих предположениях необходимо объявить глобально массив из TBitmap и забивать в него все изображения, но как их индексировать? Как им присвоить некий идентификатор, чтобы потом не составила труда в поиске по id?
Код:
type
  TMyBitmap = class(TBitmap)
  public
    UserID: Integer;
  end;
...
var
  abmp: array of TMyBitmap;
begin
  SetLength(abmp, 2);
  
  abmp[0]:=TMyBitmap.Create;
  abmp[0].LoadFromFile('1.bmp');
  abmp[0].UserID:=1248;

  abmp[1]:=TMyBitmap.Create;
  abmp[1].LoadFromFile('2.bmp');
  abmp[1].UserID:=5555;

  ShowMessage(IntToStr(abmp[0].UserID));
  ShowMessage(IntToStr(abmp[1].UserID));
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 23.08.2012, 08:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Лучше коллекции пользовать, с массивами труднее, в плане удаления произв. элементов.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 23.08.2012, 08:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  lbmp: TList;
  bmp: TMyBitmap;
begin
  lbmp:=TList.Create;

  bmp:=TMyBitmap.Create;
  bmp.LoadFromFile('1.bmp');
  bmp.UserID:=1248;
  lbmp.Add(bmp);

  bmp:=TMyBitmap.Create;
  bmp.LoadFromFile('2.bmp');
  bmp.UserID:=5555;
  lbmp.Add(bmp);
  
  ShowMessage(IntToStr(TMyBitmap(lbmp[0]).UserID));
  ShowMessage(IntToStr(TMyBitmap(lbmp[1]).UserID));
end;

ну и не забываем про уничтожение объектов!

добавлено позже:
упс, пока перекуривал...)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 23.08.2012, 09:46
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

особого отличия коллекции от списка так и не увидел, но доверюсь мнению знающих людей.

Кому будет интересно, вот хорошая статья про коллекции:
http://www.delphisources.ru/pages/fa...llections.html
Ответить с цитированием
  #11  
Старый 25.08.2012, 17:55
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Использую TStringList для хранения объектов типа TUser.
Код:
type
  TUser = class
    online:byte;
    uid,fname,lname:string;
    photo:TBitmap;
  end;
При создании главной формы инициализирую переменную типа TStringlist(friends) и переменную типа TUser(tempuser).

В ходе работы программы добавляю объекты tempuser в переменную friends:
Код:
tempuser.uid:=Pars('uid',answer);
tempuser.fname:=Pars('first_name',answer);
tempuser.lname:=Pars('last_name',answer);
tempuser.online:=StrToInt(Pars('online',answer));
...
tempuser.photo.Assign(jpeg);
...
Friends.AddObject(tempuser.uid,tempuser);

Далее пытаюсь считать эти самые объекты и добавить их в ListBox
Код:
lb_users.Items.BeginUpdate; 
       lb_users.Clear;

       memo1.Lines.Add('count='+IntToStr(friends.Count));
       SelUser:=TUser.Create;
       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]));  
           
           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;
       SelUser.Free;
       lb_users.Items.EndUpdate;

При этом в LIstBox ничего не добавляется. В чем ошибка?
Ответить с цитированием
  #12  
Старый 25.08.2012, 18:09
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Как мне проверить состояние объектов?
Ответить с цитированием
  #13  
Старый 25.08.2012, 18:46
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Кодер
Далее пытаюсь считать эти самые объекты и добавить их в ListBox
Код:
lb_users.Items.BeginUpdate; 
       lb_users.Clear;

       memo1.Lines.Add('count='+IntToStr(friends.Count));
       SelUser:=TUser.Create;
       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]));  
           
           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;
       SelUser.Free;
       lb_users.Items.EndUpdate;

При этом в LIstBox ничего не добавляется. В чем ошибка?
Видимо вот эта проверка не проходит:
Код:
if SelUser.online = online then
вот ничего не добавляется.

И ещё вопрос. Зачем нужны эти 2 строки?:
Код:
...
       SelUser:=TUser.Create;
...
       SelUser.Free;
...

Цитата:
Сообщение от Кодер
Как мне проверить состояние объектов?
Состояние объектов? Что это за состояние такое? Первый раз такое слышу...
Ответить с цитированием
  #14  
Старый 25.08.2012, 19:55
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Проверка проходит.

Код:
SelUser:=TUser.Create;
...
SelUser.Free;

Это локальная переменная.

При считывании в цикли, выдается постоянно одно и тоже значение
Ответить с цитированием
  #15  
Старый 25.08.2012, 20:01
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Кодер
Проверка проходит.

Код:
SelUser:=TUser.Create;
...
SelUser.Free;

Это локальная переменная.
Это неважно какая это переменная. Я спрашивал зачем здесь нужны эти строки? Правильный ответ: они здесь низачем не нужны (и даже вредны здесь) - убери их.
Цитата:
Сообщение от Кодер
При считывании в цикли, выдается постоянно одно и тоже значение
Так ты наверно создаёшь один объект который присваиваешь всем строкам TListBox-а.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter