Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2010, 01:12   #1
Thandem
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 12
Печаль BOOLEAN

Здравствуйте уважаемые программисты. Я "Delphi" учу всего 2 месяца по этому знаю его только поверхностно.
Пожалуйста,помогите с простой проблемой.
(Извините если такая тема есть,просто я не знаю что именно мне нужно искать,да и форум у вас очень большой. Тем много и я уверен что слово BOOLEAN тут встречается часто)

У меня такая проблема:

Код:
begin
  Ini.WriteString('PASS','sEdit1',sEdit1.Text);
  If Ini.WriteString('ID','sEdit2',sEdit2.Text) then
  Ini.WriteString('Активация','Активировано','Ok')
  Else
  ShowMessage('Ошибка...')
end;
Вот ошибка.

Цитата:
Build
Checking project dependencies...
Compiling Project1.dproj (Debug configuration)
[DCC Error] Unit1.pas(42): E2012 Type of expression must be BOOLEAN
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
Failed
Elapsed time: 00:00:00.4
Output
Build started 24.09.2010 0:09:06.
___________________________________ _______________
Хотел сделать проверку,но... у меня затруднение. Delphi говорит что должен быть булевский тип. Я пробывал,читал в книге,не смог сам сделать. Помогите пожалуйста правильно сделать. И если можно напишите комментарии что к чему,что бы в другой раз зря не просить не кого.

За ранее вам благодарен. Спасибо.
Thandem вне форума Ответить с цитированием
Старый 24.09.2010, 01:46   #2
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

Ошибка в
Код:
 If Ini.WriteString('ID','sEdit2',sEdit2.Text) then
Ini.WriteString - процедура, не возвращает значение.
Замените
Код:
If Ini.WriteString('ID','sEdit2',sEdit2.Text) then
  Ini.WriteString('Активация','Активировано','Ok')
  Else
  ShowMessage('Ошибка...')
на
Код:
Ini.WriteString('Активация','Активировано','Ok');
kuzjma вне форума Ответить с цитированием
Старый 24.09.2010, 01:51   #3
Thandem
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 12
По умолчанию

Это хорошо что вы откликнулись на мою проблему. Но..
Даже так вылезает та же самая ошибка.. >_<

Да и мне нужно обязательно сделать проверку. Если пользователь ввел не правильно нужно что бы после этого нужное мне действие повторилось. А в данном случаее описанном вами проверки нет. Если пользователь введет не правильное значение то заданное мною действие не повторится. (((

Последний раз редактировалось Thandem; 24.09.2010 в 01:55.
Thandem вне форума Ответить с цитированием
Старый 24.09.2010, 01:59   #4
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

Кодом
Код:
If Ini.WriteString('ID','sEdit2',sEdit2.Text) then
Вы пытаетесь проверить, удалось ли записать данные в INI файл. Если Вам нужно проверить, заполнил ли пользователь поле, то пишите:
Цитата:
if sEdit2.Text <> '' then
Цитата:
Даже так вылезает та же самая ошибка.. >_<
Значит в программе есть еще такое условие, исправьте его.
kuzjma вне форума Ответить с цитированием
Старый 24.09.2010, 02:04   #5
Thandem
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 12
По умолчанию

У меня будет проверка 2х чисел. При любом числе должно произойти это:
Ini.WriteString('ID','sEdit2',sEdit 2.Text);

Если проверка прошла должно произойти это:
Ini.WriteString('Активация','Активи ровано','Ok')


Но,если проверка не пройдет то должно произойти это:
Ini.WriteString('Активация','Активи ровано','off')

При запуске программа будет смотреть,если OFF попросит еще раз зарегистрировать. Если он запустит. Вот в этом вся и проблема.
Thandem вне форума Ответить с цитированием
Старый 24.09.2010, 02:14   #6
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

Thandem, если честно, я так и не понял что за числа, и что вы с ними хотите сделать, на что проверить.
WriteString - процедура. Процедура отличатся от функции тем, что не возвращает значения - и проверить ее выполнение через if нельзя.
Если Вам нужно проверить, заполнено ли поле sEdit2 в секции ID, то:
Код:
if ini.ReadString('ID', 'sEdit2', '') <> '' then
или объясняйте понятнее.
kuzjma вне форума Ответить с цитированием
Старый 24.09.2010, 14:10   #7
Thandem
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 12
По умолчанию

При запуске активации программы с сайта будет качаться текстовый файл с пароль и ID регистрации. Пользователь будет вводить пароль и ID в 2 Edit`a. При нажатии кнопки активировать будет идти проверка,если пароль и ID совпадают в INI файле должно быть написано что активация пройдена если не совпадают то должно быть написано что активация не пройдена. Если активация успешно завершена,при новом открытии форма должна открыться уже с нужно места а не с активацией,но все ровно будет происходить проверка пароля и ID. Мне писали,давненько нечто подобное. Вот сейчас я хотел написать это сам. Ну и нужна соответственно проверка INI.
If активация прошла успешно до откроется форма then
И еще раз проверяем файл
else
активация не прошла,открываем снова форму с запросом на активацию.

Вот как то так,вроде бы высказал свою мысль.
Thandem вне форума Ответить с цитированием
Старый 24.09.2010, 14:26   #8
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Писать пароль в текстовый файл... сомнительно.

Если вам нужна проверка:
If активация прошла успешно
Зачем вы делаете проверку на успешность записи в файл?
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 24.09.2010, 14:46   #9
Thandem
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 12
По умолчанию

Дело в том что ID я могу блокировать. По этому и нужна проверка.
Если ее не будет пользователь сможет запустить программу с заблокированым ID.

Да именно в текстовый файл,ведь пользователь сам будет писать пароль при регистрации.
Да и файл качается только в тот момент когда пользователь нажмет кнопку,после 2х секундной проверки файл удалиться,даже если вы знаете папку куда сохранится пароль вы не успеете посмотреть его. Ну на худой конец напишу свой тип файла.

Ладно,спасибо всем за помощь. Буду пробовать сам.

Последний раз редактировалось Thandem; 24.09.2010 в 14:49.
Thandem вне форума Ответить с цитированием
Старый 24.09.2010, 16:43   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
Восклицание

Еще раз по слогам
Процедура не возвращает ни каких значений
Нельзя проверить ее результат.

Есть процедуры, которые возвращают ресультат своей работы. Например Val. Но для этого в самих параметрах процедуры есть специальный параметр
procedure Val (... var Code: Integer);
В него-то и записывается код результата. По этому коду и можно судить о том, что процедура выполнила или не выполнила операцию. Но в любом случае запись типа
if Val (s, r, c) = 0 then ...
не будет даже компелироваться
Можно только так
Val (s, r, c);
if c = 0 then ...
Процедура WriteString такого параметра не имеет вообще.


Если процедуре WriteString не удастся произвести запись в файл, то возникнек соответствующее исключение. Например: Ошибка доступа к файлу. И программа прервет работу и сразу перейдет на end кода выполнившего WriteString с ошибкой (для новичков пойдет и такое объяснение).

Вот допустим есть код:
Код:
  Ini.WriteString('PASS','sEdit1',sEdit1.Text);
  Ini.WriteString('ID','sEdit2',sEdit2.Text);
Нам не нужно проверять выполнилась ли вторая строка, если известно, что выполнилась первая. Это будет так (в 99,99999999999% случаев).

Идем дальше.

Цитата:
Дело в том что ID я могу блокировать.
Как именно вы собираетесь блокировать ID. Вы что хотите запретить запись на винчестер определенного набора байт? Для того, чтобы заблокировать ID по вашей технологии проверки, нужно просто не отсылать его с сервера клиенту. Тогда программе просто несчем будет сравнивать введенный ранее ID и она не сможет завершить процесс идентификации, а пользователь, соответственно, не сможет работать с программой.

Цитата:
По этому и нужна проверка.
Повторюсь для закрепления. Не нужно проверять удалась ли запись в файл. Для вашей системы идентификации это не кретично. Проверка эдесь нужна только одна: равно/не равно.

Код:
{получение пароля и ID от сервера}
if {пароль или ID не получены} then begin
  {"Ошибка связи с сервером"}
  {Выход}
end;

{чтение пароля и ID из ini-файла}
if {в ini-файле нет пароля и ID} then
  {запрос пароля и ID у пользователя} // то самое окно регистрации

while {пароль из ini-файла <> паролю с сервера} end 
        {ID из ini-файла <> ID с сервера} do begin
  if {пользователь согласен закрыть программу} then
    Halt;
  {запрос пароля и ID у пользователя} // то самое окно регистрации
end;

{запись пароля и ID в файл} // Просто запись, без всяких дополнительных проверок

Последний раз редактировалось Sibedir; 24.09.2010 в 16:47.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Boolean korzunmaria Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2010 22:13
Boolean korzunmaria Помощь студентам 1 19.05.2010 21:19
И опять boolean. dimple Помощь студентам 4 04.05.2008 14:03
Boolean Air Общие вопросы Delphi 2 16.02.2008 17:15
Boolean... ZhekON Общие вопросы Delphi 2 17.06.2007 00:39