Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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)
> Можно ли так делать?

Так делать нельзя.


Наверх

Титульная страница Поиск, карта сайта Написать письмо