Вниз
Скачать: 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.013 c
14-82923
iZEN
2002-11-05 08:58
2002.11.25
Марк Кэнту,


4-83052
Xemax
2002-10-12 21:24
2002.11.25
Как узнать какие DLL подгружены к процессу?


3-82654
Viktor1
2002-11-06 12:47
2002.11.25
Как в программе подставить пароль в Access2000 (ADO)?


6-82899
lumazen
2002-09-30 16:05
2002.11.25
Как маскироваться от IDS (Intrusion Detection System)


1-82752
Lola
2002-11-13 13:29
2002.11.25
Печать из QReport в RTF-файл.




   Наверх