![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранение второго значения в ListBox. [D7, XP]
allucard © (2007-04-12 11:27:00)Доброго дня.
Есть список пользователей(ListBox), у каждого пользователя есть свой пароль а также время регистрации, эти данные можно хранить как то в этом-же ListBox?
Или обязательно база данных?
Спасиб за варианты.
Сергей М. (2007-04-13 14:01:00) [21]
> А если записать в файл не 4-байта указателя, а байты по
> этому указателю?
А среди этих "байт по указателю" обязательнонайдутся еще куча "четверок" байт, также являющих собой указатели - ты об этом подумал ?)
allucard (2007-04-13 13:57:00) [22]А если записать в файл не 4-байта указателя, а байты по этому указателю?
Точнее как такое сделать?
>clickmaker © (13.04.07 10:36) [48]
записать как набор байт, а как еще?
Если записи переменной длины (имена юзеров), то сначала пишешь размер записи, потом собственно данные.
При чтении сначала читаешь размер, потом собственно данные, потом позиционируешься на следующую запись (тек. поз. + размер)
SetFilePointer(), например
Но можно все это и через TFileStream
Как через TFileStream?
Сергей М. (2007-04-13 13:49:00) [23]
> это указатель на данные или на структуру данных?
На данные.
А уж структурированы эти данные или нет - эт другой коленкор)
allucard (2007-04-13 12:49:00) [24]
> 4 байта в 32-разрядной ОС.
> Эти 4 байта ты и пытаешься писать в файл.
Ну, вообще-то он их и записывает.
Только вот почему для каждого из элеиентов [i] он был одинаковый?
Ведь это указатель на данные или на структуру данных?
clickmaker (2007-04-13 12:06:00) [25]
> в ListBox1.Items.Objects[i] должен быть рабочий экземпляр
> класса?
ну с точки зрения предметной области - да. Но с точки зрения кода - нет. Там указатель. 4 байта в 32-разрядной ОС.
Эти 4 байта ты и пытаешься писать в файл.
Чтобы сохранить объект, нужно последовательно записать все его свойства в файл. Формат - это уже твое дело
Сергей М. (2007-04-13 12:05:00) [26]
> нужно же понимать что я делаю
И это правильно !)
Берешь исходник TTreeView и смотришь, что там происходит при файловой загрузке/выгрузке.
allucard (2007-04-13 12:01:00) [27]
> clickmaker © (13.04.07 11:51) [53]
Указываю записать в файл F, только вот не пойму почему - но по ходу:
ссылку на структуру данных или саму структуру.
Но в ListBox1.Items.Objects[i] должен быть рабочий экземпляр класса?
> Сергей М. © (13.04.07 11:48) [52]
Я бы давно с двумя ListBox'aми сделал, но нужно же понимать что я делаю.
clickmaker (2007-04-13 11:51:00) [28]
> [51] allucard (13.04.07 11:46)
> ListBox1.Items.Objects[i] - это по всей видимости ссылка на структуру
ну правильно. А что такое ссылка?
Тогда вот этой строкой
write(f, (ListBox1.Items.Objects[i] as TUser));
ты что делаешь?
Сергей М. (2007-04-13 11:48:00) [29]
> allucard (12.04.07 11:27)
А тебя что так на TListBox'е заклинило ?
Ну возьми ты, к примеру, тот же TTreeView, он одним махом позволяет сохранять себя в файл..
Пушкин <- юзер №1
СанчоПушкин <- RealName
Pushkin <- Username
ВеликийНегритянскийПоэт <- Password
Пупкин <- юзер №2
ВасяПупкин <- RealName
Pupkin <- Username
ПарольВасиПупкина <- Password
allucard (2007-04-13 11:46:00) [30]
> clickmaker © (13.04.07 11:22) [50]
что такое объект?
Это тип данных сочетающий в себе свойства и методы.
Короче экземпляр класса.
>Что такое класс
Тип данных, переменная соотв. типа.
> что такое экземпляр класса?
Выделенная область в памяти для хранения свойств, методов.
Как в памяти хранится не понимаю.
ListBox1.Items.Objects[i] - это по всей видимости ссылка на структуру, т.е. обьект.
Обьясни что не так.
Напиши коротенький примерчик.
clickmaker (2007-04-13 11:22:00) [31]
> [49] allucard (13.04.07 11:05)
ты вообще представляешь, что такое объект? Что такое класс, а что такое экземпляр класса? И как они в памяти хранятся?
Например, как компилятор, а затем и среда выполнения интерпретирует ListBox1.Items.Objects[i]?
allucard (2007-04-13 11:05:00) [32]
> clickmaker © (13.04.07 10:36) [48]
Идею понял, реализацию нет.
делаю так:
try
AssignFile (F, ExtractFilePath(ParamStr(0))+'data\users.dat');
Rewrite(F);
if IOResult=0 then
begin
for i:=0 to ListBox1.Count - 1 do
begin
write(f, (ListBox1.Items.Objects[i] as TUser));
end;
end;
CloseFile(F);
except
end;
но пишет в строке write(f, (ListBox1.Items.Objects[i] as TUser)); ошибку
Variable required.
Что за ошибка?
clickmaker (2007-04-13 10:36:00) [33]
> [47] allucard (13.04.07 10:14)
записать как набор байт, а как еще?
Если записи переменной длины (имена юзеров), то сначала пишешь размер записи, потом собственно данные.
При чтении сначала читаешь размер, потом собственно данные, потом позиционируешься на следующую запись (тек. поз. + размер)
SetFilePointer(), например
Но можно все это и через TFileStream
Т.е. получается что-то типа простенькой базы данных
allucard (2007-04-13 10:14:00) [34]
> clickmaker © (13.04.07 10:10) [46]
Это создаст файл и запишет что-то в него.
А как класс со свойствами туда вихнуть?
clickmaker (2007-04-13 10:10:00) [35]
> [45] allucard (13.04.07 10:09)
CreateFile(), WriteFile()
allucard (2007-04-13 10:09:00) [36]Я что-то совсем завис.
Неужели нельзя записать в файл структуру данных(в моём случае класс) вместе со свойствами?
allucard (2007-04-13 09:54:00) [37]
> Сергей М. © (13.04.07 09:44) [43]
Сделал наследником TUser.
Подскажи хоть с чего начать.
Я таким ещё не занимался.
Дописывать к методам TListBox или создавать новый метод своего класса TUser?
Если к TListBox, делать новый метод(напр. SaveObjectToFile) и писать в нём Inherited SaveToFile.
Если к своему методу то я даже не знаю как унаследовать метод от TListBox, т.к. он не является дочерним.
Сергей М. (2007-04-13 09:44:00) [38]
> allucard (13.04.07 09:38) [42]
Нет такого.
Самому писать придется.
И если класс TUser сделать наследником TComponent, это ощутимо облегчит решение.
allucard (2007-04-13 09:38:00) [39]
> Сергей М. © (13.04.07 09:35) [41]
есть метод специально для сохранения обьектов ListBox'a в файл?
Сергей М. (2007-04-13 09:35:00) [40]
> как .. обьекты записать в файл?
Запись объекта есть ничто иное как запись св-в этого объекта.