Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизХранение второго значения в ListBox. Найти похожие ветки
← →
allucard (2007-04-12 11:27) [0]Доброго дня.
Есть список пользователей(ListBox), у каждого пользователя есть свой пароль а также время регистрации, эти данные можно хранить как то в этом-же ListBox?
Или обязательно база данных?
Спасиб за варианты.
← →
allucard (2007-04-12 11:46) [1]Или где можно хранить три столбца данных но выводить один, чтоб был метод SaveToFile?
← →
_Аноним (2007-04-12 11:51) [2]Можно хранить привязанные объекты (свой экземпляр на каждый элемент списка)
см. ListBox.Items.Objects
что касается сохранения в файл - то это ручками.
← →
allucard (2007-04-12 11:54) [3]А если создать свой класс(или тип как лучше) с тремя переменными и записывать его как обьект: ListBox1.AddItem();
?
← →
PZ (2007-04-12 11:54) [4]Приблизительно так можно:
S := "Иванов"+" "+Parol+" 11.04.2007";
ListBox.Items.Add(S);
← →
clickmaker © (2007-04-12 11:55) [5]
> [3] allucard (12.04.07 11:54)
а не это ли предложено в [2]?
← →
allucard (2007-04-12 11:55) [6]ListBox1.Items.Values - а это что?
← →
allucard (2007-04-12 11:56) [7]>clickmaker © (12.04.07 11:55) [5]
Так лучше тип или класс?
← →
clickmaker © (2007-04-12 11:57) [8]
> [7] allucard (12.04.07 11:56)
а что по-твоему тип, а что - класс?
← →
allucard (2007-04-12 12:00) [9]type record end; - тип
Type
sdfssdg = class
end; - класс
← →
allucard (2007-04-12 12:03) [10]Да вообще можно и второй ListBox невидимым сделать и туда писать пароль.
← →
clickmaker © (2007-04-12 12:07) [11]
> [10] allucard (12.04.07 12:03)
ага. Отличное решение. А для даты - третий и т.д.?
← →
_Аноним (2007-04-12 12:09) [12]
> Так лучше тип или класс?
Если под "типом" понимать рекрод, то для данного случая - особо без разницы. Там можно хранить как указатель на экземпляр, так и указатель на структуру.
> Да вообще можно и второй ListBox невидимым сделать и туда
> писать пароль.
А вот это несерьезно
← →
allucard (2007-04-12 12:11) [13]Ну, пробую создать класс.
А как проверить тек. значение ListBox?
Что то ItemIndex немогу найти.
← →
_Аноним (2007-04-12 12:14) [14]
> Что то ItemIndex немогу найти.
А он есть.
← →
allucard (2007-04-12 12:25) [15]А может сам ListBox дописать?
← →
allucard (2007-04-12 12:33) [16]Ой.
Это если я создаю класс, для работы с ним нужно создать рабочий экземпляр (выполнить конструктор), заполнить поля, потом освобождать.
Ну я так сделал:
TUser = class
username: string;
password: string;
private
{ Private declarations }
public
{ Public declarations }
end;
← →
clickmaker © (2007-04-12 12:34) [17]
> нужно создать рабочий экземпляр (выполнить конструктор),
> заполнить поля, потом освобождать
а ты думал - в сказку попал?
← →
allucard (2007-04-12 12:38) [18]Вопрос:
Как динамически во время выполнения программы добавлять экземпляры класса?
Я ведь в конечном итоге не знаю сколько пользователей будет?
← →
clickmaker © (2007-04-12 12:46) [19]
> [18] allucard (12.04.07 12:38)
цитирую тебя же
"нужно создать рабочий экземпляр (выполнить конструктор), заполнить поля"
← →
allucard (2007-04-12 12:53) [20]
> clickmaker © (12.04.07 12:46) [19]
ну эт я понял.
А если у меня 1000 пользователей, то обьявлять 1000 переменных класса TUser в разделе var модуля?
а если 10000? :) И каждую записывать в TListBox?
Нет.
Кажется можно создавать экземпляры класса и описывать их во время работы программы, но как?
← →
Virgo_Style © (2007-04-12 13:14) [21]allucard (12.04.07 12:53) [20]
А если у меня 1000 пользователей, то обьявлять 1000 переменных класса TUser в разделе var модуля?
Ты про массивы слышал?)))
← →
Virgo_Style © (2007-04-12 13:17) [22]Или можно еще пару TStringList"ов внутри хранить, реализация попроще должна получиться.
← →
clickmaker © (2007-04-12 13:17) [23]
> [20] allucard (12.04.07 12:53)
зачем тебе переменные? Они у тебя будут в Objects
Потом, когда станут не нужны, нужно пробежаться по этому списку и поубивать
← →
_Аноним (2007-04-12 13:19) [24]
> А если у меня 1000 пользователей, то обьявлять 1000 переменных
> класса TUser в разделе var модуля?
не нужно. Используй одну переменную (причем локальную), она в цикле будет последовательно указывать на разные экземпляры.
var
User : TUser ;
for I:=0 to 1000 do
begin
User :=TUser.Create;
User.UserName:="Вася №" + INtToStr(I);
User.Password:="12345";
ListBox.Items.AddObject(User.UserName, User);
end;
А потом не забудь пройти в цикле и освободить память под объекты
← →
allucard (2007-04-12 13:22) [25]
> Ты про массивы слышал?)))
Про массивы да, про массивы обьектов - нет? а такое есть?
>Virgo_Style © (12.04.07 13:17) [22]
Идея.
>clickmaker © (12.04.07 13:17) [23]
Чтоб экземпляр класса можно было создать, его необходимо обьявить в розделе VAR.
← →
allucard (2007-04-12 13:23) [26]
> _Аноним (12.04.07 13:19) [24]
прикольно.
← →
clickmaker © (2007-04-12 13:23) [27]
> Чтоб экземпляр класса можно было создать, его необходимо
> обьявить в розделе VAR
ну так и объяви, в чем проблема?
← →
clickmaker © (2007-04-12 13:27) [28]
> его необходимо обьявить в розделе VAR
да, кстати, и не необходимо. Вопрос удобства и реализации самого класса.
ListBox.Add(UserName, TUser.Create(Password, RegTime));
← →
allucard (2007-04-12 13:29) [29]>_Аноним (12.04.07 13:19) [24]
procedure TForm2.Button1Click(Sender: TObject);
begin
User := TUser.Create;
User.username := Edit1.Text;
User.password := Edit2.Text;
User.realname := Edit3.Text;
ListBox1.Items.AddObject(user.realname; user);
user.free;
end;
Пишет ошибку:
Not enough actual parameters.
← →
clickmaker © (2007-04-12 13:30) [30]
> ListBox1.Items.AddObject(user.realname; user);
> user.free;
зачем вторая строка?
← →
allucard (2007-04-12 13:32) [31]
> clickmaker © (12.04.07 13:30) [30]
Без неё всёравно ошибка.
Пробовал метод AddItem, таже ошибка.
← →
allucard (2007-04-12 13:42) [32]По ходу нельзя свой окласс зафигарить в методом AddObject, даже если его сделать дочерним TObject.
← →
clickmaker © (2007-04-12 13:48) [33]
> [32] allucard (12.04.07 13:42)
> По ходу нельзя свой окласс зафигарить
а мужики-то и не знают.
И фигарят и фигарят себе...
← →
allucard (2007-04-12 13:50) [34]
> clickmaker © (12.04.07 13:48) [33]
умные мысли уже мне не приходят.
да и голова розболелась.
В чём ошибка?
Или глюк это.
← →
clickmaker © (2007-04-12 13:52) [35]
> [34] allucard (12.04.07 13:50)
Цитрамону выпей.
Тебе в [24] дали готовый код, какие еще мысли нужны?
← →
allucard (2007-04-12 14:14) [36]
> clickmaker © (12.04.07 13:52) [35]
Это глюк какой-то.
Вот так работает и не пишет никакой ошибки:
procedure TForm2.Button1Click(Sender: TObject);
var sl: TStringList;
begin
User := TUser.Create;
User.username := Edit1.Text;
User.password := Edit2.Text;
User.realname := Edit3.Text;
sl:= TStringList.Create;
sl.AddObject(user.realname,user);
user.free;
sl.Free;
end;
← →
_Аноним (2007-04-12 14:26) [37]У тебя там было
ListBox1.Items.AddObject(user.realname; user);
фактические параметры разделяются запятой, формальные - точкой с запятой
← →
allucard (2007-04-12 14:49) [38]
> _Аноним (12.04.07 14:26) [37]
Ой, е.
Сенькс.
Пошёл писать дальше.
← →
allucard (2007-04-12 20:03) [39]
> _Аноним (12.04.07 13:19) [24]
А как с ними потом работать.
Как загрузить из этих обьектов их данные из списка ListBox.
← →
allucard (2007-04-13 09:29) [40]Но как теперь эти обьекты записать в файл?
Пишу так:
ListBox1.Items.SaveToFile(ExtractFilePath(ParamStr(0))+"data\users.dat");
Но сохраняются только названия а не обьекты:
ListBox1.Items.AddObject(user.realname, user);
Т.е. при загрузке
ListBox1.Items.LoadFromFile(ExtractFilePath(ParamStr(0))+"data\users.dat");
Получаю только названия записей user.realname.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.043 c