Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.29;
Скачать: CL | DM;

Вниз

Проверка полей в компоненте   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
3-94660
P.Kert
2003-05-07 10:58
2003.05.29
Необходимо вставить BLOB !!!


14-95022
vajo
2003-05-13 15:16
2003.05.29
Улучшение зрения. (эта ветка уже была)


14-95081
Дмитрий К.К.
2003-05-10 13:39
2003.05.29
Именинники 10 мая


3-94763
prof
2003-05-12 07:03
2003.05.29
Ошибка в запросе


6-94999
grid_y
2003-03-27 10:28
2003.05.29
SMTP