Форум: "Основная";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
ВнизПроверка полей в компоненте Найти похожие ветки
← →
Yakudza (2003-05-16 13:24) [0]Вот есть три поля в компоненте:
FEmail : String;
FSmtp : String;
FSendEmail : boolean;
Как сделать так что-бы при переключении в инспекторе FSendEmail, проверялось заполненны ли поля FEmail и FSmtp, если заполненны то True если нет то False; Роскжите методу если можно то киньте пример.
← →
MBo (2003-05-16 13:26) [1]в SetSendEmail проверяй FEmail <>""
← →
Skier (2003-05-16 13:29) [2]>Yakudza
дык...напиши ...write SetSendEmail(...)
procedute TYourComponent.SetSendEmail(Value : Boolean);
begin
if Value then begin
FSendEmail := (FEmail <> EmptyStr) and (FSmtp <> EmptyStr);
end //if
else FSendEmail := Value;
end;
← →
Yakudza (2003-05-16 19:05) [3]А почему так не работает ?
procedute TYourComponent.SetSendEmail(Value : Boolean);
if Value then begin
if (FEmailAddress <> "") and (FSMTPServer <> "") then FSendEmail := True
else begin
ShowMessage("Difine EmailAddress and SMTPServer");
FSendEmail := False;
end;
end;
end;
← →
Skier (2003-05-16 19:09) [4]>Yakudza © (16.05.03 19:05)
Начнём с такого вопроса : а где у тебя начинается тело SetSendEmail ?
← →
MBo (2003-05-16 19:09) [5]Оно работает, только для случая присвоения Value:=true, а случай false не учтен.
← →
Yakudza (2003-05-16 19:17) [6]...
property SendEmail : Boolean read FSendEmail write SetMailSend default False;
...
...
procedure TComponent.SetMailSend (Value: boolean);
begin
if Value then begin
if ((FEmailAddress <> "") and (FSMTPServer <> "")) then FSendEmail := True
else begin
ShowMessage("Difine EmailAddress and SMTPServer");
FSendEmail := False;
end;
end;
end;
...
При старте проги выкидывает сообщение ShowMessage("Difine EmailAddress and SMTPServer"); И вообщем FSendEmail := False;
← →
Skier (2003-05-16 19:20) [7]1) procedure TComponent.SetMailSend (Value: boolean); ?!
2) D efine
3) А какая вообще должна быть логика работы св-ва MailSend ?
Подробнее...
4) А что ты делаешь при "старте проги"
← →
Yakudza (2003-05-16 19:31) [8]1) procedure TComponent.SetMailSend (Value: boolean); ?!
Пардон, это я погарячился, хотел что-бы было понятно что это компонент :)
procedure TMyComponent.SetMailSend (Value: boolean); ?!
2) Define
Спасибо, исправлю.
4) А что ты делаешь при "старте проги"
ничего, компонента просто лежит на форме.
← →
Yakudza (2003-05-16 19:33) [9]>MBo © (16.05.03 19:09)
>Оно работает, только для случая присвоения Value:=true, а >случай false не учтен.
Но False вроде не должно быть, все поля заполненны.
← →
Skier (2003-05-16 19:36) [10]>Yakudza © (16.05.03 19:33)
А теперь подумай : как твоё св-во установить в False в ИО ?
← →
Yakudza (2003-05-16 19:46) [11]вроде понял в чем проблема ...
← →
Yakudza (2003-05-16 19:52) [12]Мне вот непонятно почему при открытии проекта у компонента сразу FSendEmail := False, хотя необходимые поля заполненны.
← →
Skier (2003-05-16 19:55) [13]>Yakudza © (16.05.03 19:52)
Потому что компилятор гарантированно обнуляет все
поля при создании экземпляра класса. 0 для Boolean это False
Если хочешь чтобы было True в конструкторе напиши
FSendEmail := True;
← →
Yakudza (2003-05-16 20:13) [14]Написал - тот же еффект.
constructor TMyComponent.Create (AOwner : TComponent);
begin
inherited;
FSendEmail := True;
end;
← →
Yakudza (2003-05-16 20:15) [15]Получаеться что FEmailAddress и FSMTPServer тоже обнуленны ?
← →
Skier (2003-05-16 20:17) [16]>Yakudza © (16.05.03 20:15)
Разумеется.
Можешь проверить...
constructor TMyComponent.Create (AOwner : TComponent);
begin
inherited;
FSendEmail := True;
if (FEmailAddress = EmptyStr) and (FSMTPServer = EmptyStr) then
ShowMessage("Define EmailAddress and SMTPServer !");
end;
← →
Yakudza (2003-05-16 20:22) [17]Тогда почему в ИО FEmailAddress, FSMTPServer заполненны ?
← →
Skier (2003-05-16 20:27) [18]>Yakudza © (16.05.03 20:22)
Они (св-ва EmailAddress и SMTPServer) читаются из файла формы .dfm
Мне кажется, хотя издалека трудно отлаживать ,что тебе нужно
поменять местами св-ва
1) EmailAddress, SMTPServer и 2) SendEmail
Чтобы EmailAddress, SMTPServer читались перед SendEmail
published
property EmailAddress ...
property SMTPServer ...
property SendEmail ...
Так будет проще всего...
← →
Yakudza (2003-05-16 20:44) [19]Заработало !
Спасибо, многое стало ясно :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c