![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ComboBox и Objects [D6, WinXP]
alexeis © (2005-07-01 09:14:00)Помогите разобраться плз.
Делаю формочку авторизации для запуска программы. На ней Combobox
и Edit. Создание списка Combobox делаю таким образом:
while not dm.dsHeald.Eof do
begin
if dm.dsHeald.FieldByName('isauser').AsInteger = 1 then
cbName.Items.AddObject(dm.dsHeald.FieldByName('Fam').AsString,
TObject(dm.dsHeald.FieldByName('pass').AsString));
dm.dsHeald.Next
end;
Потом проверяю на клик на кнопке:
if ePass.Text = PChar(cbName.Items.Objects[cbName.ItemIndex])then
ModalResult:=mrOK
else
ModalResult := mrCancel;
Смущают выделенные фрагменты. Можно ли так делать? Дело в том, что не работает. Причем интересный момент-если количестов символов в Едите совпадает с кол-вом символов объекта, связанного с листом, то считается, что условие выполняется.Как?
alexeis (2005-07-01 10:05:00) [1]Да с букмарками поинтересней вариант. Попробую.
alexeis (2005-07-01 09:56:00) [2]Thanx
Digitman (2005-07-01 09:56:00) [3]если после заполнения комбобокса не закрывать НД, в поле pass которого хранятся пароли, то задача упрощается :
//заполняем комбобокс
with dm.dsHeald, cbName.Items do
while not Eof do
begin
if FieldByName('isauser').AsInteger = 1 then
AddObject(FieldByName('Fam').AsString, TObject(GetBookmark)); //в кач-ве объекта используем закладку тек.записи
Next;
end;
//проверяем пароль на совпадение
with dm.dsHeald, cbName.Items do
begin
GotoBookmark(TBookmark(Objects[cbName.ItemIndex]));
if ePass.Text = FieldByName('pass').AsString then
ModalResult:=mrOK
else
ModalResult := mrCancel;
end;
//перед явной или неявной очисткой комбобокса (в т.ч. при его разрушении) во избежание утечек памяти
обязательноуничтожить сделанные в НД закладки
//НД, в котором при заполнении комбобокса делались эти закладки, при этом д.б. все еще открыт !
with dm.dsHeald, cbName.Items do
for i:= 0 to Count - 1 do
FreeBookmark(TBookmark(Objects[i]));
Dimous (2005-07-01 09:54:00) [4]Нужно выделять память под строку.
Как вариант: можно создать TStringList, в котором и хранить все пароли.
А вообще хорошо ли для всех пользователей отображать список всех имен, зачем им знать кто еще может работать? ИМХО, правильнее было бы вводить имя и пароль (последнее введенное имя можно сохранять), а уж потом осуществлять проверку...
begin...end (2005-07-01 09:45:00) [5]> alexeis © (01.07.05 9:39) [3]
> А как тогда проще?
TStrings.Names, TStrings.Values?
alexeis (2005-07-01 09:39:00) [6]>>Digitman
Нет, не ограничена. А как тогда проще? Не хочется создавать рекорды из одной записи-пароля
Digitman (2005-07-01 09:21:00) [7]
> Можно ли так делать?
нельзя
> Дело в том, что не работает
понятное дело ... поэтому и не работает, что так делать нельзя
макс.длина пароля ограничена ?
begin...end (2005-07-01 09:17:00) [8]> alexeis © (01.07.05 9:14)
> Можно ли так делать?
Так делать нельзя.