Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 525

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
у меня собственно такая ситуация: при входе запрашивается пароль. Если пароль совпадает с фамилией любого студента из типизированного файла, то разрешить просматривать данные, но запретить их редактировать.

Приложение:
  1. type Tstudents = record
  2. ID_stud : word;
  3. Family : string[50];
  4. Name : string[50];
  5. end;
  6.  
  7. var
  8. PasswordDlg: TPasswordDlg;
  9. stu: TStudents;
  10. Students : file of Tstudents;
  11.  
  12. procedure TPasswordDlg.OKBtnClick(Sender: TObject);
  13. var i,j: integer; f:file of TStudents ;
  14. begin
  15.  
  16. assignfile(f,'MarkList');
  17. Reset(f);
  18. for i:=1 to Form3.StringGrid1.RowCount-1 do
  19. begin
  20.  
  21. j:=0;
  22. while(not Eof(f)) do
  23. begin
  24. j:=j+1;
  25. Read(f,stu);
  26. if (PasswordDlg.Password.text=stu.Family) then
  27. begin
  28. Form1.Show;
  29.  
  30. Form2.stringGrid1.Options:=Form4.stringGrid1.Options-[goEditing];
  31. Form3.stringGrid1.Options:=Form4.stringGrid1.Options-[goEditing];
  32. end;
  33. end;
  34. end;
  35.  
  36. if (passwordDlg.Password.Text='admin') then Form1.Show
  37. end;


susumi Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: susumi (статус: Посетитель)
Вопрос отправлен: 15 марта 2009, 00:03
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, susumi!
Попробовал у себя - всё чудно компилируется. Да и должно оно.
Можно попробовать заменить исключение элемента с множества на альтернативную функцию.

Exclude(StringGrid1.Options, goEditing);//Для исключения свойства 
  Include(StringGrid1.Options, goEditing);//для включения
Но меня смущает другое - строка
Form2.stringGrid1.Options:=Form4.stringGrid1.Options-[goEditing];
Это так задумано, что гриды с разных форм? вообще то эта запись в контексте Вашей задачи странная. А вот здесь и может содержаться ошибка. Форма 2 (а может и 4) к этому моменту может быть не создана или уже удалена. И если это так, то произойдет ошибка во время исполнения. Какая ошибка у Вас возникает Вы не указали, так что всё возможно.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 15 марта 2009, 00:23
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 15 марта 2009, 10:05; участников в обсуждении: 2.
susumi

susumi (статус: Посетитель), 15 марта 2009, 08:46 [#1]:

вы правильно сказали: у меня 4 формы и к каждой находится по StringGrid. если входит студент, то надо запрещать редактирование этих табл. Ошибка такая: [Error] Unit5.pas(51): Undeclared identifier: 'goEditing'... все создано правильно и без пароля прекрасно работает
Вадим К

Вадим К (статус: Академик), 15 марта 2009, 09:51 [#2]:

вот теперь мне понятна ошибка. И знаю решение. Наиболее просто исправить - поставьте на форму ввода пароля StringGrid. Скомпилируйте приложение, обязано скомпилироваться. Потом удалите лишний грид. (после компиляции запускать программу не нужно!)
Всё дело в том, что goEditing объявлен в юните, который не подключен к форму ввода пароля. Можно было конечно просто ручками его вписать в список uses, но я не помню по памяти точное имя, а может там и два нужно. А описанный выше нехитрым способом делфи сделает всё сама.
Галочка "подтверждения прочтения" - вселенское зло.
susumi

susumi (статус: Посетитель), 15 марта 2009, 10:05 [#3]:

спасибо огромное все работает :))

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.02 сек.