Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-94974
Kirp
2003-02-14 11:35
2003.05.29
Зуминг изображения


1-94825
Raduga
2003-05-19 14:52
2003.05.29
определение объема занимаемой памяти


1-94843
DDDeN
2003-05-17 18:00
2003.05.29
Индекс выделенного элемента в TListBox


14-95072
@@LE
2003-05-08 09:23
2003.05.29
Получить иконку


4-95178
BuildeRR
2003-03-31 18:52
2003.05.29
чтение из едита





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский