Вниз
Скачать: 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.012 c
14-82924
Дремучий
2002-11-04 21:29
2002.11.25
Базы MySQL


14-82968
Undert
2002-11-04 21:01
2002.11.25
Ну дык, дезигнеры и бета-тестеры!


3-82636
_VaaL_
2002-11-05 16:26
2002.11.25
Ошибка при удалении


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


4-83042
kofman
2002-10-11 09:57
2002.11.25
Как сделать, что бы PopUpMenu не закрывалось сразу после выбора?




   Наверх