Вниз
Скачать: CL | DM;

Странное поведение Visible   Найти похожие ветки 

 
alex_ran   (2002-11-15 11:29) [0]

Уважаемые мастера. Пишу небольшую программку для ведения табеля отработанных часов. Значения для каждого дня месяца заносятся в свой DBEdit. 1-й день - DBEdit1,..., 31-день - DBEdit31.
Для удобства юзера из этих DBEdit-ов формируется подобие календаря. Поэтому была введена процедура CalendareConstructor, опирающаяся на значение года - Edit1 и месяца ComboBox1, в обработчике onChange которого она и запускается, а Edit1.onChange ссылается на ComboBox1.onChange. В ней задаются координаты каждого DBEdit-а и его Enable и Visible. Все работает, но...
По запуску приложения в onCreate главной формы значения Edit1 и ComboBox1 инициализируются значениями текущей даты, после чего вызывается CalendareConstructor, при этом координаты, Enable срабатывают, а Visible - нет, т.е. например сейчас в ноябре DBEdit31.Enable=False и это работает, а DBEdit31.Visible=False не работает - компонент виден !!!?. В отладчике проверял Visible=False. Причем нормальное поведение восстанавливается после смены месяца, но не года. И только после первой смены месяца начинает работать и смена года.
Разрешить эту проблему удалось отключением (ComboBox1 и Edit1).onChange в onCreate формы и включением в onActivate. Все заработало.
Вот работающий код:

procedure TForm1.FormCreate(Sender: TObject);
var Day, Month, Year : Word;
begin
Edit1.OnChange:=nil;
ComboBox1.OnChange:=nil;
DecodeDate(Now(), Year, Month, Day);
Edit1.Text:=IntToStr(Year);
ComboBox1.ItemIndex:=Month-1;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
CalendareConstructor;
Edit1.OnChange:=ComboBox1Change;
ComboBox1.OnChange:=ComboBox1Change;
end;

А вот неработающий:
procedure TForm1.FormCreate(Sender: TObject);
var Day, Month, Year : Word;
begin
DecodeDate(Now(), Year, Month, Day);
Edit1.Text:=IntToStr(Year);
ComboBox1.ItemIndex:=Month-1;
CalendareConstructor;
end;

Вопрос, хотя сейчас все и работает, но хотелось бы понять с чем связано такое поведение Visible?


 
gvb   (2002-11-15 11:45) [1]

Свойства элементов формы задаются приложением позднее, чем на этапе конструктора формы. Я предпочитаю такую работу делать в FormShow.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.016 c
6-82887
TDOP
2002-09-28 22:10
2002.11.25
Как узнать все IP адреса ?


14-83010
???
2002-11-08 15:17
2002.11.25
???


1-82771
Cranium
2002-11-15 01:27
2002.11.25
Адаптация к разрешениям монитора


7-83016
DuXe
2002-09-25 15:40
2002.11.25
Как изменить системное время?


1-82775
Оля
2002-11-15 17:08
2002.11.25
*.WAV наткнулась на один пример, но он у меня не работает




   Наверх